home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / fst / mod2brd1 / pi.mod < prev    next >
Text File  |  1990-04-08  |  2KB  |  56 lines

  1. MODULE pi_10_3;
  2. (* Progrmm zur näherungsweisen Berechnung der Kreiszahl Pi durch die
  3.    Berechnung des halben Umfangs eines gleichmäßigen N-Eckes im Ein-
  4.    heitskreis.                                                       *)
  5.  
  6. FROM IO IMPORT WrLn,WrStr,WrCard,RdChar;
  7. FROM InOut IMPORT ReadCard,ReadString;
  8. FROM RealInOut IMPORT WriteReal;
  9. FROM MathLib0 IMPORT sqrt;
  10.  
  11. VAR n,eckenanzahl:CARDINAL;
  12.     j:CHAR;
  13.  
  14. PROCEDURE halbkreis(n:CARDINAL;VAR ecken:CARDINAL):REAL;
  15. (* diese Procedure gibt den Wert von Pi zurück, n=die Zahl aus der   *)
  16. (* die Anzahl der Ecken berechnet wird, ecken=Anzahl der Ecken       *)
  17.    VAR i,b:CARDINAL;   (* i= Laufvariable, b= 2 Hoch n *)
  18.        seitenlaenge:REAL;
  19.    BEGIN
  20.      IF n=0 THEN b:=1           (* Berechnung von 2 Hoch n *)
  21.        ELSE b:=1;
  22.             FOR i:= 1 TO n DO
  23.               b:=b*2;
  24.             END;
  25.      END; (* IF *)
  26.      ecken:=6*b;
  27.      seitenlaenge:=1.0; (* Seitenlaenge eines 6-Ecks im Einheitskreis *)
  28.      FOR i:= 1 TO n DO
  29.        seitenlaenge:=sqrt(2.0-sqrt(4.0-seitenlaenge*seitenlaenge));
  30.      END;
  31.      RETURN(seitenlaenge*FLOAT(ecken DIV 2))
  32.    END halbkreis;
  33.  
  34. BEGIN   (* main *)
  35.   WrStr('Dieses Programm berechnet die Kreiszahl Pi näherungsweise ');WrLn;
  36.   WrStr('über den halben Umfang eines N-Eckes im Einheitskreis. ');WrLn;
  37.   REPEAT
  38.     REPEAT
  39.       WrStr('Eingabe von n, (n= CARDINALTYP):  ');
  40.       ReadCard(n);
  41.       WrLn;
  42.     UNTIL n>=0;
  43.     eckenanzahl:=0;
  44.     WrStr(' Pi errechnet sich zu: ');
  45.     WriteReal(halbkreis(n,eckenanzahl),5); WrLn;
  46.     WrStr('im ');
  47.     WrCard(eckenanzahl,5);
  48.     WrStr(' Eck.');
  49.     WrLn;WrLn;
  50.     WrStr('Noch eine Berechnung?  ([J]a oder [N]ein)');
  51.     ReadString(j);
  52.     WrLn;WrLn;
  53.   UNTIL (j="n") OR (j="N");
  54.  
  55. END pi_10_3.
  56.