Cykly
Cyklus s pevným počtom opakovaní (PPO)
Občas potrebujeme opakovať určitý príkaz resp. postupnosť príkazov určitý počet krát. Využijeme k tomu cyklus s PPO, ktorého syntax vyzerá takto:
for RPC:=DH to HH do
telo_cyklu;
Vysvetlenie:
- RPC - riadiaca premenná cyklu (vždy typu integer)
- DH - dolná hranica
- na začiatku sa do RPC priradí DH a testuje sa podmienka, či DH<=HH
- ak áno, vykoná sa telo cyklu, zväčší sa hodnota RPC o 1 a znova sa testuje podmienka
- ak nie, pokračuje sa za telom cyklu
- minimálny počet opakovaní je 0
Program cyklusPPO;
var a:integer;
begin
for a:=1 to 10 do writeln(a:3,a*a:4,a*a*a:5);
readln;
end.
Skús vysvetliť:
Program Stars;
var i,j,M:integer;
begin
writeln('Zadaj pocet r');
readln(M);
for j:=1 to M do
begin
for i:=1 to j do
write('*');
writeln;
end ;
readln;
end.
Druhou možnosťou je:
for RPC:=HH downto DH do
telo_cyklu;
V tomto prípade sa riadiaca premenná cyklu zmenšuje o 1.
Podmienený cyklus s podmienkou na začiatku
Syntax:
while vyraz do
telo_cyklu; { príkazy }
- najskôr sa vyhodnotí pravdivosť logického výrazu (podmienka)
- ak je pravdivý, vykoná sa príkaz alebo blok príkazov
- ak nie je pravdivý, pokračuje sa za telom cyklu
- nemusí sa vykonať ani raz, ak nie je splnená podmienka (min. počet opakovaní = 0)
WHILE (podmienka) DO
BEGIN{ak pri splnení podmienky treba vykonať sekvenciu príkazov, vložíme je medzi begin a end;}
príkaz1;
prikaz2;
.. ;
END;
A v praxi:
Program Zvysok1;
var a,b:integer;
begin
readln(a,b);
while a>=b do
begin
a:=a-b;
end;
writeln('zvysok je ',a);
readln;
end.
Podmienený cyklus s podmienkou ukončenia na konci
Syntax:
repeat
telo cyklu
until vyraz;
- najskôr sa vykoná telo cyklu (jeden príkaz alebo blok príkazov) a potom sa vyhodnotí pravdivosť logického výrazu (podmienky)
- ak je výraz nepravdivý, pokračuje sa v cykle
- vykoná sa vždy aspoň raz
- opakovanie cyklu sa skončí, až bude splnená podmienka za until
REPEAT
príkaz;
..
UNTIL (podmienka);
A tento cyklus v praxi:
program zvysok2;
var a,b:integer;
begin
readln(a,b);
if a<b
then writeln('zvysok je ',a)
else
begin
repeat
a:=a-b until a<b;
writeln('zvykok je ',a);
end;
end.
Príklady:
Rozcvička - vypíš čísla od 11 do 20 cez:
- cyklus for to
- cyklus downto
- cyklus while
- cyklus repeat - until
- Napíšte program, ktorý načíta od používateľa meno jeho obľúbeného herca alebo herečky a na obrazovku 20 – krát vypíše PACI SA MI meno osoby.
- Napíšte program, ktorému používateľ zadá, koľko rožkov je schopný zjesť na posedenie. Program bude postupne vypisovať: „Jem 1. rozok, jem 2. rozok, ..., jem x. rozok.“ a nakoniec „Uz mam dost“.
- Vypíšte za sebou čísla od 100 po 1 oddelené medzerami.
- Napíšte program, ktorý pomocou cyklu vypíše malú abecedu.
- Napíšte program, ktorý na vstupe dostane číslo od 2 po 10 a vypíše jedennásobok, dvojnásobok, ..., desaťnásobok zadaného čísla.
- Napíšte program, ktorý vypíše do riadku čislo, jeho druhú a tretiu mocninu od 1 po 20 (od hodnoty a po hodnotu b, ktoré zadá užívateľ)
- Napíšte program na zistenie počtu všetkých nepárnych čísel z daných n čísel
- Napíšte program, ktorý nakreslí tabuľku malej násobilky.
- Zostavte program, ktorý načíta celé číslo a vypočíta jeho ciferný súčet
- Zostavte program, ktorý bude načítavať prirodzené čísla dovtedy, kým nezadáme nulu a vypíše ich aritmetický priemer
- Napíšte program, ktorý načíta číslo N a zistí, či je to prvočíslo alebo zložené číslo
- Napíšte program, ktorý bude načítavať reálne čísla dovtedy, kým nezadáme nulu a vypíše najmenšie z nich
- Napíšte program, ktorý načíta 2 čísla a vypíše ich najväčšieho spoločného deliteľa (použite Newtonov algoritmus - odčítavanie menšieho od väčšieho dovtedy, kým nebudú rovnaké)
- Napíšte program,, ktorý načíta celé číslo a vypíše ho v dvojkovej sústave (štvorkovej, osmičkovej, šestnásťkovej)
- Napíšte program, ktroý načíta číslo v dvojkovej (štvorkovej, osmičkovej, šestnásťkovej) sústave a prevedie ho do desiatkovej sústavy
- Syn dostával od otca vlani pevné vreckové N Sk každý týždeň. Od januára mu otec zvyšuje vreckové každý týždeň o 5 korún. Napíšte program, ktorý vypočíta, koľko otec vyplatí synovi na vreckovom za 1 rok.
- Človek oslobodil džina z fľaše. Džin mu ponúkol dve možnosti odmeny. Napíšte program, ktorý zistí, ktorá možnosť je pre človeka výhodnejšia.:
- na "n" políčok položí po 2000 zlatiek a daruje ich človeku (ak n=5, potom odmena=10 000);
- na prvé políčko položí 1 zlatku a na každé ďalšie 2 – krát viac zlatiek a tiež mu ich daruje (ak n=5, potom odmena=31).
- Trezor má 8 – ciferný kód zložený z čísel 0..9, vytočenie jednej kombinácie trvá 15 s. Bude zlodejom stačiť na otvorenie trezoru 1,5 hodiny?
- Upravte program tak, aby zlodeji mohli zvoliť počet cifier kódu.
- Otestujte, pre koľkomiestny kód už počítač nedokáže zrátať zadanú úlohu
- Spravte tabuľku pre jednotlivé kódy – koľko času zlodeji potrebujú, ak musia rozlúštiť N-ciferný kód. Upravte program tak, aby čas na vytočenie jednej kombinácie mohol byť aj napr. 0,1 sekundy.
- Prvý hráč zvolí číslo od 2 po 9. Postupne každý z hráčov hovorí čísla počnúc 1 až po 100. Ak číslo, ktoré má hráč povedať, obsahuje zvolené číslo, alebo je ním deliteľné, alebo sa jeho ciferný súčet rovná zvolenému číslu, povie len: „bum“. Vyhráva ten, kto sa bez chyby dostane vo vymenovávaní čísel najďalej.
Napíšte program, ktorý načíta prirodzené číslo z intervalu <1,9> a pre vedúceho hry vytvorí tabuľku, v ktorej budú vypísané všetky čísla z intervalu <1;99>, ktoré nespĺňajú ani jednu podmienku. Ak dané číslo spĺňa aspoň jednu z podmienok, program namiesto čísla vypíše „bum“.
- Nakreslite na obrazovku šachovnicu aj s popisom políčok.
- Naprogramujte hru kameň, papier, nožnice. Používateľ zvolí počet hier. Počítač hrá za oboch hráčov t. j. náhodne generuje, či hráč ukázal kameň, papier alebo nožnice. Nožnice vyhrávajú nad papierom, papier nad kameňom a kameň nad nožnicami. Vypíše sa každá hra a kto celkovo zvíťazil.
- V krasokorčuľovaní sa známkuje tak, že sa vynechá najlepšia a najhoršia známka a zo zvyšku známok sa urobí aritmetický priemer. Zostavte program na výpočet výslednej známky z postupnosti jednotlivých známok ukončených nulou.
- Spravte si v triede IQ test a vytvorte program, ktorý vyhodnotí priemerné IQ a vypíše, koľko žiakov má IQ z intervalu 90..100, 101..110, 111..120, nad 120
- Chystáte sa na výlet. Viete nosnosť batohu a postupne doň ukladáte veci, o každej z nich viete hmotnosť. Zistite, koľko vecí sa vám zmestí do batoha. Napíšte program, ktorý od používateľa načíta nosnosť batoha a postupnosť hmotností ukončenú 0. Program skončí po načítaní všetkých hodnôt alebo ak už je prekročená nosnosť batoha. Nakoniec vypíše, koľko vecí si so sebou beriete.
- Naprogramujte hru hádaj číslo. Počítač si vymyslí celé číslo z intervalu 1..100. Hráč zadá číslo, počítač mu vždy poradí, či je hádané číslo menšie alebo väčšie ako zadané. Hra končí uhádnutím čísla. Doplňte program tak, aby vypísal počet pokusov, ktoré hráč potreboval.