42
Язык Лого
Урок 2: Черенашья академия
А. А. ДУВАНОВ, Ю. А. ПЕРВИН
Арифметика Лого.
ЭВМ, конечное же, должна уметь вычислять. Мы можем набрать на клавиатуре команду ВПЕРЕД 10+20. Машина сложит 10+20 и пошлет Черпаху на 30 шагов вперед. Во всех ранее введенных командах вместе конкретного числа шагов или градусов поворота можно использовать арифметические выражения. Машина выполнит указанные в нем действия, округлит результат до ближайшего целого числа и будет использовать это число как параметр команды. Так, движения исполнитель будет совершенно одинаковы при выполнении команд
НАЗАД (100+20)/5 и НАЗАД 24
ВПРАВО 30—200/(2+3) и ВПРАВО —10
ВЛЕВО 20/3 и ВЛЕВО 7.
В языке Лого в качестве знаков арифметических операций использоваться:
- операция сложения;
— операция вычитания;
- операция умножения;
/ операция деления.
Круглые скобки служат, как обычно, для управления порядком действия. Выражения должны быть «вытянуты» в строку: (2+7)/5, а «многоэтажные» записи типа недопустимы. Это ограничение связано с тем, что на клавиатуре ЭВМ все символы выражения можно набрать только последовательно. Все знаки в арифметическом выражении должны явно указаны. Запись вида ВПЕРЕД (3+7)(40+30) заставит машину признать:
НЕПОНЯТНО ЧТО ТАКОЕ (3+7)(40+30)
Правильно следует писать: ВПЕРЕД (3+7)*(40+30). Десятические дроби в Лого записываются как обычно, но вместе запятой для отделения дробной части используется точка.
Черенаха одинаково средирует на команды:
ВПЕРЕД 2*(48+3)/2. 5 и ВПЕРЕД 40
ВПРАВО 180/3. 14 и ВПРАВО 57
Все эти, не совсем прививные, правильные записи арифметических выражений не имеют никакого отношения
43
к самом предмету программирования и связанны лишь с несовершенством нынешних машин, но в силу этого становятся суровой необходимостью, когда действительное нужно задать программу реализной ЭВМ.
Коль скоро ЭВМ может считать, естественно, что она имеет выводить на экран результат своих вычислений. Для того, чтобы заставить машину напечать на экран результат деления 25 на 4, достаточно дать ей команду:
ПИШИ 25/4
Выполняя команду, ЭВМ зажигает на экран результат: 6.25. Заметьте, без округления! Дело в том, что округляются только параметры команд, заставляющих Черепаху перемещаться. И в самом деле, ведя единцией перемещения является число «шагов» — точек экран, которое должно быть целым. Машина уже имеет вычислять (и выдавать) результат с весма высокой точностью.
Задача 1 (на тринировку записи выражений). а) Запишите команду НАЗАД без знаков операций, выполяющего то же действия, что и команду НАЗАД (42*5/7—15)/7; б) Заставьте машину сосчитать арифметическое выражение
Так необходимые имена
… Мою подругу зовут Валентина. Правда, красивое имя?
… Кис-кис! Феропонт, котик, иди сюда.
… Величина, именуемая x, не может принимать нульое значение, когда она является знаменателем дроби 1/x.
Имена служат удобным средством для идентификации людей, животных, предметов, понятный, явленный, т. е. для выделения конкретного объекта среди других, однотипных с ним. В языках программирования имена так и называются — идентификаторы. Как и в математике, они обозначают переменные величины. Идентификатором в Лого может быть произвольное слово, такое как x1, СТОРОНА или ВАСЯ. Идентификатором, как ярыком, помещается некоторая область в памяти ЭВМ, где хранится значение переменной. Чтобы различить, когда идет речь об именуемой области памяти, a когда o ее содержимом, в Лого в первом случае перед идентификатором переменной ставят кавычки, а во втором — двоеочие. Так, запись «X означает имя переменной X, а запись :X — значение этой переменной.
В Лого существует специальная команда СДЕЛАЙ, называемая командой присваивания, при помощи которой переменным можно присваивать значения. Например, при выполнении команды СДЕЛАЙ «X :X+1» приведет к увеличению значения переменной X на 1, так что X получит значение 2.
Итак, в команде присваивания — три части: обязательное (ключевое) слово СДЕЛАЙ, идентификатор переменной и выражение. По этой команде сначала вычисляется аргументное выражение. Если в нем есть переменные, то эти значения из соответствующих области памяти и подставляются в выражение. Результат вычисления становится переменной, идентификатор которого располагается неосредственно за словом СДЕЛАЙ. Вот пример:
СДЕЛАЙ «ВАСЯ 2
СДЕЛАЙ «ВАСЯ :ВАСЯ +1
(переменная ВАСЯ получает значение 5). Рассмотрим друг пример, связанный уже с геометрией.
44
Рис. 2.
СДЕЛАЙ «СТОРОНА 100 СДЕЛАЙ «УГОЛ 180
ПОВТОРИ 4 [В :СТОРОНА П :УГОЛ/2]
ПОВТОРИ 4 [В :СТОРОНА/2 П :УГОЛ/2]
(нарисованы два вложенных друг в друга квадрата, с совмещенным левым нижним углом).
Задча 2. Составьте программу, вычислую объем ангара, изображенного на рисунке 1.
Процедуры с параметром
Занимаясь арифметикой и расчудяя об именах, мы совсем забили нашу Черепаху, которая весма умело чертит … если его правильно управлять. Давайте научим Черепаху рисовать вот такую «пирамиду» (рис. 2).
Задча решения при помощи вызова процедуры ПИРАМИДА, описание которого имеет вид
это ПИРАМИДА
ПРИМОУГЛЫНИК 1
НР В 10 П 90 В 20 Л 90 Р
ПРИМОУГЛЫНИК2
НР В 10 П 90 В 10 Л 90 Р
ПРИМОУГЛЫНИК3
НР В 10 П 90 В 5 Л 90 Р
ПРИМОУГЛЫНИК4
КОНЕЦ
Здесь использованы четыре «прямоугольных» процедуры:
это ПИРАМИДИК1
ПОВТОРИ 2 [В 10 П 90 В 80 П 90]
КОНЕЦ
это ПИРАМИДИК2
ПОВТОРИ 2 [В 10 П 90 В 40 П 90]
КОНЕЦ
это ПИРАМИДИК3
ПОВТОРИ 2 [В 10 П 90 В 20 П 90]
КОНЕЦ
это ПИРАМИДИК4
ПОВТОРИ 2 [В 10 П 90 В 10 П 90]
КОНЕЦ
Они очень похожи друг на друга.
В таком случае можно записать всего одну процедуру с параметром, вынесенным в заголовок описания процедуры и названным, например, СТОРОНА. Тогда в описании процедуры вместе размер стороны примоугольника будет фигурировать имя СТОРОНА, обозначающее значение из таким образом помещенной области памяти.
это ПИМОУГЛЫНИК :СТОРОНА
ПОВТОРИ 2 [В 10 П 90 В :СТОРОНА П 90]
КОНЕЦ
Параметр процедуры, представляющий собой имя переменной, называется параметром описания процедуры, или ее формальный параметром.
Наша процедура вызывается к использованию при помощи команды
ПРИМОУГЛЫНИК α,
где α — арифметическое выражение (в частности, число), называемое фактическим параметром процедуры, или параметром вызова. Вызов происходит так: формальный параметру СТОРОНА выделяется область свободной памяти (возможно при каждом вызове разная); вычисляется фактический параметр и его значение помещается в выделенную для формального параметра область; выполняется команды тела процедуры; после этого область памяти, временно отведенная под параметр, объявляется свободной.
Переменная, для которой место в памяти отводится каждой разного в момент вызова процедуры, называется локальной переменной этой процедуры. Формальные параметры процедуры в Лого — это локальные переменные.
Далее несколько процедур использоваются формальные параметры, это не описано для программы, вызывающей эти процедуры. Действительно, формальные параметры локальных, и значит, будучи занятыми во время выполнения некоторых памяти освобождаются к ее завершению и могут быть использованы под любым (и в том числе, тем же самым) именем в других процедурах. Таким образом, локальное форматовое позволяет распределить составление сложной программы, включая необходимый текстовыйом программистов. В следующем примере
это А :X :Y
ВПЕРЕД :X ВПРАВО :Y ВПЕРЕД :X КОНЕЦ
СДЕЛАЙ «T 45
А :T :T2
переменные X, Y — формальные, а выражения :T и :T2 — фактические параметры процедуры A. Соот-
45
Ветствие между формальными и фактическими параметрами — позиционное: первый формальный параметр соответствует первому фактическому, второй — второму и т. д.
Вернемся теперь к нашей примике. Это ПРАМИДА
ПРЯМОУГОЛЬНИК 80
НР В 10 П 90 В 20 Л 90 Р
ПРЯМОУГОЛЬНИК 40
НР В 10 П 90 В 10 Л 90 Р
ПРЯМОУГОЛЬНИК 20 (1)
НР В 10 П 90 В 5 Л 90 Р
ПРЯМОУГОЛЬНИК 10
КОНЕЦ
Задача 3. В программе (1) четырехыповторяется вызов процедуры ПРЯМОУГОЛЬНИК, правда, с разным, но закономерно изменяющимся фактическим параметром. Проанализировав закономерности программы, составьте описание процедуры с параметром ПРАМИДА:ОСНОВАНИЕ, где вызов процедуры ПРЯМОУГОЛЬНИК осуществляется бы внутри цикла. Предложите, по крайней мере, два варианта такой процедуры. Объясните, какой из них и почему, по вашему мнению, лучше. Используйте вашу программу для рисования примыцы с основанием 120.
Программисты стараются всегда, когда это возможно, сделать свои программы универсальными.
Задача 4. Расширьте возможности предыдущей программы, описав процедур, которая рисунет примыцу с произвольной высотой колца. Нарисуйте с помощью вашей новой программы рисунок, составленный из двух примыид (рис. 3).
Правильные многоугольники
Рисуя правильные многоугольники с треями, четырьмя, пятую, … сторонами (рис. 4), легко убедиться, что с возможностью числа сторонами числа сторон фигура становится все более «круглой». На правильном шестиугольнике уже выполнено exactly как на колесе, если он достаточно мал (рис. 5)!
Угол правильного -угольника равен 180—360/ градусов. Значит, Черенаха после отрисовки каждой стороны должна поворачивать на дополнительный угол, равный 360/ градусов. Вот описание процедуры для построения произвольного правильного -угольника:
Это ПРАВИЛЬНЫЙ : :СТОРОНА
ПОВТОРИ : :СТОРОНА П 360/
ВЫЗОВ
ПРАВИЛЬНЫЙ 4 100
нарисует на экране квадрат со стороной 100, а вызов
ПРАВИЛЬНЫЙ 8 20
— правильный восмнутый со стороной 20. Наконец, рисунок правильного 360-угольника со стороной 1 — это вызов
ПРАВИЛЬНЫЙ 360 1
Это наличище приближение окружности, создаваемое Черенахой, которая не имеет поворачивать на углы, меньше 1 градуса, и перемещаться на расстояния, меньше 1 черепашнего шага. Длина этой окружности 360 шагов, а радиус , т. е. приближительное 57 шагов. Увеличить ее радиус можно, если при обращении к процедуре ПРАВИЛЬНЫЙ будет увеличена сторона. А вот уменьшить радиус можно, только уменьшив число сторон многоугольника.
Задача 5. Придумайте процедуру ОКРУЖНОСТЬ с одним параметром РАДИУС. Она должна рисовать наличище возможность заданного радиуса. Точку расположения Черенахи на экране использует в качестве центра окружности, в которой исполнитель должен вернуть после завершения рисования.