Ciele cvičeniaCvičenie bude zamerané na precvičovanie algoritmizácie pomocou Karla s použitím knižnice superkarel.h. V rámci cvičenia bude vysvetlená problematika rekurzie v programovaní. Pre dosiahnutie uvedených cieľov je nutné osvojiť si aj logické výrazy a logické operátory (AND, OR, NOT). |
Dôležité linky a odporúčaná literatúra[1] KPI-FEI-TUKE, Cvičenie č. 4 [2] Microsoft, Vytvorenie základného vývojového diagramu vo Visiu [3] Tutorialspoint, Logical Operators in C [4] KPI-FEI-TUKE, Prednáška č. 3 |
Úloha 1.1
(úlha prevzaná z [1])
Vytvorte program multiplier
, v ktorom bude Karol 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.
Svoj program skompilujete nasledovne:
gcc -Werror -Wall multiplier.c -lsuperkarel -lcurses -o Multiplier |
Kostra programu (aby sme urýchlili priebeh cvičenia):
// HLAVICKY #include <karel.h> #include <superkarel.h> // DEKLARACIE VLASTNYCH FUNKCII void new_line(); void turn_right(); void multiply(); void go_home(); // MAIN int main() { turn_on("multiplier.kw"); // TU BUDE HLAVNY CYKLUS turn_off(); return 0; } // TU BUDU DEFINICIE FUNKCII |
Začiatočná situácia
Koncová situácia
Na minulom cvičení sme preberali podstatu algoritmizácie. Na tomto cvičení by ste si tieto poznatky mali prehĺbiť a navyše doplniť o problematiku rekurzie.
Najprv si musíme zodpovedať niektoré otázky a až tak môžeme pristúpiť k programovaniu:
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:
Vývojový diagram bude pozostávať z troch čiastkových diagramov.
Hlavný program
Funkcia návratu na začiatok sveta go_home()
Funkcia zdvojnásobenia značiek multiply()
Funkcia posunu o riadok vyššie new_line()