Mathematical problem

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)

Author: Ľuboš Saloky
Program: Prasata.pasPrasata2.pasPrasata3.pasPrasata5.pas
File exe: Prasata.exePrasata2.exePrasata3.exePrasata5.exe

Mathematical problem
{ prasata.pas                                                       }
{ Matematicka uloha: Mame 2 miestnosti a 3 prasiatka v jednej       }
{ z nich. Kazdu minutu prejde jedno prasiatko do druhej miestnosti. }
{ Za aky cas budu vsetky tri prasiatka v druhej miestnosti?         }
{                                                                   }
{ Author: Ľuboš Saloky                                              }
{ Datum: 01.01.1996                           http://www.trsek.com  }
 
program Tri_prasiatka;
uses Crt;
const MaxIndex=420;
      pocetpokusov=51000;
var minuty:array[1..MaxIndex] of word;
    p:array[1..3] of byte;                 {prasiatka}
    x,y,pocet:word;                        {pomocnâ?? premennâ??}
    sucet:longint;
    priemer:real;
    ch:char;
 
{   Matematicka uloha: Mame 2 miestnosti a 3 prasiatka v jednej z nich.
Kazdu minutu prejde jedno prasiatko do druhej miestnosti. Za aky cas
budu vsetky tri prasiatka v druhej miestnosti?}
 
procedure Rozpis;
begin
  ClrScr;
  writeln('Rozpis: 1     3     5     7     9     11    13    15    17    19  ');
  writeln('------------------------------------------------------------------');
  for x:=3 to 23 do writeln(20*(x-3));
  for y:= 0 to 20 do begin
    for x:=1 to 20 do begin
      if y*20+x<MaxIndex then begin
        gotoxy(x*3+7,y+3);
        writeln(minuty[y*20+x]);
      end;
      Inc(x);
    end;
  end;
end;
 
BEGIN
  ClrScr;
  for x:=1 to MaxIndex do minuty[x]:=0;
  sucet:=0;
  Randomize;
  for x:=1 to pocetpokusov do begin
    pocet:=0;
    for y:=1 to 3 do p[y]:=0;
    repeat
      y:=random(3)+1;                      {aktualne prasiatko}
      p[y]:=p[y] xor 1;
      Inc(pocet);
    until p[1]+p[2]+p[3]=3;
    if pocet<MaxIndex then Inc(minuty[pocet])
    else begin
      writeln('Fatal Error!!! Program terminated.');
      Exit;
    end;
  end;
  for x:=1 to MaxIndex do sucet:=sucet+minuty[x]*x;
  priemer:=sucet/pocetpokusov;
  writeln('Statisticke udaje:');
  writeln('Prasata pobehovali ',sucet,' minut');
  writeln('Priemerny cas:',priemer:1:2,' minuty');
  writeln('--------------------------------------------');
  writeln('Chces rozpis poctu pokusov za jednotlive minuty? a/n');
  readln(ch);
  if (ch='a') or (ch='A') then Rozpis;
  gotoxy(1,24);
  write('Koniec programu.');
  readln;
END.