home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9303 / monte / nadel.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-06-14  |  2.2 KB  |  78 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      NADEL.PAS                         *)
  3. (*          Experimentelle Bestimmung der Zahl Pi         *)
  4. (*      Die Anzahl der Versuche muß sehr groß sein!       *)
  5. (*        (c) 1993 Dr.Lothar Wenzel & DMV-Verlag          *)
  6. (* ------------------------------------------------------ *)
  7. PROGRAM Nadeln;
  8.  
  9. USES
  10.   Graph;
  11.  
  12. CONST
  13.   Breite   =  600; { Grafikfenster }
  14.   Laenge   =  400;
  15.   Position =  100;
  16.   Anzahl   =   23; { Anzahl der Geraden }
  17.   Versuche = 1000; { Anzahl der Versuche }
  18.   Groesse  =   25; { Abstand der Geraden }
  19.  
  20. VAR
  21.   i            : LongInt; { Zähler für Versuche }
  22.   x1,x2        : REAL;    { Position der Nadel }
  23.   y1,y2        : REAL;
  24.   Winkel       : REAL;    { Neigung der Nadel }
  25.   Treffer      : LongInt; { Anzahl der Treffer }
  26.   i1,i2        : LongInt; { Hilfsgrößen }
  27.   Wert,
  28.   Wert_Alt     : STRING;
  29.   Ergebnis,
  30.   Ergebnis_Alt : REAL;
  31.  
  32. {*** Initialisierung der Grafik ***}
  33.   PROCEDURE Graph_init;
  34.   VAR
  35.     Gd, Gm : INTEGER;
  36.   BEGIN
  37.     Gd := Detect;
  38.     InitGraph(Gd, Gm, '');
  39.     IF GraphResult <> grOk THEN Halt(1);
  40.   END;
  41.  
  42. BEGIN
  43.   Graph_init;
  44.   SetColor(Blue);
  45.   SetBkColor(Black);
  46.   Rectangle(1,1,Breite,Laenge);
  47.   SetColor(White);
  48.   FOR i:=0 TO Anzahl DO
  49.     Line(5+Groesse*i,5,5+Groesse*i,Laenge-5);
  50.  
  51.   Treffer  := 0;
  52.   Wert_Alt := '';
  53.   FOR i := 1 TO Versuche DO BEGIN
  54.     x1     := 5 + Random*Breite;
  55.     y1     := 5 + Random*Laenge;
  56.     Winkel := Random*2*Pi;
  57.     x2     := x1 + Groesse*Sin(Winkel);
  58.     y2     := y1 + Groesse*Cos(Winkel);
  59.     Line(Round(x1), Round(y1), Round(x2), Round(y2));
  60.     i1 := Round((x1 - 5)/25);
  61.     i2 := Round((x2 - 5)/25);
  62.     IF (i1 <> i2) THEN BEGIN
  63.       Treffer      := Succ(Treffer);
  64.       Ergebnis_Alt := Ergebnis;
  65.       Wert_Alt     := Wert;
  66.       Ergebnis     := 2*i/Treffer;
  67.       Str(2*i/Treffer:8:5, Wert);
  68.       SetColor(Black);
  69.       OutTextXY(Position, Laenge+50, Wert_Alt);
  70.       SetColor(White);
  71.       OutTextXY(Position, Laenge+50, Wert);
  72.     END;
  73.   END;
  74.   ReadLn;
  75. END.
  76. (* ------------------------------------------------------ *)
  77. (*                      NADEL.PAS                         *)
  78.