Prisiminiau šį uždavinuką ir pagalvojau, kad galbūt jis ką nors sudomins :D . Galbūt sąlyga bus kiek abstrakti, bet nežinau ar būtų įdomu, jei parašyčiau daugiau detalių :D . Taigi, turime apskritimą, kuris yra įbrėžtas kvadrate. 1. Kokia tikimybė, kad atsitiktinai pasirinktas kvadrato viduje esantis taškas bus taip pat ir apskritimo viduje? 2. Besinaudojant pirmo punkto atsakymu, parašyti programą, kuri skaičiuoja pi reikšmę. (programa neturėtų pati nutraukti darbo, y.y., ji turėtų dirbti iki pasaulio pabaigos :D ) Mažokai informacijos parašiau, tad galbūt po to kokių nors užuominų parašysiu. Beje, pats šią užduotį padariau paskaliu, tad galbūt sprendimas atrodys kiek kitaip rašant su kita kalba.
DEMO +1000
Priminė Bufono adatos problemą...
pakeista prieš 13 m
valdas3 (+1276)
lukasmPriminė Bufono adatos problemą...
Jei labai nori, tai gali sukurti adatų metimo simuliatorių :D , bet šios problemos nėra susijusios (nors tiesioginių sąsajų nematau).
DEMO +1000
Jos tiesiogiai nesusiję. Panašumas tik tas, kad šitų problemų dėka galima gražiai apytiksliai apskaičiuot pi reikšmę naudojant tikimybių teoriją. Bent jau Bufono adatos problema, kai pirmąkart perskaičiau ją, mane sužavėjo. :D
pakeista prieš 13 m
brainstorm (+103)
Tikimybė tikriausiai yra apskritimo ir kvadrato plotų santykis, o programoje aš generuočiau du atsitiktinius skaičius iš intervalo (-R;R) ir tikrinčiau, ar duotas taškas patenka i apskritimo vidų. pi reikšmė bus [tex]4 \times \frac{\mbox{taskai patenkantys i apskritimo vidu}}{\mbox{visi sugeneruoti taskai}}[/tex]
valdas3 (+1276)
Taip, teisingai :) , bet vis tiek norėtųsi pamatyti kokią nors programą :D
Pateiksiu savo programą :) Pirmiausiai, užtenka tikrinti tik pirmą ketvirtį, o ne visą apskritimą. Taip pat, R neturi reikšmės, todėl jį galima pasirinkti pačiam (pasirinkau R = 1). Paskalyje random() funkcija grąžina (jei neperduodamas joks argumentas) realų skaičių nuo 0 iki 1.
var m, n : QWord; x, y : real; begin m := 0; n := 0; while true do begin x := random(); y := random(); if (x*x + y*y) < 1 then m := m + 1; n := n + 1; if ((n+1) mod 999999) = 0 then writeln('PI = ', (m/n)*4); end; end.