|
|
Przygotowanie i Wejście danych
Na początku program przygotowuje środowisko i pobiera dane wejściowe.
- Kod: public class Pi { ... main ... Scanner klaw=...
- Schemat: Krok 1 (START). Te linie to standardowa struktura programu w Javie, odpowiadająca za uruchomienie procesu.
- Kod: System.out.print("n = "); oraz int n=klaw.nextInt();
- Schemat: Krok 2 (Czytaj: n). Program prosi użytkownika o podanie liczby n (całkowitej liczby losowanych punktów) i zapisuje ją w pamięci.
Inicjalizacja zmiennych
Przed wejściem w pętlę program musi ustawić liczniki.
- Kod: int k=0;
- Schemat: Krok 3 (część pierwsza: k:=0). Zmienna k (liczba punktów trafionych w koło) jest zerowana.
- Kod: for(int i=1; ...)
- Schemat: Krok 3 (część druga: i:=1). Inicjalizacja pętli for ustawia licznik i na wartość początkową 1.
Pętla główna (Symulacja Monte Carlo)
Wewnątrz pętli realizowana jest główna logika algorytmu. Pętla for w Javie kompaktowo realizuje kilka kroków ze schematu blokowego jednocześnie.
- Kod: x=Math.random(); oraz y=Math.random();
- Schemat: Krok 4 (x:=random, y:=random). Program losuje współrzędne punktu. Funkcja Math.random() generuje liczby z przedziału 0.0 do 1.0, co odpowiada ćwiartce koła wpisanej w kwadrat jednostkowy.
- Kod: if(x*x+y*y<=1) ...
- Schemat: Krok 5 (Decyzja: x2+y2<=1). Jest to warunek sprawdzający, czy wylosowany punkt (x,y) leży wewnątrz koła o promieniu 1 (zgodnie z twierdzeniem Pitagorasa).
- Kod: ... k++;
- Schemat: Krok 6 (k:=k+1). Ta instrukcja wykonuje się tylko wtedy (ścieżka "T" na schemacie), gdy warunek z kroku 5 jest spełniony. Zwiększamy licznik trafień. Jeśli warunek nie jest spełniony (ścieżka "N"), ten krok jest pomijany.
- Kod: ... i++) (część nagłówka pętli for)
- Schemat: Krok 7 (i:=i+1). Po wykonaniu ciała pętli następuje inkrementacja licznika i.
- Kod: ... i<=n; ... (warunek w nagłówku pętli for)
- Schemat: Krok 8 (Decyzja: i<=n). Program sprawdza, czy wykonano już n powtórzeń.
- Jeśli Tak (T): Pętla kontynuuje działanie (wraca do kroku 4 – strzałka w górę na schemacie).
- Jeśli Nie (N): Pętla się kończy i program przechodzi dalej.
- Schemat: Krok 8 (Decyzja: i<=n). Program sprawdza, czy wykonano już n powtórzeń.
Obliczenia końcowe i Wynik
Po zakończeniu pętli następuje obliczenie przybliżenia i wyświetlenie wyniku.
- Kod: double p=4.*k/n;
- Schemat: Krok 9 (p:=4∗k/n). Obliczenie wartości π. Użycie 4. (z kropką) w kodzie wymusza dzielenie zmiennoprzecinkowe, co jest kluczowe dla dokładności wyniku.
- Kod: System.out.println(p);
- Schemat: Krok 10 (Pisz: p). Wypisanie obliczonego wyniku na ekran.
- Kod: } } (klamry zamykające)
- Schemat: Krok 11 (STOP). Zakończenie działania programu.
Wnioski: Program wiernie odwzorowuje algorytm ze schematu blokowego. Jedyną różnicą techniczną jest to, że pętla for w Javie grupuje inicjalizację (krok 3), inkrementację (krok 7) i warunek końcowy (krok 8) w jednej linii kodu, co jest standardową praktyką programistyczną.
