<< home >>
Didaktické využitie mini-jazyka Robot Karel na ZŠ
<<- ->>


  • Formy prístupu k vyšším programovacím jazykom

FORMY PRÍSTUPU K VYŠŠÍM PROGRAMOVACÍM JAZYKOM

Sekcia učiteľskej www stránky sa nesie v duchu prepojenia programovacieho mini-jazyka Robot Karel s pascalovskými štruktúrami. Tvoria neoddeliteľný celok. Počínajúc postupnosťou jednoduchých príkazov, cez cyklus a podmienku až po premenné a polia sú aj príkazy Robota Karla vlastne pascalovské štruktúry, len s inou syntaxou.

Jednoduché a riadiace príkazy

Pri zápise algoritmu používame nielen jednoduché príkazy (krok, polož). Často si pomáhame aj zložitejšími riadiacimi príkazmi (podmienky, cykly). Tieto konštrukcie určujú ako sa majú jednotlivé príkazy algoritmu vykonávať. Riadiace príkazy používame, keď chceme príkaz alebo blok príkazov v algoritme opakovať, alebo keď ich vykonanie chceme podmieniť pravdivosťou podmienky. V zápise algoritmu určeného pre počítač nie sú nepresnosti a nejednoznačnosti prípustné, napr. v prípade, že dva susedné lexikálne elementy sú rezervované slovo či identifikátor či návestie alebo číslo, musia byť oddelené aspoň jedným separátorom, ktorý samozrejme nesmie byť časťou lexikálneho elementu.  

Vývojový diagram - možný zápis algoritmu programu

 

vyvojak

 

 

Pascal


V jazyku Pascal musíme na začiatku programu vymenovať aké premenné v programe používame (deklarácia premenných). Deklaračnú časť si môžeme predstaviť ako titulky k filmu, kde sa uvádzajú mená hercov (premenné), ktorí hrajú v hlavnom deji (programe medzi slovami BEGIN a END). Komentáre sú uzatvorené do zložených zátvoriek. Žiak po odladení syntaktických chýb začína hľadať logické chyby. Hľadanie logických chýb uľahčuje krokovanie programu. Je to postupné spúšťanie príkazov v programe. Výhodou krokovania je, že žiak môže priebežne prezerať obsahy jednotlivých premenných a podľa nich zistiť pokiaľ je beh programu v poriadku a kde asi nastala chyba.

Program scit
Program scit je napísaný v jazyku Pascal, jeho úlohou je sčítanie niekoľkých celých čísel. Aspoň tak sa javí úloha programu scit. V skutočnosti je prvoradou úlohou programu scit ukázať rôzne programové štruktúry, rôzne algoritmy, použitie podmienok, podmienených cyklov, cyklov s presným počtom opakovaní, binárneho a viacnásobného vetvenia, poľa a i. v riešení tej istej úlohy, zadania, problému. Ak sa vyučujúcemu podarí naučiť čo i len jedného žiaka tieto štruktúry, tak môže byť spokojný. To však neznamená, že ostatní žiaci nemusia vedieť nič. Príklady rôznych štruktúr programu scit (scit_1 až scit_7) sú uvedené ďalej v tejto časti sekcie.

Všeobecný opis programu scit

Funkcia programu: 
Matematický súčet niekoľkých celých čísel. Počet čísel vstupujúcich do súčtu a ich číselné hodnoty zadáva používateľ z klávesnice. Výsledný súčet sa zobrazí na monitore.

Vstupné parametre: 
· počet sčítancov vstupujúcich do súčtu
· číselné hodnoty jednotlivých sčítancov

Výstupný parameter:
· súčet vstupných sčítancov

Obmedzenia:
· číselné hodnoty jednotlivých sčítancov a ich súčet musia byť v rozsahu od -32768 do 32767 (16 bitový formát, typ Integer)
· v priebehu algoritmizácií niektorých možných riešení vyvstane z praktického hľadiska (zápis príkazov) ešte ďalšie obmedzenie, a síce obmedzenie počtu sčítancov (scit_1, scit_2)

Predpoklad:
· používateľ zadáva korektné vstupné parametre 
V praktickom živote (a programovaní) žiadny predpoklad, čo sa týka chovania používateľa, neexistuje. V rámci príkladu si ale takýto luxus môžeme dovoliť, následné riešenia sú čisté, nezašumené.

Bonus:
· číselné hodnoty jednotlivých vstupných sčítancov sa uchovajú aj po ukončení programu (scit_6, scit_7)

Program možno zjednodušene rozdeliť na tri časti. Prvá časť (hlavička) začína vyhradeným slovom begin, za ktorým je názov, meno programu. V druhej časti (deklarácie a definície) sú deklarované použité premenné, ktorých identifikátory (mená) sa zapisujú oddelené čiarkou za vyhradené slovo var. Za posledným identifikátorom nasleduje dvojbodka a označenie údajového typu (vlastnosť údajového objektu špecifikujúca množinu hodnôt, ktoré môže objekt nadobudnúť). Integer označuje jednoduchý ordinálny typ s celočíselnou množinou hodnôt v rozsahu od - 32768 do 32767. V časti deklarácií a definícií sa slovo var uvádza len raz. Tretiu časť programu (príkazová časť) tvorí blok príkazov začínajúc vyhradeným slovom begin a končiac slovom end s bodkou. Blok príkazov je logická postupnosť jednak jednoduchých príkazov (príkazy priradenia premenná := výraz, vstupu read (parameter), readln (parameter) a výstupu write (parameter), writeln (parameter)) a jednak štruktúrovaných príkazov (podmienené príkazy binárneho a viacnásobného vetvenia algoritmu, či príkazy cyklu).

Pozrime sa teraz bližšie na jednotlivé riešenia úlohy typu scit. V jednotlivých deklaráciách premenných sú použité nasledovné identifikátory:

c_1, c_2, ..., c_5 číselné hodnoty piatich sčítancov (vstupné parametre)

pocet počet všetkých sčítancov (vstupný parameter)

sucet súčet všetkých sčítancov (výstupný parameter)

i pomocná premenná cyklu, určuje poradie sčítanca

cislo pomocná premenná pre dočasné uloženie číselnej hodnoty sčítanca 

cislo[i] jednorozmerné pole pre trvalé uloženie číselných hodnôt všetkých sčítancov, jednotlivé prvky poľa tvoria vstupný parameter, i určuje poradie sčítanca (vo všeobecnosti pozor na prvý prvok poľa cislo[0], ktorý nemá definovanú hodnotu, v prípade úlohy scit je irelevantný)



program scit_1;

var c_1, c_2, c_3, c_4, c_5 : integer;
pocet, sucet : integer;

begin
write ('Kolko cisel chces scitat? (1-5)'); readln (pocet);

if pocet = 1 then readln (c_1);
if pocet = 2 then readln (c_1, c_2);
if pocet = 3 then readln (c_1, c_2, c_3);
if pocet = 4 then readln (c_1, c_2, c_3, c_4);
if pocet = 5 then readln (c_1, c_2, c_3, c_4, c_5);

sucet := c_1+c_2+c_3+c_4+c_5;

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované pomocou podmieneného príkazu binárneho vetvenia algoritmu. 
Výhody: Postačuje, aby žiak ovládal jednoduchú konštrukciu if - then 
Nevýhody: Pre väčší počet sčítancov úmorný zápis príkazov a veľké množstvo premenných.



program scit_2;

var c_1, c_2, c_3, c_4, c_5 : integer;
pocet, sucet : integer;

begin
write ('Kolko cisel chces scitat? (1-5)'); readln (pocet);

case pocet of
  1 : readln (c_1);
  2 : readln (c_1, c_2);
  3 : readln (c_1, c_2, c_3);
  4 : readln (c_1, c_2, c_3, c_4);
  5 : readln (c_1, c_2, c_3, c_4, c_5);
end;

sucet := c_1+c_2+c_3+c_4+c_5;

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované pomocou podmieneného príkazu viacnásobného vetvenia algoritmu. 
Výhody: Menej úmorný zápis (ako scit_1), pre žiaka nová konštrukcia 
Nevýhody: Ako scit_1.



program scit_3;

var pocet : integer;
sucet : integer;
i : integer;
cislo : integer;

begin
write ('Kolko cisel budeme scitovat? (1-99) '); readln (pocet);

for i := 1 to pocet do begin
  write ('Zadaj ',i,'. cislo ');
  readln (cislo);
  sucet := sucet+cislo;
end;

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované pomocou cyklu s presným počtom opakovaní. Využíva premennú cislo na dočasné uloženie číselnej hodnoty aktuálneho sčítanca. Ak predchádzajúce dve riešenia najprv načítali vstupné údaje a až potom s nimi začali matematicky operovať, scit_3 robí súčet priebežne popri zadávaní hodnôt sčítancov priamo v cykle. 
Výhody: Krátky a jasný zápis riešenia aj pre veľký počet sčítancov.
Nevýhody: Prakticky žiadne, ak nežiadam aj bonus.



program scit_4;

var pocet : integer;
sucet : integer;
i : integer;
cislo : integer;

begin
i := 1;
write ('Kolko cisel budeme scitovat? (1-99) '); readln (pocet);

repeat
  begin
    write ('Zadaj ',i,'. cislo ');
    readln (cislo);
    sucet := sucet+cislo;
    i := i+1;
  end;
until i = pocet+1;

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované pomocou podmieneného cyklu s podmienkou na konci, ak je podmienka splnená, cyklus skončí. Pre žiaka zaujímavá konštrukcia. Žiak môže napr. presunúť príkaz priradenia i := 1 z aktuálneho umiestnenia (r.7) pred príkaz vstupu write (r.11), zrušiť priradenie i := i+1 (r.14) a podmienku zapísať v tvare i = pocet (r.16).
Výhody: Žiak sa oboznámi s konštrukciou repeat - until 
Nevýhody: Značne komplikované riešenie, ak to pravda nie je zámer.



program scit_5;

var pocet : integer;
sucet : integer;
i : integer;
cislo : integer;

begin
i := 1;
write ('Kolko cisel budeme scitovat? (1-99) '); readln (pocet);

while NOT (i = pocet+1) do begin
  write ('Zadaj ',i,'. cislo ');
  readln (cislo);
  sucet := sucet+cislo;
  i := i+1;
end;

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované pomocou podmieneného cyklu s podmienkou na začiatku, ak podmienka prestane byť splnená, cyklus skončí. Využíva booleanovský operátor negácie. 
Výhody: Žiak sa oboznámi s konštrukciou while - do 
Nevýhody: Ako scit_4.



program scit_6;

var pocet : integer; 
sucet : integer;
i : integer;
cislo : array [1..99] of integer;

begin
write ('Kolko cisel budeme scitovat? (1-99) '); readln (pocet);

for i := 1 to pocet do begin
  write ('Zadaj ',i,'. cislo ');
  readln (cislo[i]);
  sucet := sucet+cislo[i];
end;

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované podobne ako scit_3 pomocou cyklu s presným počtom opakovaní, ale namiesto premennej cislo (na dočasné uloženie číselnej hodnoty aktuálneho sčítanca) využíva jednorozmerné pole cislo [] pre trvalé uloženie číselných hodnôt sčítancov. Súčet je vykonávaný priebežne popri zadávaní hodnôt sčítancov priamo v cykle.
Výhody: Žiak sa oboznámi s používaním údajového typu pole. 
Nevýhody: Žiadne, bonus je zabezpečený.



program scit_7;

var pocet : integer; 
sucet : integer;
i : integer;
cislo : array [1..99] of integer;

begin
write ('Kolko cisel budeme scitovat? (1-99) '); readln (pocet);

for i := 1 to pocet do begin
  write ('Zadaj ',i,'. cislo ');
  readln (cislo[i]);
end;

for i := 1 to pocet do sucet := sucet+cislo[i];

writeln;
writeln ('Sucet je ',sucet);
readln;
end.

Riešenie úlohy je realizované v dvoch fázach. Prvá je identická ako v prípade scit_6, ale bez priebežného vykonávania súčtu. V druhej fáze nasleduje opäť cyklus s presným počtom opakovaní, v priebehu ktorého sa vykoná súčet. Takéto riešenie najprv načíta vstupné údaje (do prvkov poľa) a až potom s nimi matematicky operuje. Z tohto hľadiska sa riešenie scit_7 približuje prvým dvom riešeniam (scit_1 a scit_2). Naviac všetky číselné hodnoty vstupných sčítancov sú uložené v poli (ako scit_6)
Výhody: Ako scit_6.
Nevýhody: Ako scit_6.


Tradičný dowňák
<<- ->>