sin(x) in Pascal mit Hilfe von Proceduren

Neue Frage »

Auf diesen Beitrag antworten »
VanesaMoonlight 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.
 
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
VanesaMoonlight

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"
Auf diesen Beitrag antworten »
eulerscheZahl

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;
 
Auf diesen Beitrag antworten »
VanesaMoonlight

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
Auf diesen Beitrag antworten »
eulerscheZahl

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
Auf diesen Beitrag antworten »
VanesaMoonlight

Danke für deine Antwort.
Ich bekomme einen Error: Syntax error before ':' auf dem 8. Reihe
das heißt in: {if z:<1 then do x := Sin(w);}
Auf diesen Beitrag antworten »
VanesaMoonlight

Wenn ich nicht z:<1 schreibe sondern z<1 dann bekomme ich Syntax error auf derm gleichen Reihe before 'do'
Auf diesen Beitrag antworten »
eulerscheZahl

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
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »