- 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
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
|