(* MIAS S1 TP3bis : corrigé *)

(********************)

PROGRAM tp3bexc1 ;

VAR atrouver, propose : integer ;
compteur : integer;

BEGIN
randomize ;
atrouver:=random(32767)+1 ;
compteur:=0 ;
repeat
   propose:=0 ;
   compteur:=compteur+1 ;
   write('essai numero ',compteur,' ? ') ; readln(propose) ;
   if (propose<atrouver) then writeln('Trop petit') ;
   if (propose>atrouver) then writeln('Trop grand') ;
   until (propose=atrouver) or (compteur=15) ;
if (propose=atrouver)
   then writeln('Gagne en ',compteur,' coups.')
   else writeln('Perdu ! il fallait trouver ',atrouver) ;
END.

(********************)

PROGRAM tp3bexc2a ;
USES crt ;

VAR n, compteur : integer ;

BEGIN
clrscr ;
write('entier (entre 1 et 999 ? ') ; readln(n) ;
compteur:= 0 ;
while (n>1) do
   begin
   if ((n mod 2)=0)
      then n:=n div 2
      else n:=3*n+1 ;
   compteur:=compteur+1 ;
   (* pour un ecran de 80=8*10 caracteres *)
   write(compteur:4,': ',n:4) ;
   if ((compteur mod 8)=0) then writeln ;
   end ;
writeln ;
END.

(********************)

PROGRAM tp3bexc2b ;
USES crt ;

VAR n, compteur, base : integer ;

BEGIN
clrscr ;
for n:=1 to 50 do
   begin
   compteur:= 0 ;
   base:=n ;
   while (n>base) do
      begin
         if ((n mod 2)=0)
            then n:=n div 2
            else n:=3*n+1 ;
      compteur:=compteur+1 ;
      (* pour un ecran de 80=8*10 caracteres *)
      write(compteur:4,': ',n:4) ;
      if ((compteur mod 8)=0) then writeln ;
      end ;
   writeln ;
   end ;
END.

(********************)

PROGRAM tp3bexc3a ;
USES crt ;

VAR niveau, hauteur : integer ;
proba : integer ;

BEGIN
clrscr ;
write('nombre de marches de l''escalier ? ') ;
readln(hauteur) ;
niveau:=0 ;
while (niveau<hauteur) do
   begin
   proba:=random(10) ;
   case proba of
      0,1,2,3 : begin
                    niveau:=niveau+1 ;
                    writeln(niveau,': c''est parti!') ;
                    end ;
      4,5,6 : writeln(niveau,': oups!') ;
      7,8 : if (niveau=0)
                 then writeln(niveau,': oups!')
                 else begin
                        niveau:=niveau-1 ;
                        writeln(niveau,': zut!') ;
                        end ;
      9 : if (niveau=0)
              then writeln(niveau,': oups!')
              else begin
                     niveau:=0 ;
                     writeln(niveau,': aie! aie! aie!') ;
                     end ;
      end ;
   if (niveau=hauteur) then writeln(niveau,': j'y suis !') ;
   end ;
END.

(********************)

PROGRAM tp3bexc3b ;
USES crt ;

VAR niveau, hauteur, nessais, npas, moyenne : integer ;
proba : integer ;

BEGIN
clrscr ;
write('nombre de marches de l''escalier ? ') ; readln(hauteur) ;
write('nombre d'essais ? ') ; readln(n) ;
niveau:=0 ;
npas:=0 ;
for i:=1 to nessais do
   begin
   while (niveau<hauteur) do
      begin
      proba:=random(10) ;
      case proba of
         0,1,2,3 : begin
                       niveau:=niveau+1 ;
                       writeln(niveau,': c''est parti!') ;
                       end ;
         4,5,6 : writeln(niveau,': oups!') ;
         7,8 : if (niveau=0)
                    then writeln(niveau,': oups!')
                    else begin
                          niveau:=niveau-1 ;
                          writeln(niveau,': zut!') ;
                          end ;
         9 : if (niveau=0)
                 then writeln(niveau,': oups!')
                 else begin
                        niveau:=0 ;
                        writeln(niveau,': aie! aie! aie!') ;
                        end ;
         end ;
      if (niveau=hauteur) then writeln(niveau,': j'y suis !') ;
      npas:=npas+1 ;
      end ;
   end ;
moyenne:=npas/nessais ;
writeln('Nombre moyen de pas par montée :',moyenne) ;
writeln('pour un escalier de ',hauteur,' marches'.) ;
END.

(****************************************)