1. Cyklus v algoritmoch (v programovacom jazyku Logo alebo Pascal)

• Prečo a v akých situáciách používame konštrukciu cyklu? Uveďte motivačné príklady, ktoré vedú k použitiu cyklov.

• Uveďte a na príkladoch vysvetlite princípy fungovania dvoch rôznych typov cyklov.

• Ilustrujte použitie cyklu na konkrétnom algoritme a zdôvodnite vhodnosť jeho použitia.

Príkaz cyklu je zložený riadiaci príkaz. Používame ho vtedy, keď potrebujeme, aby sa určitý príkaz alebo príkazy vykonal/vykonali viackrát. Príkaz/príkazy, ktoré sa v cykle opakujú nazývame telo cyklu.

Príkazy cyklu sú

a)      nepodmienený cyklus – cyklus s pevným počtom opakovaní  – používame vtedy, ak vieme koľkokrát máme telo cyklu vykonať –  príkaz for (v Logu opakuj)

b)   podmienený cyklus – používame vtedy, ak nevieme dopredu koľkokrát treba vykonať telo cyklu

  • s podmienkou ukončenia na začiatku –  príkaz while (v Logu kým)
  • s podmienkou ukončenia na konci –  príkaz repeat – until

Pri kontrole správnosti príkazu cyklu je dôležité niekedy vytvárať trasovacie tabuľky.

Nepodmienený cyklus – cyklus s pevným počtom opakovaní

Zápis v Logu:        opakuj   počet opakovaní   [ príkazy  ]

Fungovanie:  Korytnačka bude príkazy v hranatej zátvorke opakovať toľkokrát, koľko sme jej zadali počet opakovaní. Príkazy v hranatej zátvorke sú oddelené medzerami. Je zbytočné používať príkaz opakuj, ak počet opakovaní je 1.

Príklad:   nakreslenie štvorca so stranou 50                         nakreslenie kružnice

opakuj   4   [ do 50 vp 90  ]                                       opakuj  360   [ do 1 vp 1  ]

 Zápis v Pascale:   for    premenná   :=   dolná_hranica   to  horná_hranica   do    telo cyklu ;

Fungovanie: 

Riadiaca premenná je počítadlo cyklu, je vždy typu Integer a nesmieme ju zabudnúť zadeklarovať. Dolná a horná hranica cyklu sú dve celočíselné hodnoty definujúce interval hodnôt, pre ktorý sa bude postupne (pre každú hodnotu z tohto intervalu) vykonávať zadaný príkaz. Telo cyklu je jeden príkaz alebo blok príkazov.

Na začiatku sa do počítadla priradí hodnota dolnej hranice. Ak je hodnota dolnej hranice menšia ako horná hranica cyklu, vykoná sa telo cyklu. Potom sa zväčší sa hodnota riadiacej premennej o 1 a telo cyklu sa zopakuje. Toto sa opakuje, až kým počítadlo nepresiahne hornú hranicu cyklu. Vtedy sa cyklus zastaví a pokračuje sa v príkazoch nasledujúcich za cyklom. Minimálny počet opakovaní cyklu je 0.

Príklad: 30-krát vypíše text „Abc“ žltej farby na náhodnej pozícii

var

I: Integer;

begin

Image1.Canvas.Font.Height := 32;

Image1.Canvas.Brush.Color := clYellow;

for I := 1 to 30 do

Image1.Canvas.TextOut(Random(300), Random(200), ‘Abc’);

end;

Špeciálnym prípadom for cyklu je prevrátený cyklus, ktorý má tvar:

for    premenná   :=   horná_hranica   downto  dolná_hranica   do    telo cyklu ; 

Fungovanie:  Na začiatku sa do riadiacej premennej priradí hodnota hornej hranice cyklu a testuje sa podmienka cyklu, teda či riadiaca premenná je väčšia ako dolná hranica. Ak je tento výraz pravdivý, vykoná sa telo cyklu, hodnota premennej sa zmenší o 1 a opäť sa testuje podmienka cyklu. Ak je výsledok opäť pravdivý, pokračuje sa v cykle, ak nie je, pokračuje sa za telom cyklu. Teda počítadlo sa nebude o 1 zväčšovať, ale o 1 zmenšovať. Minimálny počet opakovaní cyklu je 0.

 Príklad: Program na vykresľovanie farebných tečíkov

procedure TForm1.Button1Click(Sender: TObject);

var

I, X, Y, R: Integer;

begin

X := Random(250) + 50;                  //náhodná pozícia posunutá o polomer terčov

Y := Random(150) + 50;

for I := 10 downto 1 do

begin

R := 5 * I;                  //veľkosť polomerov

Image1.Canvas.Brush.Color := Random(256 * 256 * 256);

Image1.Canvas.Ellipse(X – R, Y – R, X + R, Y + R);

end;

end;

 

Podmienený cyklus s podmienkou ukončenia na začiatku

Zápis v Logu:            kým [ podmienka] [ príkazy ]

 Fungovanie:             Príkazy v druhej hranatej zátvorke sa budú opakovať dovtedy, kým je splnená podmienka. Podmienka aj príkazy musia byť v hranatej zátvorke.

Príklad:          Program na kontrolu hesla

viem heslo

píš [ Zadaj heslo: ]

urob “vstup čítajSlovo

kým [ :vstup <> “orangutan ]

                  [píš [ Nesprávne heslo. Zadaj heslo: ] urob “vstup čítajSlovo]

píš [ Vitaj. ]

koniec 

Zápis v Pascale:                    while   výraz   do    telo cyklu  ;

 Fungovanie:  Najprv sa vyhodnotí pravdivosť logického výrazu. Ak je tento výraz pravdivý, vykoná sa telo cyklu (jeden príkaz alebo blok príkazov), a opäť sa testuje jeho pravdivosť. Ak je opäť výsledok pravdivý, pokračuje sa v cykle, ak nie je, pokračuje sa za telom cyklu. Telo cyklu, ak obsahuje viacej príkazov, musí byť uzavreté v štruktúre begin – end. Minimálny počet opakovaní cyklu je 0.

Príklad:

Program na výpočet faktoriálu ľubovoľného prirodzeného čísla n.

Napr.     5! = 5*4*3*2*1

 

var

       faktorial, n :integer;                                            //zadeklarovanie premenných

begin

     write(‘Zadaj prirodzene cislo: ‘);                         

     readln(n);                                                             // načítanie čísla

     writeln;

      write(n,’! = ‘);

     faktorial:=n*(n-1);                                               //vynásobenie prvých 2 čísel a vloženie

     n:=n-2;                                                                 //zmenšenie čísla o 2 čísla

         while n>1 do                                                    //podmienka

                   begin

                         faktorial:=faktorial*n;                      //príkazy cyklu

                         n:=n-1;

                    end;

   writeln(faktorial);

   readln;

end.

Podmienený cyklus s podmienkou ukončenia na konci

 Zápis v Pascale:                   repeat    telo cyklu  until   výraz   ;

Fungovanie:  Najprv sa vykoná telo cyklu (jeden príkaz alebo blok príkazov) a potom sa vyhodnotí pravdivosť logického výrazu. Ak je tento výraz nepravdivý, pokračuje sa v cykle, ak je pravdivý, pokračuje sa za telom cyklu. Minimálny počet opakovaní cyklu je 1.

Vždy môžeme nahradiť cyklus while cyklom repeat-until a naopak. Záleží len od nás, čo nám viacej vyhovuje a ktorý z týchto cyklov nám umožní kratší zápis riešenia úlohy. Musíme si však uvedomiť zásadné rozdiely medzi nimi: Cyklus while sa ukončí, ak podmienka cyklu nie je pravdivá (kým platí, POKRAČUJEME) a viacej príkazov tela cyklu musíme uzavrieť do bloku (begin-end). Cyklus repeat-until sa ukončí, ak je podmienka cyklu pravdivá.

Metodické listy na vyučovanie cyklov

 

Didaktika programovania pre ZŠ 2     str. 22 – 23

Didaktika programovania pre SŠ       str. 10 – 11

Reklamy

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s