Frage von vanesamoonlight, 37

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.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von sarahj, 17

ehrlich gesagt: ich habe versucht zu verstehen, was Dein Programm macht, aber aufgegeben. Es ist einfach wirr (und ich habe echt Erfahrung...).
Ein Programm welches nicht entweder in 30 Sek verstanden wird, oder aber entsprechend kommentiert ist, lehne ich i.A. (auch im Beruf) ab.

Also beschreib doch mal, was Du eigentlich berechnen willst (in Worten, die verständlich sind)

Wenn es der Sinus eines Winkels ist, wie wär's damit:

Grad in Radian umrechen (0..360 -> 0..2*Pi) und einfach Sin aufrufen.
Ich vermute nämlich, daß das Dein eigentliches Problem ist: sofern ich erinnere will auch in Pascal die sinus-Funktion das Argument in Radian und nicht in Grad; wie übrigens in fast allen Bibliotheken.

Außerdem: sinus hat kein Problem mit Werten > 2*Pi bzw. < 0.
Also wozu die ganze Dividiererei bzw. Vorzeichenprüfungen?

Und drittens: ist das ganze überhaupt syntaktisch korrekt und kompilierbar. Es beginnt mit den Argumenten der Reduction-Procedure (sie wird nur mit einem Argument aufgerufen, aber mit 7 definiert). Weiters das ":" in "if z: <..."; es ist zwar 30 Jahre her, daß ich Pascal programmierte, ich erinnere aber nicht daran, daß da ein ":" hingehört.

Ansonsten, wie wär's mit einem einfachen:

Function degreesToRadian(degrees:real) : real
begin
   degreesToRadian := degrees * Pi / 180;
end;

...
writeln('Der Sinus des WInkels....' ... 'beträgt ', sin(degreesToRadian(w));
...

nachtrag: sorry: sollte ein Kommentar sein; habe aber ausversehen auf Antwort gedrückt..

Kommentar von sarahj ,

danke für den *.
Dann hat es mit der einfachen Funktion dann doch noch funktioniert?

Antwort
von sarahj, 23

Begin
   was_ist_Dein_problem("?");
   { will sie/er wissen was eine Taylor-Entwicklung ist? }
End.


             x^3   x^5   x^7
sin(x) = x - --- + --- - --- ...
             3! 5! 7!

Kommentar von vanesamoonlight ,

{Mein Problem ist dass diese Prozedure einen Error ergibt}

program test;
var
w, z, a, b, c, d, x : real ;
Procedure 'Reduction' (var w, z, a, b, c, d : integer ; var x: real ; )
begin
z:= w div 360 ;
a:= w mod 360 ;
if z : < 1 then do x:= Sin(w) ;
if z : >= 1 do x:= Sin(a) ;
if w < 90 then do x:= Sin(w) ;
b:= 180 - w ;
if w > 90 and w < 180 then do x:= sin(b) ;
c:= w - 180 ;
if w > 180 and w < 270 then do x:= -1 * Sin(c) ;
d:= 360 - w ;
if w > 270 and w < 360 then do x:=b-1 * Sin(d) ;
if w = 90 then do x = 1 ;
if w = 270 then do x= - 1 ;
if w = 360 or w = 180 or w = 0 then do x = 0 ;
end;
Begin
ClrScr
Write ('Bitte Winkel eingeben: ') ;
ReadLn (w);
Reduction(Sin(w)) ;
x:= Sin(w) ;
Write('Der Sinus des Winkels ',w:7:2, 'beträgt: ',Sin(w) : 7:5) ;
End.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten