Урок 9. Повторение команд

Тема: Язык программирования Logo

Как правильно повторять команды

Допустим, у нас есть вот такой программный код:

сброс
цвет_пера 23, 130, 95
толщина_пера 3
 
$отрезок = 120
$угол = 90
 
иди 260,260
 
вперёд $отрезок
налево $угол
вперёд $отрезок
налево $угол
вперёд $отрезок
налево $угол
вперёд $отрезок
налево $угол
 
иди 200,200

Что получится в результате выполнения этого кода?

  1. Сначала будут установлены цвет и толщина пера.
  2. Далее мы записываем в компьютерную память два числа (120 и 90), связав их с переменными $отрезок и $угол.
  3. Черепаха перемещается в точку с координатами 260, 260 (это чуть ниже и правее середины холста).
  4. После этого четыре раза повторяется пара команд вперёд и налево (проверьте это, посчитав команды). Этим командам передаются переменные $отрезок и $угол соответственно. Во время выполнения кода на их место будут подставляться числа 120 и 90 из памяти. Каждая пара команд рисует линию и поворачивает черепаху на 90 градусов. Поскольку таких пар четыре, то в итоге получается ни что иное как квадрат.
  5. В конце черепаха перемещается в центр холста.

В представленном программном коде мы наблюдаем повторение группы команд (вперёд и налево). Но обязательно ли писать каждое повторение? А что если бы нам требовалось повторить какую-нибудь команду сто раз? Пришлось бы сто раз написать ее в программном коде? Это как минимум не эффективно.

В языке программирования Лого, как и в большинстве других языков, есть специальная конструкция, позволяющая повторять любые команды или группы команд, и при этом не писать их множество раз. Эта конструкция начинается с инструкции-команды повтори. После команды повтори записывается число, которое обозначает, сколько раз требуется повторить команду или группу команд. Потом открывается фигурная скобка. На следующих строках один раз пишутся команды, которые при выполнении будут повторяться. В конце ставится закрывающая фигурная скобка.

Вот как будет выглядеть код, приведенный выше, если использовать в нем конструкцию "повтори":

сброс
цвет_пера 23, 130, 95
толщина_пера 3
 
$отрезок = 120
$угол = 90
 
иди 260,260
 
повтори 4 {
	вперёд $отрезок
	налево $угол
}
 
иди 200,200

Результат будет таким же как в примере выше. Однако запись получилась короче. Кроме того, такой код более понятен. Например, программисту, который первый раз увидит код, не надо считать количество повторений команд вперёд и налево. Он увидит число 4 и сразу все поймет.

Что такое цикл

Конструкция "повтори" представляет собой ничто иное как цикл. Цикл можно представить себе как многократное повторение каких-либо действий. Т.е. когда одни и те же действия повторяются – это цикл. Например, нам дали задание перенести 6 мониторов из одного кабинета в другой. Мы все шесть раз проделаем почти одно и тоже. Поэтому наши действия будут цикличны. При этом мы один раз запомнили, что именно нам делать и сколько раз это делать, а не ждем очередной команды после каждого принесенного монитора. Почти также и в программировании. Мы записываем сколько раз повторять и что именно повторять. Нет надобности много раз писать одно и тоже.

Задание

1. Напишите программу на языке Logo, в результате выполнения которой на холсте появляется равносторонний восьмиугольник. Обязательно используйте цикл.
2. Спишите код сложной программы, приведенной ниже. Выполните его. Попробуйте объяснить, почему получилось именно так.

сброс
 
$х = 100
$у = 100
 
повтори 4 {
	иди $х,$у
	цвет_пера 23, 130, 95
	толщина_пера 3
	повтори 6 {
		вперёд 50
		налево 60
	}
	иди $х-5,$у-15
	цвет_пера 200, 200, 50
	толщина_пера 2
	повтори 12 {
		вперёд 20
		налево 30
	}
	$х = $х+90
	$у = $у+90
}
 
иди 400,400

пример использования цикла 'повтори'

3. Напишите программу, которая запрашивает у пользователя длину отрезка и угол, а затем по этим данным рисует на холсте равносторонний многоугольник.

Примерный ответ к заданию 3:

сброс
 
$отрезок = спроси "Введите длину отрезка"
$угол = спроси "Введите угол"
 
$количество = 360 / $угол
 
повтори $количество {
	вперёд $отрезок
	направо $угол
}