Uploaded by Ирина Непочатых

Лабораторная работа "Вспомогательные алгоритмы в среде Кумир"

advertisement
Система Кумир. Школьный алгоритмический язык.
Вспомогательные алгоритмы без параметров.
Создание алгоритмов с использованием вспомогательных для исполнителя Робота.
Цель:
 Формирование умений записи, исполнения и отладки алгоритмов с
использованием вспомогательных алгоритмов системы Кумир
Краткая теория
Под алгоритмом понимают понятное и точное предписание (указание) исполнителю
совершить последовательность действий, направленных на достижение указанной цели или
на решение поставленной задачи.
Алгоритм - описание последовательности действий (план), исполнение которых
приводит к решению поставленной задачи за конечное число шагов.
Алгоритм - понятное и точное предписание исполнителю выполнить конечную
последовательность команд, приводящую от исходных данных к искомому результату.
Всякий алгоритм составляется в расчете на определенного исполнителя. Им может
быть человек, робот, компьютер и др. Вопрос о рассмотрении человека в этом качестве
является спорным, но в рамках данной работы мы будем придерживаться мнения о
человеке, как исполнителе алгоритма.
Исполнитель – объект, который выполняет алгоритм.
Алгоритм может выполнить тот, кто понимает все его команды и может их
выполнить. Таким образом, мы видим, что алгоритм не имеет смысла, если неизвестны или
не учитываются возможности того, кто будет исполнять этот алгоритм, то есть возможности
исполнителя. Поэтому нам потребуется еще одно определение «система команд
исполнителя».
Система команд исполнителя – совокупность команд, которые данный исполнитель
умеет выполнить.
Для выполнения всякой работы, решения поставленной задачи исполнитель на входе
получает алгоритм и исходные данные, а на выходе получает требуемые результаты.
Иногда при выполнении алгоритма возникает ситуация, когда исполнитель не может
выполнить очередное предписание, несмотря на то что оно имеется в его системе команд.
Такую ситуацию называют отказом.
Как вы поняли, каждый алгоритм должен быть понятен исполнителю, поэтому
алгоритм должен быть записан на понятном для исполнителя языке, и эта запись называется
программой.
Программа
запись
алгоритма
на
языке
исполнителя.
Вспомогательный алгоритм — это блок последовательных действий в основном
алгоритме, который выделен в качестве самостоятельного алгоритма, имеющего свое имя.
Вспомогательные алгоритмы выступают в качестве сменных блоков алгоритма,
которые могут быть составлены заранее и использованы в разных блок-схемах. Чем крупнее
блоки, тем легче проходит сборка алгоритма. Вспомогательный алгоритм всегда является
вложенным, если он включается в другой алгоритм. Но вложенная конструкция не является
вспомогательным алгоритмом до тех пор, пока ей не дано имя.
К вспомогательным алгоритмам можно отнести процедуры, которые описываются
перед выполнением основной программы и служат для выполнения одинаковых действий с
различными параметрами.
При разработке алгоритма необходимо пройти минимум две стадии – сначала
алгоритм должен быть понятен тому, кто его разрабатывает, а затем его следует
преобразовать с учетом специфики среды. В том случае, если эти действия станет выполнять
сам разработчик алгоритма, вторая стадия будет отсутствовать.
Важное замечание: необходимо отметить, что на время выполнения вспомогательного
алгоритма выполнение основного приостанавливается.
Описание алгоритма на языке КуМир
Алгоритм на языке КуМир записывается так:
алг тип_алгоритма имя_алгоритма (описание_параметров)
· дано условие_применимости_алгоритма
· надо цель_выполнения_алгоритма
нач
· последовательность команд
кон
Часть алгоритма от слова алг до слова нач называется заголовком.
Часть, заключенная между словами нач и кон — телом алгоритма.
При использовании этого стиля можно выделить несколько этапов:
1. Сначала проектируется основная программа, состоящая из 20-30 команд. Часто
на первом этапе составляется алгоритм на естественном (русском) языке. При
этом можно вводить несуществующие команды – процедуры.
2. Затем для каждой новой процедуры пишется расшифровка так, чтобы она также
состояла из 20-30 строк, при этом снова можно вводить несуществующие команды.
3. Эта процедура повторяется до тех пор, пока все процедуры не окажутся
расшифрованными, то есть пока не останется ни одной неизвестной команды.
Такой способ часто называют методом последовательного уточнения.
Преимущества такого подхода:
отлаживать (находить и исправлять ошибки)
разными разработчиками
Недостатки:
могут выполнять похожие действия
рации могут быть по-разному реализованы в
разных частях программы
При использовании этого метода сначала проектируются процедуры
самого нижнего уровня, которые могут быть расшифрованы только через
команды, входящие в СКИ исполнителя. После этого составляются процедуры
следующего уровня, которые выполняют более сложные действия. В конце
концов, образуется библиотека процедур, из которых программа собирается как
из кубиков.
Преимущества такого подхода:
программа составляется на основе единой библиотеки вспомогательных
процедур
Недостатки:
он может меняться
программистами
части
инными, это затрудняет отладку
программы.
Исполнитель Робот
Система команд исполнителя Робот включает:
• 5 команд, вызывающих действия Робота (влево, вправо, вверх, вниз, закрасить)
• 10 команд проверки условий:
– 8 команд вида [слева/справа/снизу/сверху] [стена/свободно]
– 2 команды вида клетка [закрашена/чистая]
• 2 команды измерения (температура, радиация)
Командам влево, вправо, вверх, вниз, закрасить соответствуют алгоритмы-процедуры языка КуМир. Остальным командам соответствуют алгоритмы-функции, тип этих
функций указан ниже.
Команды-действия:
влево - перемещает робота на одну клетку влево. Если слева стена,
выдает отказ.
вправо - перемещает робота на одну клетку вправо. Если справа стена,
выдает отказ.
вверх - перемещает робота на одну клетку вверх. Если сверху стена,
выдает отказ.
вниз - перемещает робота на одну клетку вниз. Если снизу стена, выдает отказ.
закрасить - делает клетку, в которой находится робот, закрашенной.
Пример:
алг
нач
· вправо
· вниз
· влево
· вверх
· закрасить
кон
Команды-проверки
лог слева свободно - Возвращает да, если робот может перейти влево, иначе — нет.
лог справа свободно - Возвращает да, если робот может перейти вправо, иначе —нет.
лог сверху свободно - Возвращает да, если робот может перейти вверх, иначе — нет.
лог снизу свободно - Возвращает да, если робот может перейти вниз, иначе — нет.
лог слева стена - Возвращает да, если слева от робота находится стена, иначе— нет.
лог справа стена - Возвращает да, если справа от робота находится стена, иначе— нет.
лог сверху стена - Возвращает да, если сверху от робота находится стена, иначе— нет.
лог снизу стена - Возвращает да, если снизу от робота находится стена, иначе— нет.
лог клетка закрашена - Возвращает да, если клетка закрашена, и нет, если клетка не
закрашена.
лог клетка чистая - Возвращает нет, если клетка закрашена, и да, если клетка не
закрашена.
Команды-измерения
вещ радиация - Возвращает значение радиации в клетке, где находится робот.
вещ температура - Возвращает значение температуры в клетке, где находится робот.
Рассмотрим работу исполнителя при решении следующих задач:
Закрасить прямоугольник размерами 7x13 (метод «Снизу вверх»)
Использовать Робот
алг Закрасить прямоугольник 7x13
надо / закрасить прямоугольник размером 7x13
нач
нц 7 раз
Закрасить ряд из 13 клеток
Вниз
кц
кон
алг Закрасить ряд из 13 клеток
дано
надо
нач
нц 13 раз
закрасить
вправо
кн
нц 13 раз
влево
кц
кон
Вспомогательный
алгоритм
Основной
алгоритм
Закрасить ячейки поля следующим образом, используя метод «сверху вниз».
использовать Робот
алг угол
нач
. нц 3 раз
. . уголок
. . вправо; вправо
. . вверх; вверх
. кц
кон
алг уголок
нач
. закрасить; вправо; закрасить; вправо
. закрасить; вправо; закрасить; вправо
. закрасить; влево; влево; влево; влево
. закрасить; вниз; закрасить; вниз
. закрасить; вниз; закрасить; вниз
кон
Основной алгоритм
Вспомогательный
алгоритм
Задания для самостоятельного выполнения:
1) Составьте программу рисования узора с использованием вспомогательного алгоритма.
Начальное положение Робота отмечено символом ◊.
2) Составьте программу рисования узора с использованием вспомогательного алгоритма.
Начальное положение Робота отмечено символом ◊.
3) Составьте программу рисования узора с использованием вспомогательного алгоритма.
Начальное положение Робота отмечено символом ◊.
4) Составьте программу рисования узора с использованием вспомогательного алгоритма.
Начальное положение Робота отмечено символом ◊.
5) Составьте алгоритм, под управлением которого Робот закрасит ряд клеток до стены и вернется в
исходное положение.
6) Составьте алгоритм, под управлением которого Робот закрасит ряд клеток до стены и вернется в
исходное положение.
7) Составьте алгоритм, под управлением которого Робот закрасит ряд клеток до стены и вернется в
исходное положение.
8) Составьте программу рисования узора с использованием вспомогательного алгоритма.
Начальное положение Робота отмечено символом ◊.
Download