sin(x) in Pascal mit Hilfe von Proceduren |
|
sin(x) in Pascal mit Hilfe von Proceduren |
|
Meine Frage:
Ich brauche Hilfe bei der Proceduren von Reduktion und Komplement.
Vielen Dank
Meine Ideen:
{Ich möchte Sinus mit vielen Unterprogrammen berechnen.}
Var n, vz: Integer;
w,x,s: Real;
flag_cos: Boolean;
Function...
Function...
Procedure...
Procedure...
Procedure...
Procedure...
Procedure...
Procedure...
Begin
Eingabe (w);
Modulo (w);
Reduktion (w, vz);
Komplement (w, flag_cos);
Radian (w,x);
Taylor (x, flag_cos, s);
Ausgabe (s, vz);
End.
|
|
04.02.2016 15:36 |
|
|
|
Gibt es dazu auch eine genaue Aufgabenstellung?
Was sollen Reduktion und Komplement überhaupt machen?
Wenn du functions verwendest, hast du auch einen Rückgabewert. Den wertest du nicht aus, da könntest du auch eine procedure nehmen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
04.02.2016 17:26 |
|
|
|
Danke für Ihre Antwort.
Reduktion soll prüfen in welchem Quadrant der Winkel liegt und den Winkel in einen kleiner Wert darstellen.
z.B: w von [0°; 360°[ => w von [0°;90°[, mit Vorzeichen + oder - 1
Beim Komplement:
w von [45°; 90°[ => w von [0°; 45°[, dann aber flag_cos:= {"not false"} "true"
|
|
04.02.2016 17:44 |
|
|
|
Zitat: |
z.B: w von [0°; 360°[ => w von [0°;90°[, mit Vorzeichen + oder - 1 |
Da geht aber Information verloren.
Hattest du an so etwas gedacht (bisher ohne Setzen eines Vorzeichens)?
code: |
1:
2:
3:
4:
|
function Reduktion(alpha: Integer): Integer;
begin
result := alpha mod 90;
end; |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
04.02.2016 18:04 |
|
|
|
Hallo!
Danke für deine Antwort.
Für das Proz. Reduktion habe ich dieses Code geschrieben aber da funktioniert was nicht.
Program test;
var y,x,z,a,b,c,d,vz:Real;
Procedure Reduction(x,z,vz,a,b,c,d:integer;var y:integer);
begin
vz:=-1;
z:= x div 360;
a:= x mod 360;
if z:=0 then do y:=sin(x)
else do y:=sin(a);
if x<90 then do y:=sin(x);
if x>90 then x<180 then do b:=180-x and y:=sin(b);
if x>180 and x<270 then do c:=x-180 and y:=vz*sin(c);
if x>270 and x<360 then do d:=360-x and y:=vz*sin(d);
if x=90 then y=1;
if x=270 then y=vz*1;
if x=360 or x=180 or x=0 then y=0;
end;
Begin
ClrScr
Write('Bitte Winkel eingeben: ');
ReadLn (x);
y:=sin(x);
Write('Der Sinus des Winkels ',x:7:2, 'beträgt: ',Sinus(x):7:5);
End
|
|
07.02.2016 14:46 |
|
|
|
Kann sein, dass noch mehr falsch ist, habe jetzt nicht alles gelesen (wenn dem so ist, einfach nochmal melden).
code: |
1:
|
if x>90 then x<180 then do b:=180-x and y:=sin(b); |
|
Das and kannst du in boolschen Abfragen nehmen: if x > 90 and x < 180 (nicht then).
Wenn du mehrere Befehle ausführen willst, musst du sie in einen Block schreiben
code: |
1:
2:
3:
4:
5:
|
if x > 90 and x < 180 then
begin
b := 180-x;
y := sin(b); //das wird im Bogenmaß gerechnet, nicht im Gradmaß
end |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
07.02.2016 19:24 |
|
|
|
Wenn ich nicht z:<1 schreibe sondern z<1 dann bekomme ich Syntax error auf derm gleichen Reihe before 'do'
|
|
07.02.2016 19:48 |
|
|
|
Habe dir mal ein paar Dinge kommentiert.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
if z=0 then y:=sin(x) //keine Zuweisung in Abfrage, kein do, falsche Datentypen
else y:=sin(a); //kein do, a und y müssen real sein, nicht integer
if x<90 then do y:=sin(x); //kein do, Datentypen
if x>90 then x<180 then begin b:=180-x; y:=sin(b); end;
if x>180 and x<270 then begin c:=x-180; y:=vz*sin(c); end; //die beiden Bedingungen musst du glaube ich klammern
if x>270 and x<360 then begin d:=360-x; y:=vz*sin(d); end;
if x=90 then y=1;
if x=270 then y=vz*1;
if x=360 or x=180 or x=0 then y:=0; //Zuweisung |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
07.02.2016 19:58 |
|
|
|