Комбиниране на цикли¶
Видяхме, че в тялото на един оператор можем да поставим няколко различни оператора. Подобно на оператора for, в оператора while също можем (в допълнение към други команди) да поставим нов оператор на цикъл и той може да бъде или време, или цикъл. По този начин можем да изградим различни комбинации от вмъкнати цикли.
Когато двата цикъла са вкарани един в друг, ние ги наричаме двоен цикъл, докато три вложени цикли се наричат троен цикъл. По подобен начин можем да вмъкнем произволен брой цикли един в друг, просто рядко се нуждаем от голям брой вмъкнати цикли.
В този урок ще практикуваме писане на комбинации от вмъкнати for и while.
Различни двойни и множество цикли - задачи¶
Вземете 4 топки на всяко поле до края на реда¶
Пред Карел има едно или повече полета, като на всяко от тези полета има четири топки (без началното поле). Карел трябва да ги вземе всички.
Сега, докато стигне до стената, Карел трябва да повтори стъпването си напред и да вземе 4 топки. Опитайте да допълните програмата.
Спомнете си, както в по-ранните примери за вмъкване на цикли, операторът в тялото на вътрешния цикъл (тук това ще бъде командата pick_ball ()) трябва да бъде по-нататък с отстъпи.
(Karel_while__many_squares_four_bals_per_square)
Вземете всички топчета¶
Има поне едно поле пред Карел и може да има произволен брой от тях. На всеки от полетата пред Карел има нула или повече топки (началният квадрат е празен). Карел трябва да вземе всички топки.
Тази задача е обобщаването на предишната, така че програмата, която решава тази задача, може да се използва и в предишната. Разликата е, че сега вътрешният цикъл трябва да бъде с оператор while, докато в предишната задача би могъл да бъде и с оператор for.
Отново командата pick_ball () трябва да бъде вкарано по-навътре. По този начин, той ще се повтори, докато състоянието на вътрешния while стане вярно, тоест докато има топка на полето, на което се намира Карел в този момент. Вземането на всички топки, заедно с инструкцията за движение се повтаря във външния while цикъл, стига да има полета пред Карел. Общият ефект от вмъкването на цикли е, че всичките топки от всеките полета ще бъдат взети.
(Karel_while__many_squares_many_balls)
Донесете всички топчета¶
Пред Карел има пътека с неизвестна дължина. Карел трябва да събере всички топки от всички полета и дасе върне в началото.
Програмата е разбита на по-малки парчета от коментарите. Добавете липсващите оператори.
(Karel_while__bring_all_balls)
Горе и долу¶
Карел е на правоъгълна дъска с неизвестен размер (броят на колоните винаги е нечетен), без топки по полетата. Целта е Карел да достигне долния десен ъгъл. За да постигне това, Карел ще трябва да се движи през колоните последователно нагоре и надолу.
Лабиринтът би могъл да изглежда ето така:
(Karel_while__up_col_down_col)