Hogy lehet a Monte Carlo-módszer leprogramozni java-ban?
Odáig jutottam, h:
public class pibecsles {
public static void main(String[] args) {
int n = 10000000;
double x, y;
double pi;
int i;
int db =0; (ebbe a nullába se vagyok biztos)
for (i = 1; i <= n; i++) {
x = Math.random();
y = Math.random();
Meg biztos van benne olyan, h:
if (Math.sqrt(x*x + y*y) <= 1)
Feladat:
Készíts programot, ami pi értékére szeretne becslést adni.
Ez úgy érheto el, hogy n db véletlenszeru (x, y) koordinátájú pontot
generálunk egy egység sugarú kör felso negyedében található egységnégyzetbe.
Számolni kell minden olyan pontot, ami a körön belül van
(azaz x2 + y2 <= 1).
A pi-re kapott becslésünk 4 * db/n lesz, ezt írjuk ki a végén.
Van egy ilyen leírás is hozzá:
Milyen gondolat menet alapján lehet megírni a programot?
Jó lenne ha valaki úgy le tudná írni, h megértsem, h kell leprogramozni.
Nem igazán áll össze, h hogyan kéne felépíteni a feladatmegoldást.
Java-ban, metódus nélkül, legalapabban kell megírnom.
Amit írtál az jó.
A for ciklus belsejében számolod a db-ot így:
if (x*x+y*y<1){
db++
}
(Nem kell gyököt vonni, mint gyök(1) úgyis 1)
Aztán a for ciklus után kiíród, hogy
db*4.0/n
Azért kell 4.0-val szorozni, mert db és n is egész, és double-é kell tenni.
Ennyi.
Kipróbáltam működik:
public class HelloWorld{
public static void main(String []args){
int n = 10000000;
int db = 0;
for (int i = 0; i < n; i++) {
double x = Math.random();
double y = Math.random();
if (x*x+y*y<1)
db++;
}
double pi = db*4.0/n;
System.out.println(pi);
}
}
Hú köszi!
Azt le tudod esetleg írni, h logikailag miért így épül fel a program? (Miért adunk 0 értéket a db-nek és a for ciklus végén miért növeljük 1-el, stb)
Nem biztos hogy pont ez az oka, de pl. ugye tömböknél az rlső elem a 0-ás cimkét kapja, így tömbbejáráskor nem kell mindig egy kivonást elvégezni.
De akkor miért nem mennek a tömb elemei 1-től? Jó kérdés. :)
Most komolyan azon megy a morfondírozás, hogy ha valamit megszámolunk, akkor miért úgy indulunk, hogy 0 valamink van?
Azért, mert ha két dolgot számolsz és onnan indulsz, hogy 7, akkor a végére 9-et számolnál, ami mintha nem lenne teljesen jó, nem?
"Miért adunk 0 értéket a db-nek és a for ciklus végén miért növeljük 1-el, stb)"
Ezt gondold végig.
Például azt akarod nézni, hogy 1-től 10-ig hány páros szám van.
Akkor csinálsz egy számlálót, ami 0-ról indul, mert mielőtt elkezdesz számolni még 0db olyan számot találtál, ami páros.
Utána egy ciklusban elmész 1-től 10-ig.
1 nem páros, a "megtalált páros számok száma" marad 0.
2 páros, db-ot növeled 1-el 0-->1
3 nem páros, db nem nő.
4 páros db nő eggyel.
A végén kiírod, a db-ot és abból meg tudod, hogy hány páros szám van 1-től 10-ig.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!