The program I'm writing is supposed to take a number of tosses entered by the user, this part works.
Then take that and check to see if it is within a circle that is inside of a square. Then take the number that are inside the circle, and divide it by the number of tosses and the answer should be close to 3.14 the more tosses you choose.
here's my code so far, it works all good except the number is not close to pi at all.
-- --
-- Circlepi.adb --
-- This program estimates the area of a circle --
-- using Monte Carlo Integration. --
---------------------------------------------------------
WITH Ada.Text_IO;
USE Ada.Text_IO;
WITH Ada.Integer_Text_IO;
USE Ada.Integer_Text_IO;
WITH Ada.Float_Text_IO;
USE Ada.Float_Text_IO;
WITH Ada.Numerics.Float_Random;
USE Ada.Numerics.Float_Random;
PROCEDURE Circlepi IS
Gen : Generator;
Added_Number : integer;
Finished_Program, Samples_Inside_Circle : Integer;
Yes_No : Character;
Number_Of_Samples: integer;
X, Y : float;
estimate_of_pi : float;
BEGIN
Finished_Program := 0;
Samples_Inside_Circle := 0;
Added_Number := 1;
Estimate_Of_Pi := 0.0;
Number_Of_Samples := 0;
X := 0.0;
Y := 0.0;
WHILE (Finished_Program = 0) LOOP
Put("Enter the number of Samples: ");
Get (Number_Of_Samples);
FOR I IN 1 .. Number_Of_Samples LOOP
X := 2.0*Random(Gen) - 1.0;
Y := 2.0*Random(Gen) - 1.0;
IF X*X + Y*Y < 1.0 THEN
Samples_Inside_Circle := Samples_inside_circle + Added_Number;
END IF;
END LOOP;
Estimate_Of_Pi := float (Samples_Inside_Circle) / float (Number_Of_Samples);
Put ("Estimate of Pi: ");
Put (Estimate_Of_Pi);
new_line;
Put ("Do you want to run it again? (y)/(n)");
Get(Yes_No);
IF (Yes_No = 'n' or Yes_No = 'N') THEN
Finished_Program := 1;
END IF;
END LOOP;
END;