Keď píšeme román, alebo list tak slová spájame do viet. Pri písaní programu pre robota Karla spájame príkazy do funkcií.
(skoro) každý príkaz musí patriť do funkcie. Pomocou funkcie vieme robotovi vysvetliť určitú činnosť.
// Typ návratovej hodnoty, názov funkcie a zoznam argumentov (prázdny)
int main(){
// Tu napíšeme kód
return 0; // Návratová hodnota bud v tomto prípade 0
}
[note] Alebo graficky:
[/note]
{ a končí }return na vrátenie návratovej hodnoty daného typuNaučme robota tancovať
void tancuj(){
step();
turn_left();
turn_left();
turn_left();
step();
turn_left();
}
[note] https://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration [/note]
To isté vieme zapísať ako
[note] V jazyku C môžeme použiť ľubovoľné množstvo deklarácií, ale iba jedinú definíciu. [/note]
void tancuj(); // Deklarácia
void tancuj(){ // Definícia
step();
turn_left();
turn_left();
turn_left();
step();
turn_left();
}
Celý program
#include <karel.h> // Hlavičkový súbor
void tancuj(); // Deklarácia
int main(){
return 0;
}
void tancuj(){ // Definícia
step();
turn_left();
turn_left();
turn_left();
step();
turn_left();
}
Definícia vs. volanie funkcie
#include <karel.h> // Najprv načítame zoznam slov, ktoré budeme použivať
void tancuj(); // Oznámime, že budeme používať nové slovo - zatiaľ nevieme, čo znamená.
int main(){ // Tu definujeme počiatočný bod programu
tancuj(); // Volanie funkcie
return 0;
}
void tancuj(){ // Definícia
step();
turn_left();
turn_left();
turn_left();
step();
turn_left();
}
Robot Karel je schopný vnímať okolitý svet pomocou svojich senzorov. Senzory sú síce "mierne" obmedzené, ale fungujú veľmi spoľahlivo.
int front_is_clear() // Tlačítko vpredu
int beepers_present() // Kamera
int facing_north() // Kompas
int beepers_in_bag() // iBatoh
int je celé číslo0 je nepravdivá hodnotanám povie v akom stave sú senzory
(aktívne alebo neaktívne)
Zápis ktorý môže byť vyhodnotený na určitú hodnotu
1beepers_present()2 + 2if (vyraz == 0){
podmienka_nie_je_pravdiva();
}
else{
podmienka_je_pravdiva();
}
Zober žetón iba ak tam je
if (beeper_is_present()){
pick_beeper();
}
Choď dopredu ak sa dá
if (front_is_clear())){
step();
}
Vylož žetón ak máš, inak choď rovno.
if (beepers_in_bag()){
put_beeper();
}
else{
step();
}
[note]
[/note]
Skoro to isté ako if
Choď dopredu pokiaľ sa dá
while(front_is_clear()){
step();
}
[note]
Podmienku je možné vyhodnotiť aj na konci bloku príkazov:
do {
teloCyklu();
}
while (podmienka);
Tento druh cyklu prebehne vždy minimálne raz;
[/note]
Vieme vymyslieť a porozprávať aj zložitejší príbeh s názvom Zadanie.
Funkcie, podmienky a cykly nm umožňujú stručnejší a prehľadnejší zápis kódu.
Zlaté programátorské pravidlo hovorí, že je potrebné využívať abstrakciu vždy keď to má zmysel.
Vytvor si vlastnú funkciu
turn_right()find_wall()drop_beepers()turn_north()