Uses Crt,Knihovna; (**) Procedure VynulujMenu; Forward; Procedure Zvyrazni(X:byte); Forward; (**) Var Z:Char; Menu:array[1..9] of String; Cisla:array[1..6] of Integer; Prav:array[1..9] of Real; Nahod:array[1..9] of Real; Prumer:Real; Aktualni:Byte; Graf,Pr:Boolean; Kolik:String; i,o,Sestky,Licha,Soucet:LongInt; p:Integer; Mode:Byte; Label Start,Konec,Proved,Uvod; (**) Procedure VynulujMenu; Var i:integer; Begin For i:=1 to 9 do Begin if i>4 then if mode=0 then exit; if mode=0 then Locate(6,i+9,Strings(20,' ')) else Locate(6,i+9,Strings(30,' ')); Locate(7,i+9,Menu[i]); End; End; (**) Procedure Zvyrazni(X:byte); Var Q:LongInt; a,b:string; w:real; c,d:integer; Begin Barva(2,4); if mode=0 then Locate(6,X+9,Strings(20,' ')) else Locate(6,X+9,Strings(30,' ')); Locate(7,X+9,Menu[X]); Barva(15,1); if Mode=1 then Begin Locate(38,8,'Teoretick  pravdepodobnost: '); Write (Prav[X]:0:7); Locate(38,9,'Vypoctena pravdepodobnost: '); Write (Nahod[X]:0:7); GotoXY(38,10); Case X of 1..6: Q:=Cisla[X]; 7: Q:=Sestky; 8: Q:=Licha; 9: Q:=Soucet; End; Write('Pocet vygenerovanych/ teoretickych: '); Str(Q,a); If (Q=0) or (Round(Prav[X]*o)=0) then w:=0 else w:=Q/Round(Prav[X]*o); Str(Round(Prav[X]*o),b); a:=a + '/' + b; Locate(38,11,Strings(37-Length(a),' '));Write(a); GotoXY(38,12);Write('Rozdil vygener./ teoret.: ',q-Round(Prav[X]*o)); GotoXY(38,13);Write('Pomer vygenerov./ teoret.: ',w:0:7); GotoXY(38,14);Write('Prumer nahodnych cisel: ',Prumer:0:7); Locate(38,17,'(U vypoctu dochazi k zaoukrouhleni)'); Locate(38,18,'(Prumer nahod. cisel by mel byt 3.5)'); If Graf=True Then Begin c:=round(Nahod[X]*68); d:=round(Prav[X]*68); Locate(7,21,Strings(68,'°')); Pismo(2); Locate(7,21,Strings(c,'²')); if c>d then Begin Pismo(11); for Q:=d to c-1 do Locate(Q+7,21,'²'); End; if d>c then Begin Pismo(12); for Q:=c to d-1 do Locate(Q+7,21,'²'); End; Pismo(15); End; Exit; End; Locate(7,15,Strings(50,' '));GotoXY(7,15); Case X of 1: Write('Provest vypocet ->'); 2: Write('Pocet mezivypoctu'); 3: Write('Zobrazit graf pravdepodobnosti'); 4: Write('Ukoncit program'); End; End; (**) Begin Kolik:='10000'; Uvod: Randomize;Mode:=0; Menu[1]:='Provest'; Menu[2]:='Pocet hodu ' + strings(5-length(Kolik),' ') + Kolik; Menu[3]:='Zobrazit graf Ano'; Menu[4]:='Ukoncit'; Barva(15,1);ClrScr; VytvorRam(1,1,80,24,1); VytvorNapis(3,2,2,'PRAVDEPODOBNOSTI'); VytvorRam(5,7,60,16,1); Locate(7,8,'Nastaven¡:'); VytvorVlastniOkraj('Ì͹*****'); VytvorRam(1,5,80,5,0); VytvorRam(5,9,26,9,0); VytvorRam(5,14,60,14,0); VytvorVlastniOkraj('ËaÍbºÊcÍ'); VytvorRam(26,7,26,14,0);Locate(26,9,'¹'); Locate(28,8,'Tento program porovnava'); Locate(28,9,'teoretickou pravdepodobnost'); Locate(28,10,'s pravdepodobnosti vypoctenou'); Locate(28,11,'z nahodne vybranych cisel'); Locate(28,12,'hraci kostky (1 az 6).'); Aktualni:=1;Graf:=True; Start: VynulujMenu; Zvyrazni(Aktualni); Z:=Readkey; Case Ord(Z) of 80: Begin Pr:=False; Aktualni:=Aktualni+1; If (Aktualni=5) and (mode=0) then Aktualni:=1; If (Aktualni=10) and (mode=1) then Aktualni:=1; End; 72: Begin Pr:=False; Aktualni:=Aktualni-1; If (Aktualni=0) and (mode=0) then Aktualni:=4; If (Aktualni=0) and (mode=1) then Aktualni:=9; End; 27: if mode=0 then Goto Konec else Goto uvod; 13: Begin if Mode=0 then Begin Pr:=False; Case Aktualni of 1: Goto Proved; 3: Begin Pr:=False; If Graf=False Then Graf:=True Else Graf:=False; If Graf=True Then Menu[3]:='Zobrazit graf Ano' else Menu[3]:='Zobrazit graf Ne'; Zvyrazni(3); End; 4: Goto Konec; End; End; End; 48..57: Begin If Mode=0 then Begin If Aktualni=2 then Begin If Pr=False Then Begin Pr:=True;Kolik:='';End; if Length(Kolik)<5 then Kolik:=Kolik + Z; Menu[2]:='Pocet hodu ' + strings(5-length(Kolik),' ') + Kolik; Zvyrazni(2); End; End; End; End; Goto Start; Proved: (**) Val(Kolik,o,p); If o=0 then Goto Start; Sestky:=0;Licha:=0;Soucet:=0; For i:=1 to 6 do Begin Cisla[i]:=0; Prav[i]:=1/6; End; Aktualni:=0; For i:=1 to o do Begin p:=Random(6)+1; Cisla[p]:=Cisla[p]+1; If (p=6) and (Aktualni=6) then Sestky:=Sestky+1; If (p mod 2=1) and (Aktualni mod 2=1) then Licha:=Licha+1; if p+Aktualni=6 then Soucet:=Soucet+1; Aktualni:=p; End; Prumer:=0; For i:=1 to 6 do Begin Nahod[i]:=Cisla[i]/o; Prumer:=Prumer+Cisla[i]*i; End; Prumer:=Prumer/o; Nahod[7]:=Sestky/o; Nahod[8]:=Licha/o; Nahod[9]:=Soucet/o; Menu[1]:='cislo 1'; Menu[2]:='cislo 2'; Menu[3]:='cislo 3'; Menu[4]:='cislo 4'; Menu[5]:='cislo 5'; Menu[6]:='cislo 6'; Menu[7]:='dve 6 za sebou'; Menu[8]:='dve licha cisla za sebou'; Menu[9]:='soucet sousednich cisel je 6'; Prav[7]:=1/36; Prav[8]:=1/4; Prav[9]:=5/36; Barva(15,1);ClrScr; VytvorRam(1,1,80,24,1); VytvorNapis(3,2,2,'PRAVDEPODOBNOSTI'); VytvorRam(5,7,76,19,1); Locate(7,8,'Pravdepodobnost, ze padne/ou:'); VytvorVlastniOkraj('Ì͹*****'); VytvorRam(1,5,80,5,0); VytvorRam(5,9,36,9,0); VytvorVlastniOkraj('ËaÍbºÊcÍ'); VytvorRam(36,7,36,19,0);Locate(36,9,'¹'); Aktualni:=1;Mode:=1; If Graf=True Then Begin Locate(7,21,Strings(68,'°')); VytvorRam(5,19,76,22,1); Locate(5,19,'Ì');Locate(76,19,'¹');Locate(36,19,'Ê'); Locate(7,20,'0');Locate(74,20,'1');Locate(39,20,'1/2'); Locate(28,20,'1/3');Locate(50,20,'2/3'); Locate(22,20,'1/4');Locate(56,20,'3/4'); Locate(16,20,'1/6');Locate(62,20,'5/6'); End; Goto Start; (**) Konec: Pozadi(0);ClrScr; End.