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