home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* NADEL.PAS *)
- (* Experimentelle Bestimmung der Zahl Pi *)
- (* Die Anzahl der Versuche muß sehr groß sein! *)
- (* (c) 1993 Dr.Lothar Wenzel & DMV-Verlag *)
- (* ------------------------------------------------------ *)
- PROGRAM Nadeln;
-
- USES
- Graph;
-
- CONST
- Breite = 600; { Grafikfenster }
- Laenge = 400;
- Position = 100;
- Anzahl = 23; { Anzahl der Geraden }
- Versuche = 1000; { Anzahl der Versuche }
- Groesse = 25; { Abstand der Geraden }
-
- VAR
- i : LongInt; { Zähler für Versuche }
- x1,x2 : REAL; { Position der Nadel }
- y1,y2 : REAL;
- Winkel : REAL; { Neigung der Nadel }
- Treffer : LongInt; { Anzahl der Treffer }
- i1,i2 : LongInt; { Hilfsgrößen }
- Wert,
- Wert_Alt : STRING;
- Ergebnis,
- Ergebnis_Alt : REAL;
-
- {*** Initialisierung der Grafik ***}
- PROCEDURE Graph_init;
- VAR
- Gd, Gm : INTEGER;
- BEGIN
- Gd := Detect;
- InitGraph(Gd, Gm, '');
- IF GraphResult <> grOk THEN Halt(1);
- END;
-
- BEGIN
- Graph_init;
- SetColor(Blue);
- SetBkColor(Black);
- Rectangle(1,1,Breite,Laenge);
- SetColor(White);
- FOR i:=0 TO Anzahl DO
- Line(5+Groesse*i,5,5+Groesse*i,Laenge-5);
-
- Treffer := 0;
- Wert_Alt := '';
- FOR i := 1 TO Versuche DO BEGIN
- x1 := 5 + Random*Breite;
- y1 := 5 + Random*Laenge;
- Winkel := Random*2*Pi;
- x2 := x1 + Groesse*Sin(Winkel);
- y2 := y1 + Groesse*Cos(Winkel);
- Line(Round(x1), Round(y1), Round(x2), Round(y2));
- i1 := Round((x1 - 5)/25);
- i2 := Round((x2 - 5)/25);
- IF (i1 <> i2) THEN BEGIN
- Treffer := Succ(Treffer);
- Ergebnis_Alt := Ergebnis;
- Wert_Alt := Wert;
- Ergebnis := 2*i/Treffer;
- Str(2*i/Treffer:8:5, Wert);
- SetColor(Black);
- OutTextXY(Position, Laenge+50, Wert_Alt);
- SetColor(White);
- OutTextXY(Position, Laenge+50, Wert);
- END;
- END;
- ReadLn;
- END.
- (* ------------------------------------------------------ *)
- (* NADEL.PAS *)
-