Program osvětlující hádanku pana Pinkavy
Vazeny pane Culiku,
Brutalni sila nahradi logickou uvahu (jako ostatne casto v zivote).
Vysvetleni garazove hadanky panem Pinkavou 'obracenim' pravdepodobnosti je korektni, ale prilis zkratkovite.
Nevericim Tomasum, kterym se zajidaji logicke uvahy lze nabidnout reseni jednoduchou simulaci procesu Monte Carlo metodou. Je to k nevire, ale 2/3 pravdepodobnost uspechu pri zmene volby je spravna. Kdo neveri, at si spusti prilozeny programek:
Zatracene garaze
Microsoft Developer Studio
Fortran Power station 4.0
Pro edition (MSIMSL library)
program garaze
use MSIMSL
integer seed, los(1), obsazena(1), gentype,
c vyhra_fix, vyhra_zmena, pocet_pokusu
double precision pp_fix, pp_zmena, sum_pp
definice parametru pseudonahodneho generatoru
seed = 1357256581
gentype = 6
volba typu generatoru pseudonahodnych
* cisel
CALL RNOPT (gentype)
seed parametr generatoru
CALL RNSET (seed)
* volani RNUND (N, IR, CISLO)
* uniformni distribuce celych cisel 1 ... IR
* vystup: pole CISLO o dimenzi N
vyhra_fix=0
vyhra_zmena=0
do pocet_pokusu=1,10000000
nahodna volba obsazene garaze
1 xor 2 xor 3
CALL RNUND (1, 3, obsazena)
losovani
1 xor 2 xor 3
call RNUND (1, 3, los )
hrac nemenici volbu
if(los(1).eq.obsazena(1)) vyhra_fix=vyhra_fix+1
test kvality pseudonahodneho generatoru
* musi byt = 1/3
hrac menici volbu:
*
*
* dve vylucujici se moznosti:
*
prvni volba plne garaze, druha volba
* zmena na zbyvajici neotevrenou garaz, ktera musi byt
* prazdna:
*
* if(los(1).eq.obsazena(1)) vyhra_zmena=vyhra_zmena
*
prvni volba prazdne garaze, zmena na zbyvajici
* neotevrenou garaz, ktera musi byt plna protoze
* prazdna byla otevrena konferencierem:
if (los(1).ne.obsazena(1)) vyhra_zmena=vyhra_zmena+1
enddo
****** vypocet pravdepodobnosti
pocet_pokusu=pocet_pokusu-1
pp_fix=dfloat(vyhra_fix)/dfloat(pocet_pokusu)
pp_zmena=dfloat(vyhra_zmena)/dfloat(pocet_pokusu)
sum_pp=pp_fix+pp_zmena
write(6,*) 'Pocet pokusu ',pocet_pokusu
write(6,*) 'Pravdepodobnost pri fixni volbe ',pp_fix
write(6,*) 'Pravdepodobnost pri zmene volby ',pp_zmena
write(6,*) 'Celkova pravdepodobnost/kontrola ',sum_pp
end
Jaroslav Krizek