Вспомогательные алгоритмы с аргументами
Вспомните тему вспомогательные алгоритмы — для рисования двух квадратов с разными сторонами, например 2 и 3, нам нужно было составить два разных вспомогательных алгоритма. А как быть, если нужно рисовать много разных квадратов с разными длинами сторон? Не писать же для каждого свой алгоритм! Оказывается алгоритмы могут иметь аргументы, можно составить алгоритм рисования квадрата с произвольной длиной стороны.
алг квадрат2 нач . опустить перо . сместиться на вектор (0,2) . сместиться на вектор (2,0) . сместиться на вектор (0,-2) . сместиться на вектор (-2,0) . поднять перо кон алг квадрат3 нач . опустить перо . сместиться на вектор (0,3) . сместиться на вектор (3,0) . сместиться на вектор (0,-3) . сместиться на вектор (-3,0) . поднять перо кон
С понятием аргумент вы уже встречались в математике. В математике аргумент функции — независимая переменная, от значений которой зависят значения функции. Например, функция f(x) = x 2 +1 имеет один аргумент. При различных значениях аргумента будем получать различные значения функции — при x=2 получим f(x)=5, при x=3 получим f(x)=10 и т. д.
Нужный нам вспомогательный алгоритм (который рисует квадрат определенной длины) можно записать так:
алг квадрат( арг вещ а) нач . опустить перо . сместиться на вектор (0,а) . сместиться на вектор (а,0) . сместиться на вектор (0,-а) . сместиться на вектор (-а,0) . поднять перо кон
Запись « алг квадрат( арг вещ а)» означает, что у алгоритма «квадрат» есть один аргумент (арг) «а», который может быть произвольным вещественным (вещ) числом. Для того чтобы вызвать этот алгоритм нужно написать, например, «квадрат(2)» - получим квадрат со стороной 2 или «квадрат(3)» - получим квадрат со стороной 3 и т. п. Какое-то конкретное значение «а» получит только во время работы программы во время соответствующего вспомогательного алгоритма. И везде вместо «а» будет подставлено компьютером это число.
Программа для рисования это рисунка может быть такой:
использовать Чертежник алг квадраты нач . сместиться в точку (1,1) . квадрат(2) . сместиться в точку (4,1) . квадрат(3) . сместиться в точку (8,1) . квадрат(4) . сместиться в точку (13,1) . квадрат(5) . сместиться в точку (0,0) кон алг квадрат( арг вещ а) нач . опустить перо . сместиться на вектор (0,а) . сместиться на вектор (а,0) . сместиться на вектор (0,-а) . сместиться на вектор (-а,0) . поднять перо кон
Научим Чертежника новым командам. Одна из команд пусть называется « линия(арг вещ x1,y1,x2,y2) » – для рисования линии из точки (x1,y1) в точку (x2,y2).
Вспомогательный алгоритм может быть таким:
алг линия( арг вещ x1, y1, x2, y2) нач . сместиться в точку (x1,y1) . опустить перо . сместиться в точку (x2,y2) . поднять перо кон
Вторая команда пусть называется « прямоугольник(арг вещ x1,y1,x2,y2) » для рисования прямоугольника. Точка (x1,y1) одна точка диагонали АС прямоугольника, точка (x2,y2) – противоположная. Перед записью алгоритма нужно понять чему равны координаты двух других точек.
Вспомогательный алгоритм может быть таким:
алг прямоугольник( арг вещ x1, y1, x2, y2) нач . сместиться в точку (x1,y1) . опустить перо . сместиться в точку (x2,y1) . сместиться в точку (x2,y2) . сместиться в точку (x1,y2) . сместиться в точку (x1,y1) . поднять перо кон
Теперь используя эти команды нарисуем домик:
использовать Чертежник алг домик нач . прямоугольник(2,1,8,5) . прямоугольник(3,2,5,4) . прямоугольник(6,1,7,4) . линия(1,4,5,8) . линия(5,8,9,4) кон алг линия( арг вещ x1, y1, x2, y2) нач . сместиться в точку (x1,y1) . опустить перо . сместиться в точку (x2,y2) . поднять перо кон алг прямоугольник( арг вещ x1, y1, x2, y2) нач . сместиться в точку (x1,y1) . опустить перо . сместиться в точку (x2,y1) . сместиться в точку (x2,y2) . сместиться в точку (x1,y2) . сместиться в точку (x1,y1) . поднять перо кон
Примечание: естественно, одновременно с этими командами мы можем использовать и стандартные команды чертежника (сместиться в точку, сместиться на вектор …).
Задание 1. Используя вспомогательные алгоритмы линия и прямоугольник создайте какой-либо рисунок.
Задание 2. Попробуйте переписать алгоритмы линия и прямоугольник так, чтобы рисование осуществлялось командой сместиться на вектор.
Задание 3. Составьте алгоритм «прямоугольник (арг вещ x, y, a, b)», который рисует прямоугольник с длинами сторон a и b, начиная из заканчивая в точке (х, y).
Задание 4. Нарисуйте самостоятельно, что нарисует Чертежник выполнив алгоритм:
использовать Чертежник алг спираль нач . сместиться в точку (3,3) . опустить перо . виток(1); виток(3); виток(5); виток(7); виток (9) . поднять перо кон алг виток( арг вещ а) нач . сместиться на вектор (а, 0) . сместиться на вектор (0, -а) . сместиться на вектор (-а-1,0) . сместиться на вектор (0, а+1) кон