Чертежник учится, или Использование вспомогательных алгоритмов

Алгоритм может выглядеть так (см. ниже). Но получается слишком много одних и тех же строк, выделим их желтым цветом. А если нам захочется нарисовать десять одинаковых квадратов? Сто?
использовать Чертежник
алг квадраты 1
нач
. сместиться в точку (-4,1)
. опустить перо
. сместиться на вектор (0,2)
. сместиться на вектор (2,0)
. сместиться на вектор (0,-2)
. сместиться на вектор (-2,0)
. поднять перо
. сместиться в точку (-1,1)
. опустить перо
. сместиться на вектор (0,2)
. сместиться на вектор (2,0)
. сместиться на вектор (0,-2)
. сместиться на вектор (-2,0)
. поднять перо
. сместиться в точку (2,1)
. опустить перо
. сместиться на вектор (0,2)
. сместиться на вектор (2,0)
. сместиться на вектор (0,-2)
. сместиться на вектор (-2,0)
. поднять перо
. сместиться в точку (0,0)
кон
При создании средних по размеру программ используется структурное программирование, идея которого заключается в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм решения был ясно виден из исходного текста. Программа разбивается на множество подпрограмм (вспомогательных алгоритмов), каждая из которых выполняет какое-то действие, предусмотренное исходным заданием.
Комбинируя вспомогательные алгоритмы, удается сформировать итоговый алгоритм используя блоки кода (подпрограммы), имеющих определенную смысловую нагрузку. Обращаться к ним, можно по их имени. Очень важная характеристика вспомогательных алгоритмов — это возможность их повторного использования.
Блоки кода выделенные желтым цветом запишем отдельным алгоритмом. Назовем его квадрат. Таким образом, мы как бы научим Чертежника новой команде квадрат.
использовать Чертежник
алг квадраты
нач
. сместиться в точку (-4,1)
. квадрат
. сместиться в точку (-1,1)
. квадрат
. сместиться в точку (2,1)
. квадрат
. сместиться в точку (0,0)
кон
алг квадрат
нач
. опустить перо
. сместиться на вектор (0,2)
. сместиться на вектор (2,0)
. сместиться на вектор (0,-2)
. сместиться на вектор (-2,0)
. поднять перо
кон
Получили более компактный и понятный алгоритм. Там, где какие-то части программы повторяются (используются) несколько раз, удобно использовать вспомогательные алгоритмы.
Обратите внимание — если нам потребуется изменить алгоритм так чтобы рисовались квадраты со стороной не два, а три, то при использовании вспомогательного алгоритма количество правок заметно уменьшается.
Примечание: все алгоритмы в программе на КуМире пишутся друг за другом, для удобства их можно отделять пустой строкой, главным считается алгоритм записанный первым, именно он начинает выполняться после запуска программы.
Метод последовательной детализации
Использованный нами подход облегчает программирование сложных задач. Задача разбивается на более простые подзадачи. Решение каждой оформляется в виде вспомогательного алгоритма, а основной алгоритм организует связку между ними.
Метод программирования, при котором сначала пишется основная программа, в ней записываются обращения к пока еще не составленным подпрограммам, а потом описываются эти подпрограммы, называется методом последовательной (пошаговой) детализации. Причем количество шагов детализации может быть гораздо большим, чем в нашем примере, поскольку сами подпрограммы могут содержать внутри себя обращения к другим подпрограммам.
Возможен и другой подход к построению сложных программ: первоначально составляется множество подпрограмм, которые могут понадобиться при решении задачи, а затем пишется основная программа, содержащая обращения к ним. Подпрограммы могут быть объединены в библиотеку подпрограмм и сохранены в долговременной памяти компьютера. Такую библиотеку можно постепенно пополнять новыми подпрограммами.
Например, если для управления графическим исполнителем создать библиотеку процедур рисования всех букв и цифр, то программа получения любого текста будет состоять из команд обращения к библиотечным процедурам.
Описанный метод называется сборочным программированием.
Часто в литературе по программированию используется такая терминология: метод последовательной детализации называют программированием сверху вниз, а сборочный метод — программированием снизу вверх.
Задание 1. Измените полученный алгоритм, так чтобы рисовалось 5, 7 или 10 квадратов.
Задание 2. Составьте программы лес, используя вспомогательный алгоритм елка, и улица, используя вспомогательный алгоритм домик.


Задание 3. Цифры в почтовом индексе записываются следующим образом:

Составьте вспомогательные алгоритмы рисования этих цифр. Можно сделать это с одноклассниками — каждому по цифре, а потом объедините их вместе.
Составьте программу рисования индексов городов Унеча (243300), Елец (399770), Таганрог (347900), Торжок (172011), Плёс (155555). В программе используйте вспомогательные алгоритмы.
Выражения и операции в языке Кумир
Выражение в языке КуМир — это языковая конструкция, описывающая порядок получения нового значения, путем выполнения предусмотренных операций над уже известными значениями.
Выражения в программе на языке Кумир могут располагаться:
- в правой части оператора присваивания;
- в индексе таблицы;
- в аргументе (типа арг ) вызова функции;
- в качестве подвыражения другого выражения;
- в команде вывод.
- площадь := длина * ширина
- рост[ 2 * х]
- вывод (а — в) ** 2
Значение выражения вычисляется с учетом приоритетов операций и скобок.
Команда присваивания в языке Кумир
В первом примере выше величине площадь присваивается значение выражения длина * ширина . Это происходит с помощью простой команды присваивания, которая используется для изменения значений простых величин и элементов таблиц. Формат команды присваивания имеет следующий вид:
- величина := выражение
- Элементом величина может быть имя простой величины или элемент таблиц.
- Элементом выражение являются выражения, составленные из величин, констант, вызовов алгоритмов-функций и знаков операций.
Неразрывный символ := между элементами является оператором присваивания. Заметим, что такой же вид имеет оператор присваивания в языке Паскаль.
Важно: тип величины должен быть согласован с типом выражения (смотрите ниже).
- цел а, b; вещ с
- c := sqrt(а** 2 + в** 2 )
Операции в языке Кумир
В языке Кумир в зависимости от возможного числа аргументов и способа их записи выделяют три группы операций:
- базовые операции (арифметические, логические, текстовые);
- вырезка из строки;
- операции, задаваемые алгоритмами-функциями.
Для каждой операции определены типы значений-аргументов и их количество, а также тип результата операции. Например,
В операции умножения два аргумента числового типа, результат операции также относится к числовому типу.
Базовые операции
В группе базовых операций, в зависимости от типов аргументов и результата, выделяют следующие классы:
- арифметические операции (аргументы и результат – числового типа);
- сравнение арифметическое (аргументы – числового типа, результат – логического);
- сравнение текстовое (аргументы – текстового типа, результат – логического);
- логические операции (аргументы и результат — логического типа);
- текстовые операции (аргументы и результат – текстового типа).
Для обозначения каждой базовой операции используется определенный символ. В отдельных случаях применяется составной символ, который записывается в тексте программы без пробела:
- ** – возведение в степень;
- >= – больше или равно;
- <> – не равно.
Тип выражения в Кумир
Тип выражения соответствует типу результата операции, которая выполняется последней.
При записи выражений необходимо следить за тем, чтобы типы всех подвыражений были согласованы с типами аргументов выполняемых операций .
Рассмотрим следующий пример:
- цел а = 10 , в = 90 ; вещ с = 20
- вывод а + в, нс
- вывод а + с
Выражение в первой команде вывода содержит два аргумента целого типа, поэтому тип выражения также целый. Во втором случае один из аргументов имеет вещественный тип, в результате, выражение также получает тип вещ .
Вырезка из строки и операции, задаваемые алгоритмами-функциями, будут рассмотрены в соответствующих темах.
Copyright © 2014-2021, Урок информатики
Все права защищены
Чертежник рисует цифры


Пишем программы для исполнителя Чертежник. Исполнитель рисует цифры в общепринятом формате для записи на почтовых конвертах индексов населенных пунктов.
Алгоритм:
использовать Чертежник алг цифра_0 нач опустить перо сместиться на вектор(0,2) сместиться на вектор(1,0) сместиться на вектор(0,-2) сместиться на вектор(-1,0) поднять перо сместиться на вектор (2,0) кон

Алгоритм:
использовать Чертежник алг цифра_1 нач сместиться на вектор (0,1) опустить перо сместиться на вектор (1,1) сместиться на вектор (0,-2) поднять перо сместиться на вектор (1,0) кон

Алгоритм:
использовать Чертежник алг цифра_2 нач сместиться на вектор (0,2) опустить перо сместиться на вектор (1,0) сместиться на вектор (0,-1) сместиться на вектор (-1,-1) сместиться на вектор (1,0) поднять перо сместиться на вектор (1,0) кон

Алгоритм:
использовать Чертежник алг цифра_3 нач опустить перо сместиться на вектор (1,1) сместиться на вектор (-1,0) сместиться на вектор (1,1) сместиться на вектор (-1,0) поднять перо сместиться на вектор (2,-2) кон

Алгоритм:
использовать Чертежник алг цифра_4 нач сместиться на вектор (0,2) опустить перо сместиться на вектор (0,-1) сместиться на вектор (1,0) сместиться на вектор (0,1) сместиться на вектор (0,-2) поднять перо сместиться на вектор (1,0) кон

Алгоритм:
использовать Чертежник алг цифра_5 нач опустить перо сместиться на вектор (1,0) сместиться на вектор (0,1) сместиться на вектор (-1,0) сместиться на вектор (0,1) сместиться на вектор (1,0) поднять перо сместиться на вектор (1,-2) кон

Алгоритм:
алг цифра_6 нач сместиться на вектор(1,2) опустить перо сместиться на вектор(-1,-1) сместиться на вектор(0,-1) сместиться на вектор(1,0) сместиться на вектор(0,1) сместиться на вектор(-1,0) поднять перо сместиться на вектор (2,-1) кон

Алгоритм:
использовать Чертежник алг цифра_7 нач опустить перо сместиться на вектор (0,1) сместиться на вектор (1,1) сместиться на вектор (-1,0) поднять перо сместиться на вектор (2,-2) кон

Алгоритм:
использовать Чертежник алг цифра_8 нач опустить перо сместиться на вектор(0,2) сместиться на вектор(1,0) сместиться на вектор(0,-2) сместиться на вектор(-1,0) сместиться на вектор(0,1) сместиться на вектор(1,0) поднять перо сместиться на вектор (1,-1) кон

Алгоритм:
использовать Чертежник алг цифра_9 нач опустить перо сместиться на вектор(1,1) сместиться на вектор(-1,0) сместиться на вектор(0,1) сместиться на вектор(1,0) сместиться на вектор(0,-1) поднять перо сместиться на вектор (1,-1) кон
Как сделать цифры в кумире
Урок 31. Использование вспомогательных алгоритмов
Презентация «Управление исполнителем Чертежник»

Ключевые слова:
• исполнитель Чертёжник
• абсолютное смещение
• относительное смещение
• вспомогательный алгоритм
• основной алгоритм
• цикл п раз
Чертёжник учится, или Использование вспомогательных алгоритмов
Чертёжник может рисовать любые фигуры из отрезков, например цифры почтового индекса. Как известно, каждая такая цифра вписана в прямоугольник (рис. 70).

Условимся при рисовании каждой цифры за начальную точку брать левую нижнюю вершину соответствующего прямоугольника.
Алгоритм рисования цифры 0 может иметь вид:
опустить перо
сместиться на вектор (0, 2)
сместиться на вектор (1, 0)
сместиться на вектор (0, -2)
сместиться на вектор (-1, 0)
поднять перо
сместиться на вектор (2, 0)
Для чего нужна последняя команда?
Для рисования цифры 6 можно использовать алгоритм:
сместиться на вектор (1, 2) опустить перо
сместиться на вектор (-1, -1)
сместиться на вектор (1, 0)
сместиться на вектор (0, -1)
сместиться на вектор (-1, 0)
сместиться на вектор (0, 1)
поднять перо
сместиться на вектор (2, -1)
Для чего нужна первая команда? Для чего нужна последняя команда?
А теперь представьте, что для Чертёжника необходимо разработать алгоритм рисования почтового индекса города Красноярска — 660000.
Самый простой вариант — составить очень длинный алгоритм, в котором дважды повторить рисование цифры 6 и четырежды — цифры 0.
Но есть и другой способ. Оказывается, Чертёжник может «запомнить», как рисуется та или иная цифра. Для этого алгоритм рисования цифр 0 и 6 нужно оформить в виде вспомогательного алгоритма.
Вспомогательный алгоритм
Вспомогательный алгоритм рисования цифры 0 будет выглядеть так:
алг цифра_0
нач
опустить перо
сместиться на вектор (0, 2)
сместиться на вектор (1, 0)
сместиться на вектор (0, -2)
сместиться на вектор (-1, 0)
поднять перо
сместиться на вектор (2, 0)
кон
Строка алг цифра_О называется заголовком алгоритма. Имя алгоритма — цифра О. Алгоритм рисования буквы помещается чуть правее между служебными словами нач и кон.
Вспомогательный алгоритм рисования цифры 6 оформите самостоятельно.
Приказ на выполнение вспомогательного алгоритма записывается в основном алгоритме.
В среде КуМир основной алгоритм для изображения индекса 660000 будет выглядеть так:
использовать Чертежник
алг индекс Красноярска
нач
цифра_6
цифра_6
цифра_0
цифра_0
цифра_0
цифра_0
кон
К какому типу алгоритмов относится этот основной алгоритм?