Program sirky; var Typ_hry:char; konec :boolean; psir :integer; procedure princezna; {odebira princezna} var pom:integer; begin if typ_hry ='1' then begin repeat writeln('Na stole je ',psir,'sirek,jste na rade, princezno, kolik sirek odeberete ?'); read(pom); if ((pom<>1)and(pom<>3)and(pom<>5))or(psir-pom<0) then writeln('Myslel jsem, ze princezny nesvindluji!! Odebirejte znovu!'); until not(((pom<>1)and(pom<>3)and(pom<>5))or(psir-pom<0)); end else begin repeat writeln('Na stole je ',psir,'sirek, jste na rade, princezno,'); writeln('Kolik sirek odeberete?'); read(pom); if not( ((pom-1)and(pom) =0)and(pom>0)and(psir-pom>=0)) then writeln('Myslel jsem, ze princezny nesvindluji!! Odebirejte znovu!'); until (((pom-1)and(pom)) =0)and(pom>0)and(psir-pom>=0); end; psir:=psir-pom; if psir=0 then begin writeln('Vyhrala jste, Velicenstvo a ja jdu spat do chlivku...'); konec:=true; end; end; procedure hra1; {varianta hry 1} var pom:integer; begin write('Na stole je ',psir,' sirek, jsi na rade, odebiras '); if psir>5 then pom:=5 else if psir>3 then pom:=3 else pom:=1; writeln(pom, 'sirek'); psir:=psir-pom; if psir=0 then begin writeln('Vyhral jsi, nepujdes spat do chlivku a (za trest) pujdes spat s princeznou...'); konec:=true; end; end; procedure hra2; {2.varianta hry} var pom,pom1,a:integer; begin write('Na stole je ',psir,'sirek, jsi na rade a odebiras '); if psir mod 3 =0 then pom:=1 else pom:=psir mod 3; {pro rychlejsi hru : begin pom:=0; pom1:=psir; while pom1>1 do begin pom1:=pom1 shr 1; pom:=pom+1 end; pom1:=1; for a:=1 to pom do pom1:=pom1 shl 1; while ((psir-pom1)mod 3 <>0) do pom1:=pom1 shr 1; pom:=pom1; end; } writeln(pom, 'sirek'); psir:=psir-pom; if psir=0 then begin writeln('Vyhral jsi, nepujdes spat do chlivku a (za trest) pujdes spat s princeznou...'); konec:=true; end; end; begin writeln('S kolika sirkami se bude hrat?'); readln(psir); writeln ('jaka varianta hry se bude hrat?'); writeln('1...lze odebirat pouze 1,3,5 sirek'); writeln('2...lze odebirat lib. mocninu dvou sirek'); readln(Typ_hry); konec:=false; case typ_hry of '1':begin if not (odd(psir)) then writeln ('mate to marne, princezno !') else writeln('nema to cenu, prohraju to...'); while not konec do begin princezna; if not konec then hra1; end; end; '2':begin if (psir mod 3 )=0 then writeln ('mate to marne, princezno, ale prece si s vama zahraju !') else begin writeln('pokud jste tak chytra, jak se o vas rika princezno,'); writeln('tak mi jiste nadate sanci. Jinak si o vasem IQ budu myslet sve...'); end; while not konec do begin princezna; if not konec then hra2; end; end; else writeln ('zadna hra se hrat nebude, kdyz nechces hrat...'); end; end.