Príkaz slučky (resp. cyklu) WHILE resp. DO-WHILE je jedným zo základných stavebných blokov každého programu.
Slučka programu vytvorená príkazom while sa vykonáva dovtedy dokiaľ je podmienka v jeho argumente pravdivá. Ak sa počas vykonávania slučky dôjde k zmene, ktorá vedie k tomu, že podmienka bude nepravdivá, po ukončení slučky program pokračuje v ďalších riadkoch kódu za telom príkazu while.
Telo podmienky while sa nemusí vykonať ani raz ak pri prvom vyhodnotení podmienky je táto nepravdivá!
// Robot Karol ide vpred dovtedy, pokiaľ je pred ním voľná cesta while( front_is_clear() ) { step(); } |
Vývojový diagram príkazu slučky while
Slučka programu vytvorená príkazom do-while sa vykonáva dovtedy dokiaľ je podmienka v jeho argumente pravdivá. Ak sa počas vykonávania slučky dôjde k zmene, ktorá vedie k tomu, že podmienka bude nepravdivá, po ukončení slučky program pokračuje v ďalších riadkoch kódu za telom príkazu while.
Telo podmienky do-while sa vykoná minimálne jeden krát a až potom sa vyhodnocuje podmienka.
// Robot Karol ide vpred dovtedy, pokiaľ je pred ním voľná cesta do { step(); } while( front_is_clear() ); |
Vývojový diagram príkazu slučky do-while
Ak hovoríme o príkazoch slučiek je nutné uviesť, že slučku je možné ukončiť aj skôr ako dôjde k opätovnému vyhodnocovaniu podmienky. Ak počas vykonávania slučky dôjde k zmene podmienok a ďalšia časť kódu v tele slučky už nemá byť vykonaná, je možné slučku prerušiť príkazom break. Tento príkaz sa z pravidla dáva do tela príkazu vetvenia if.
// Robot Karol ide vpred dovtedy, pokiaľ je pred ním voľná cesta alebo je na mieste označenom značkou while( front_is_clear() ) { if( beepers_present() ) // break sa vykoná iba ak Karel stojí na značke { break; } step(); } |
Vývojový diagram príkazu slučky do-while
Ak počas vykonávania slučky dôjde k zmene podmienok a ďalšia časť kódu v tele slučky už nemá byť vykonaná, je možné vrátiť sa na začiatok slučky s príkazom continue. Tento príkaz sa z pravidla dáva do tela príkazu vetvenia if.
// Dokiaľ je voľná cesta, Karol ide vpred a zozbiera všetky značky while( front_is_clear() ) { if( beepers_present() ) { pick_beeper() continue; } step(); } |