Мы уже убедились в том, что черепаха - умелый чертежник. Теперь заставим ее начертить башню (см. рис. 56). У квадратов, составляющих башню, разные размеры. Поэтому нам понадобятся четыре "квадратные" процедуры:
Рис. 56
ЭТО КВАДРАТ 1
ПОВТОРИ 4 [ВПЕРЕД 40 ВПРАВО 90]
КОНЕЦ
ЭТО КВАДРАТ2
ПОВТОРИ 4 [ВПЕРЕД 20 ВПРАВО 90]
КОНЕЦ
ЭТО КВАДРАТ3
ПОВТОРИ 4 [ВПЕРЕД 10 ВПРАВО 90]
КОНЕЦ
ЭТО КВАДРАТ4
ПОВТОРИ 4 [ВПЕРЕД 5 ВПРАВО 90]
КОНЕЦ
Ну и морока! Нельзя ли раз и навсегда объяснить черепахе, что такое квадрат? Подумаем, как должна выглядеть процедура КВАДРАТ, чтобы можно было легко менять длину стороны.
В командах ВПЕРЕД и НАЗАД, например, есть ввод, указывающий длину отрезка, который должна пройти черепаха.
Подобным образом, записав КВАДРАТ 40, мы потребуем от черепахи, чтобы она начертила квадрат с длиной стороны 40 шагов, а записав КВАДРАТ 20 - квадрат с длиной стороны 20 шагов.
Ясно, что в процедуру нужно ввести переменную (параметр), с помощью которой можно задавать длину стороны квадрата. Назовем эту переменную, например, СТОРОНА. Тогда универсальную процедуру КВАДРАТ можно описать так:
ЭТО КВАДРАТ :СТОРОНА
ПОВТОРИ 4 [ВПЕРЕД :СТОРОНА ВПРАВО 90]
КОНЕЦ
Если сейчас записать КВАДРАТ 40, переменная СТОРОНА получит значение 40 и черепаха начертит квадрат со стороной 40 шагов. Говорят еще, что процедура выполняется с вводом 40.
Теперь мы уже готовы начертить все необходимые квадраты при помощи только одной процедуры, для которой будем менять лишь ввод (значение параметра).
СПРЯЧЬ
КВАДРАТ 40
КВАДРАТ 20
КВАДРАТ 10
КВАДРАТ 5
Чтобы получилась башня, следует поставить квадраты один на другой. Для этой цели воспользуемся процедурой ПРЫЖОК.
ЭТО ПРЫЖОК :РАССТ
ВПЕРЕД :РАССТ
ВПРАВО 90
ВПЕРЕД :РАССТ/4
ВЛЕВО 90
КОНЕЦ
А теперь "построим" башню:
ЭТО БАШНЯ
КВАДРАТ 40
ПРЫЖОК 40
КВАДРАТ 20
ПРЫЖОК 20
КВАДРАТ 10
ПРЫЖОК 10
КВАДРАТ 5
ПРЫЖОК 5
КОНЕЦ
ПОНЯТНО, ЧТО ТАКОЕ БАШНЯ.
БАШНЯ
Мы получили то, что хотели, но есть основания для недовольства. В результате стольких повторений сама процедура БАШНЯ стала похожей на башню. Ее можно сократить:
ЭТО БАШНЯ
СДЕЛАЙ "S 40
ПОВТОРИ 4 [КВАДРАТ :S ПРЫЖОК :S СДЕЛАЙ "S :S/2]
КОНЕЦ
А если мы хотим строить башни разных размеров? Опять введем параметр:
ЭТО БАШНЯ :РАЗМЕР
СДЕЛАЙ "S :РАЗМЕР
ПОВТОРИ 4 [КВАДРАТ :S ПРЫЖОК :S СДЕЛАЙ "S :S/2]
КОНЕЦ
Вот несколько башен:
Наконец, можно построить и башню, похожую на Пизанскую:
ЭТО ПИЗА
ВПРАВО 10
БАШНЯ 30
КОНЕЦ
ПОНЯТНО, ЧТО ТАКОЕ ПИЗА.
ПИЗА
Упражнения
Начертите башню из 8 уменьшающихся квадратов.
Напишите программу, с помощью которой можно чертить башни, составленные из произвольного числа квадратов (см. упр. 1).
Начертите башню из кубиков.
Какие фигуры можно начертить с помощью процедуры:
ЭТО ФИГУРА8 :УГОЛ
ПОВТОРИ 8 [ВПЕРЕД 40 ВПРАВО :УГОЛ]
КОНЕЦ
Напишите процедуру, с помощью которой можно чертить правильные пятиугольники, шестиугольники и восьмиугольники с произвольной длиной стороны.
Для чего служит процедура
ЭТО ФИГУРА9 :РАЗМЕР :N
ПОВТОРИ :N [ВПЕРЕД :РАЗМЕР ВПРАВО 360/:N]
КОНЕЦ
Сравните фигуры, которые получаются а помощью процедуры ФИГУРА9 (см. упр. 6), с фигурами, получающимися с помощью процедуры:
ЭТО ФИГУРА10 :РАЗМЕР :N :L
ПОВТОРИ :N [ВПЕРЕД :РАЗМЕР ВПРАВО :L*360/:N]
КОНЕЦ
Определите, при каких значениях параметров N и L процедуры ФИГУРА10 из упр. 7 можно начертить на экране пятиконечные, восьмиконечные, двенадцати конечные и восемнадцати конечные звезды.