Další informace

Kapitola 5: Pro smyčky


Jednou z věcí, na které jsou počítače obzvláště dobré, je opakování. Jak můžeme přesvědčit Karla, aby několikrát provedl blok kódu? Chcete-li vidět, jak opakování mohou být použity, za úkol umístit 42 kuzel ů:

Před:
Po:

Základní pro smyčku

Vzhledem k tomu, že víte, že na místě je přesně 42 kuzel s, je kontrolní příkaz, který potřebujete pro smyčku , který specifikuje, že chcete některou operaci zopakovat. Struktura příkazu for se jeví jako komplikovaná především proto, že je vlastně mnohem silnější než cokoliv, co Karel potřebuje. Jediná verze syntaxe, kterou Karel používá, je:

for(int i = 0; i < spočítat ; i++){
prohlášení, která se mají opakovat
}

Budeme procházet všechny podrobnosti o smyčky později ve třídě. Prozatím byste si měli přečíst tento řádek jako způsob vyjádření, "opakujte příkazy mezi složenými závorkamispočítat„Můžeme použít tento nový pro smyčku na místo 42 kuzel s nahrazenímspočítats 42 a zadáním příkazu putBeeper() uvnitř bloku pro kód smyčky. Voláme příkazy v bloku kódu tělo :

Výše uvedený kód je upravitelný. Snažte se to změnit tak, aby to bylo jen 15 kuzel s.

Odpovídající podmínky s podmínkami

Předchozí příklad vyvolává dojem, že smyčka for opakuje jeden řádek kódu. Tělo smyčky for (příkazy, které se opakují) však může být více řádků. Zde je příklad programu, který umístí kuzel do každého rohu světa:

Věnujte velkou pozornost způsobu, jakým program protéká těmito kontrolními příkazy. Program run s přes sadu příkazů v těle pro smyčku po jednom. Tělo se opakuje čtyřikrát.

Snad nejsložitější částí psaní smyčky je, že na konci smyčky potřebujete stav světa postcondition ) být platným stavem světa pro začátek smyčky předpoklad ). Ve výše uvedeném příkladu odpovídají předpoklady. Dobré časy. Na začátku smyčky je Karel vždy na náměstí s kuzel s obráceným k dalšímu prázdnému rohu. Co když jste odstranili odbočitVlevo na konci smyčky? Postcondition na konci první iterace by již nesplňoval předpoklady o tom, že Karel stojí před dalším prázdným rohem. Kód je upravitelný. Zkuste smazat turnLeft(); příkaz vidět, co se stane!

Vnořené smyčky

Těleso smyčky for může také obsahovat jakýkoliv kód řízení, dokonce i jiné smyčky. Zde je příklad smyčky for, která opakuje volání metody, která má také smyčku for. Říkáme tomu "vnořená" smyčka. Zkuste si přečíst program a pochopit, co dělá, před provádění :


Další kapitola