Ciele cvičeniaCvičenie bude zamerané na precvičovanie algoritmizácie pomocou Karla s použitím knižnice superkarol.h. V rámci cvičeniea bude vysvetlená problematika rekurzie v programovaní a tiež si ukážeme dôležitosť plánovania algortimu, ešte pred samotným písaním kódu, aj za použitia vývojových diagramov. Pre dosiahnutie uvedených cieľov je nutné osvojiť si aj logické výrazy (AND, OR, NOT).
|
Dôležité linky a odporúčaná literatúra[1] Cvičenie č. 4 na oficialnej stránke predmetu https://kurzy.kpi.fei.tuke.sk/zap/labs/04.html [2] Microsoft, Vytvorenie základného vývojového diagramu vo Visiu [3] |
Úloha 1.1
(úlha prevzaná z [1])
Vytvorte program multiplier
, v ktorom bude Karel prechádzať postupne celým svetom a zdvojnásobovať počet značiek, ktoré nájde. Samozrejme, bez použitia premenných. Nakoniec sa Karol vráti na pozíciu kde začal. Vaše riešenie otestujte na svete multiplier.kw.
Začiatočná situácia
Koncová situácia
Pri programovaní je dobrým zvykom najprv premyslieť čo, prečo a ako chcem spraviť. Mnoho programátorov začína písaním kódu. To však neznamená, že si nepremysleli svoj postup. Jednoducho sú skúsení. Predmet ZAP má študentom pomôcť naučiť sa myslieť algoritmicky. V nasledujúcom texte si na príklade uvedenom vyššie ukážeme ako by taká tvorba algoritmu mala prebiehať.
Túto otázku si programátor kladie ako prvú. Rovnako ju kladie aj svojím klientom, ktorí od neho chcú aby im vyvinul aplikáciu/program.
Pre náš príklad:
PREČO?
Táto otázka znie triviálne ale je potrebné si ju položiť minimálne jedného dôvodu - má zmysel daný problém riešiť? Dôvodov pre riešenie problému môže byť nespočetne veľa. Uvedieme len príklady niekoľkých.
Tu prichádza ku slovu ALGORITMIZÁCIA. Tu si musí programátor klásť ďalšie otázky tie môžu byť rôzneho charakteru ale určite by si mal položiť tieto:
Poďme na tieto otázky pre náš príklad odpovedať:
Ak máme zodpovedané tieto otázky mali by sme mať oveľa lepšiu predstavu ako chceme úlohu vyriešiť. Všimnime si, že stále nebol napísaný ani riadok kódu a pritom sme pri riešení úlohy výrazne pokročili.
Je nezmysel programovo implementovať všetko naraz. Z otázok zodpovedaných vľavo je jasné, že úlohu musíme riešiť postupne. Svoj postup môžeme zapísať v textovej podobe napríklad takto:
Samotný algoritmus môžeme vyjadriť v grafickej podobe vo forme vývojového diagramu. Tieto sú užitočné ale častokrát časovo veľmi náročné. Pre túto úlohu si ukážeme ako by taký "vývojak" mohol vyzerať ale pri riešení Vašich zadaní ho kresliť nebudete. Ak budete pracovať na zložitejších problémoch v rámci BC prác, tak je vhodné dokumentáciu doplniť vývojovým diagramom.
Vývojový diagram bude pozostávať z troch čiastkových diagramov. Diagram pre hlavný program, potom pre posun na ďalší riadok ( napr. new_line() ), návrat na štart ( napr. go_home() )a nakoniec pre zdvojnásobenie (napr. multiply() ).
Význam jednotlivých symbolov nájdete v literatúre [2].
Hlavný program
Funkcia návratu na štart go_home()
Funkcia zdvojnásobenia značiek multiply()
Funkcia posunu o riadok vyššie new_line()