-- `Le moment est solennel pour vous; vous participez au c\'el\`ebre jeu` -- `t\'el\'evis\'e \og Tiroir, mon beau tiroir, qu'est-ce ? \fg.` -- `L'animateur-vedette Patrick Sandentier vous pr\'esente trois tiroirs` -- `ferm\'es. L'un d'eux contient le titre de propri\'et\'e de la Porsche 911` -- `de vos r\^eves, les deux autres sont vides. Au hasard, vous d\'esignez un` -- `des tiroirs, sans l'ouvrir. L'animateur (qui sait, lui, quel est le bon` -- `tiroir) vous soumet alors \`a une petite \'epreuve cruelle: il ouvre un` -- `des deux autres tiroirs, vous montre qu'il est bien vide, et vous demande` -- `si vous d\'esirez modifier votre choix.` -- `Que r\'epondez-vous?` with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random; procedure Porscherie is G: Generator; function Pos_random( p: positive ) return positive is begin return 1 + Integer( Random(G) * Float(p) ) mod p; end; function Pile_Face return boolean is begin return Pos_random( 2 ) = 1; end; type strategie is ( garder, tirer_au_sort, changer ); function Gagne_jeu_Porsche( s: strategie ) return boolean is choix_1, porsche: positive; begin porsche:= Pos_random(3); -- _Le_ tiroir a la Porsche choix_1:= Pos_random(3); -- 1er choix du joueur if choix_1 = porsche then -- Il est tombe sur la Porsche (1er choix) -- ---> Sandentier retire un des deux tiroirs vides case s is when garder => return True; -- Il garde la Porsche when tirer_au_sort => return Pile_Face; -- C'est comme pile ou face when changer => return False; -- Il perd la Porsche end case; else -- Il n'est pas tombe sur la Porsche (1er choix) -- ---> Sandentier retire l'autre tiroir vide case s is when garder => return False; -- Il ne gagne pas la Porsche when tirer_au_sort => return Pile_Face; -- C'est comme pile ou face when changer => return True; -- Il gagne la Porsche end case; end if; end; essais: natural:= 10; gagnes: natural; begin Reset(G); boucle_nb_essais: for log10 in 1..6 loop boucle_strategies: for s in strategie loop gagnes:= 0; for e in 1..essais loop if Gagne_jeu_Porsche( s ) then gagnes:= gagnes + 1; end if; end loop; Put( gagnes ); Put(" / "); Put( essais ); Put( 100.0*float(gagnes)/float(essais), 8,2,0 ); Put_Line( " % " & strategie'image(s) ); end loop boucle_strategies; New_Line; essais:= essais * 10; end loop boucle_nb_essais; end Porscherie;