Проследим снова движение черепахи по квадратной орбите. На этот раз, однако, будем использовать рекурсивную процедуру с параметром:
ЭТО ОРБИТА :РАЗМЕР
ВПЕРЕД :РАЗМЕР
ОРБИТА
КОНЕЦ
Посмотрим, что происходит при вводе 40:
ОРБИТА 40
Черепаха проходит 40 шагов вперед, поворачивает направо на 90° и... компьютер сообщает, что произошла авария:
ОРБИТА ТРЕБУЕТ БОЛЬШЕ ВВОДОВ -
В СТРОКЕ ОРБИТА
НА УРОВНЕ 1 ПРОЦЕДУРЫ ОРБИТА.
Разумеется! Если процедура имеет параметр, она требует, чтобы при каждом ее выполнении задавался ввод. А на четвертой строке процедуры ОРБИТА не хватает ввода.
Исправим ошибку:
ЭТО ОРБИТА :РАЗМЕР
ВПЕРЕД :РАЗМЕР
ВПРАВО 90
ОРБИТА :РАЗМЕР
КОНЕЦ
Мы уже легко можем менять размер орбиты. Если ввести параметр угла, легко менять также и ее вид.
ЭТО ОРБИТА 1 :РАЗМЕР :УГОЛ
ВПЕРЕД :РАЗМЕР
ВПРАВО :УГОЛ
ОРБИТА 1 :РАЗМЕР :УГОЛ
КОНЕЦ
ОРБИТА1 5 10
ОРБИТА1 20 40
ОРБИТА1 40 60
ОРБИТА1 60 80
ОРБИТА1 80 156
ОРБИТА1 70 160
ОРБИТА1 90 144
ОРБИТА1 80 100
Проведем эксперименты, заменив команду ВПЕРЕД процедурой вычерчивания какой-нибудь фигуры, например квадрата (перед этим, однако, необходимо напомнить компьютеру слово квадрат).
ЭТО ЭКСП1 :РАЗМЕР :УГОЛ
КВАДРАТ :РАЗМЕР
ВПРАВО :УГОЛ
ЭКСП1 :РАЗМЕР :УГОЛ
КОНЕЦ
ЭКСП1 40 144
ЭКСП1 50 20
Французы говорят: Аппетит приходит во время еды. Если вами овладел исследовательский дух, продолжим эксперименты. В очередном эксперименте изменим описание процедуры ОРБИТА1 так, чтобы значение параметра РАЗМЕР менялось при каждом ее выполнении. Новую процедуру назовем ЭКСП2:
ЭТО ЭКСП2 :РАЗМЕР :УГОЛ
ВПЕРЕД :РАЗМЕР В
ПРАВО :УГОЛ
ЭКСП2 :PA3MEP+3 :УГОЛ
КОНЕЦ
Посмотрим, каков будет эффект:
ЭКСП2 1 90
ЭКСП2 1 120
ЭКСП2 1 93
ЭКСП2 1 123
Не правда ли, красиво? А теперь будем менять угол:
ЭТО ЭКСП3 :РАЗМЕР :УГОЛ
ВПЕРЕД :РАЗМЕР
ВПРАВО :УГОЛ
ЭКСП3 :РАЗМЕР :УГОЛ+5
КОНЕЦ
Экспериментируем снова:
ЭКСПЗ 3 2
ЭКСПЗ 10 5
ЭКСПЗ 10 1
Теперь в процедуре ЭКСП2 заменим команду ВПЕРЕД процедурой КВАДРАТ:
ЭТО ЭКСП4 :РАЗМЕР :УГОЛ
КВАДРАТ :РАЗМЕР
ВПРАВО :УГОЛ
ЭКСП4 :PA3MEP+3 :УГОЛ
КОНЕЦ
Выполним процедуру с вводами 10, 10:
ЭКСП4 10 10
А если ввести параметр и для изменения? По-видимому, экспериментам с рекурсивными процедурами конца не видно...
Упражнения
Заставьте черепаху двигаться по семиугольной, девяти угольной и двенадцати угольной орбите.
Напишите процедуру ОРБИТА1.СИМ таким образом, чтобы, задавая одни и те же параметры этой процедуре и процедуре ОРБИТА1, мы смогли получать фигуры, симметричные относительно центра координатной системы.
Проведите серию экспериментов с процедурой ОРБИТА 1, отмечая, при каких значениях параметров получается многоугольник и при каких - звезда.
Экспериментируйте, задавая некоторые "нестандартные" вводы процедуре ОРБИТА1. Например: 15 и 149; 33 и 456; 43 и 873; 50 и 1200; 1250 и 8426.
Напишите несколько процедур, подобных процедуре ЭКСП1, используя вместо процедуры вычерчивания квадрата процедуру вычерчивания других геометрических фигур.
Проведите эксперименты с процедурой ЭКСП2, задавая последовательно различные комбинации вводов. Объясните поведение черепахи при каждом выполнении процедуры.
Проведите эксперименты с данной ниже процедурой. Когда результаты этой процедуры будут совпадать с результатами процедуры ЭКСП2?
ЭТО ЭКСП5 :РАЗМЕР :УГОЛ :УВЕЛ
ВПЕРЕД :РАЗМЕР
ВПРАВО :УГОЛ
ЭКСП5 (:РАЗМЕР + :УВЕЛ) :УГОЛ :УВЕЛ
КОНЕЦ
Измените процедуру ЭКСП5 (см. упр. 7), вводя вместо параметра увеличения параметр уменьшения. Про-ведите эксперименты с новой процедурой.
Чем отличается действие данной ниже процедуры от действия процедуры ЭКСП2?
ЭТО ЭКСП6 :РАЗМЕР :УГОЛ
БЕЗСЛЕДА
ВПЕРЕД :РАЗМЕР
СОСЛЕДОМ
ВПЕРЕД 2 НАЗАД 2
ВПРАВО :УГОЛ
ЭКСП6 :РАЗМЕР + 3 :УГОЛ
КОНЕЦ
Сделайте серию экспериментов с процедурой ЭКСПЗ. Отметьте, при каких комбинациях вводов получаются фигуры с 2, 3, 4 и большим числом клубков.
Измените процедуру ЭКСПЗ, вводя параметр увеличения или уменьшения угла. Сделайте серию экспериментов с новой процедурой. Отметьте, при каких комбинациях вводов черепаха не возвращается в точку, из которой она вышла.
Измените процедуру ЭКСП4, используя вместо процедуры КВАДРАТ процедуру вычерчивания:
а) равностороннего треугольника;
б) правильного шестиугольника;
в) прямоугольника.
В чем данная ниже процедура отличается от процедуры ОРБИТА1? Сделайте серию экспериментов.
ЭТО ЭКСП7 :РАЗМЕР :УГОЛ
ВПЕРЕД :РАЗМЕР
ВПРАВО :УГОЛ
ЭКСП7 :УГОЛ :РАЗМЕР
КОНЕЦ
Закончите программу КАЛИНКА таким образом, чтобы при ее выполнении прозвучала мелодия:<>
ЭТО КАЛИНКА
ТЕМА1
ТЕМА1.1
КОНЕЦ
ЭТО ТЕМА1
КОНЕЦ
Процедуру ТЕМА1.1 получите из процедуры ТЕМА1 путем редактирования.
Начертите фигуру, представленную на рис. 58.
Рис. 58
Пусть черепаха выполняет рекурсивную процедуру вычерчивания окружности с радиусом 60 шагов. Если она делает один оборот за 36 с, какое расстояние она пройдет за 16 ч 50 мин 54 с?