home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
library
/
fst
/
mod2brd1
/
pi.mod
< prev
next >
Wrap
Text File
|
1990-04-08
|
2KB
|
56 lines
MODULE pi_10_3;
(* Progrmm zur näherungsweisen Berechnung der Kreiszahl Pi durch die
Berechnung des halben Umfangs eines gleichmäßigen N-Eckes im Ein-
heitskreis. *)
FROM IO IMPORT WrLn,WrStr,WrCard,RdChar;
FROM InOut IMPORT ReadCard,ReadString;
FROM RealInOut IMPORT WriteReal;
FROM MathLib0 IMPORT sqrt;
VAR n,eckenanzahl:CARDINAL;
j:CHAR;
PROCEDURE halbkreis(n:CARDINAL;VAR ecken:CARDINAL):REAL;
(* diese Procedure gibt den Wert von Pi zurück, n=die Zahl aus der *)
(* die Anzahl der Ecken berechnet wird, ecken=Anzahl der Ecken *)
VAR i,b:CARDINAL; (* i= Laufvariable, b= 2 Hoch n *)
seitenlaenge:REAL;
BEGIN
IF n=0 THEN b:=1 (* Berechnung von 2 Hoch n *)
ELSE b:=1;
FOR i:= 1 TO n DO
b:=b*2;
END;
END; (* IF *)
ecken:=6*b;
seitenlaenge:=1.0; (* Seitenlaenge eines 6-Ecks im Einheitskreis *)
FOR i:= 1 TO n DO
seitenlaenge:=sqrt(2.0-sqrt(4.0-seitenlaenge*seitenlaenge));
END;
RETURN(seitenlaenge*FLOAT(ecken DIV 2))
END halbkreis;
BEGIN (* main *)
WrStr('Dieses Programm berechnet die Kreiszahl Pi näherungsweise ');WrLn;
WrStr('über den halben Umfang eines N-Eckes im Einheitskreis. ');WrLn;
REPEAT
REPEAT
WrStr('Eingabe von n, (n= CARDINALTYP): ');
ReadCard(n);
WrLn;
UNTIL n>=0;
eckenanzahl:=0;
WrStr(' Pi errechnet sich zu: ');
WriteReal(halbkreis(n,eckenanzahl),5); WrLn;
WrStr('im ');
WrCard(eckenanzahl,5);
WrStr(' Eck.');
WrLn;WrLn;
WrStr('Noch eine Berechnung? ([J]a oder [N]ein)');
ReadString(j);
WrLn;WrLn;
UNTIL (j="n") OR (j="N");
END pi_10_3.