Хирьянов Тимофей Федорович
Серия 2 вместе со служебным словом иначе может отсутствовать. В этом случае команда имеет вид:если условие
то серия 1
иначе серия 2
все
При выполнении команды если КуМир сначала проверяет условие , записанное между если и то . При соблюдении этого условия выполняется серия 1 , в противном случае — серия 2 (если она есть), после чего КуМир переходит к выполнению команд, записанных после слова все .если условие
то серия 1
все
если a то
b:=b-a
p:=p+q
иначе
a:=a-b
q:=q+p
все
если x > m
то
m:= x
n:= n+1
все
если справа свободно
то
вправо
все
Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать:выбор
при условие 1: серия 1
при условие 2: серия 2
…
при условие n: серия n
иначе серия n+1
все
КуМир сначала проверяет условие 1 . Если оно соблюдается, то КуМир выполняет команды из серии 1 , после чего переходит к выполнению команд, записанных после слова все . В противном случае КуМир делает то же самое с условием 2 и командами из серии 2 и т.д.выбор
при условие 1: серия 1
при условие 2: серия 2
…
при условие n: серия n
все
Управление исполнителем Робот в системе КУМИРвыбор
при a > 1: i:= i + 1
при a < 0: j:= j - 1
иначе t:= i; i:= j; j:= t
все
Робот существует в определенной обстановке (прямоугольном клетчатом поле). Между некоторыми клетками поля могут быть расположены стены. Некоторые клетки могут быть закрашены (рис. 3.11).
Робот занимает ровно одну клетку поля.
По командам вверх, вниз, влево и вправо Робот перемещается в соседнюю клетку в указанном направлении. Если на пути оказывается стена, то происходит отказ - выдается сообщение о невозможности выполнить очередную команду.
По команде закрасить Робот закрашивает клетку, в которой стоит. Если клетка уже была закрашена, то она закрасится повторно, хотя никаких видимых изменений не произойдет.
Робот может исполнять только правильно записанные команды. Если вместо команды вниз написать внис, то Робот эту запись не поймет и сразу же сообщит об ошибке.
О
шибки: 1 синтаксические; 2. логические
Описания обстановок хранятся в текстовых файлах специального формата (формат.fil).
Текущая - обстановка, в которой находится Робот в данный момент (включая информацию о положении Робота).
Стартовая - обстановка, в которую принудительно помещается Робот в начале выполнения программы, использующей Робот.
Порядок работы:
2. Указать Исполнителя:
Меню Вставка →Использовать Робот
3. Написать алгоритм решения задачи.
4. Выполнить алгоритм (Меню Выполнение →Выполнить непрерывно /F9)
Система команд исполнителя Робот в системе КУМИР
Команда |
Действие |
вверх |
Робот перемещается на 1 клетку вверх |
вниз |
Робот перемещается на 1 клетку вниз |
влево |
Робот перемещается на 1 клетку влево |
вправо |
Робот перемещается на 1 клетку вправо |
закрасить |
Робот закрашивает клетку, в которой находится |
справа свободно |
Робот проверяет выполнение соответствующего простого условия |
слева свободно |
↓ |
сверху свободно |
↓ |
снизу свободно |
↓ |
клетка закрашена |
↓ |
клетка чистая |
↓ |
Цикл – организация повторения действий, пока верно некоторое условие.
Тело цикла – набор повторяемых действий.
Условие –
логическое выражение (простое или сложное (составное))
Типы циклов:
1.Цикл «Повторять n раз» 2. Цикл «Пока»
нц n раз
нц пока
. . Тело цикла. . Тело цикла
кц
кц
Пример: нц пока справа свободно
Общий вид цикла «Повторять n раз:
ПОВТОРИТЬ n РАЗ
КОНЕЦ
кц
Общий вид цикла «пока»:
ПОКА ДЕЛАТЬ
КОНЕЦ
Составные условия
образуются из одного или нескольких простых условий и служебных слов И, ИЛИ, НЕ.
Пусть А - сверху свободно, В - справа свободно, тогда составное условие А И В - сверху свободно И справа свободно.
Пример: Пусть А – клетка закрашена (простое условие).
Проверка составного условия НЕ А:
а) А - выполнено, НЕ А (НЕ закрашено) - не выполнено.
б) А - не выполнено, НЕ А (НЕ закрашено) - выполнено.
Ветвление - форма организации действий, при которой в зависимости от выполнения или невыполнения некоторого условия совершается либо одна, либо другая последовательность действий.
Общий вид команды ЕСЛИ:
ЕСЛИ ТО ИНАЧЕ
КОНЕЦ
В языке КУМИР:
Полное ветвление: Неполное ветвление:
если
то
если
то
иначе
все все
Вспомогательный алгоритм - алгоритм, решающий некоторую подзадачу основной задачи.
В системе КУМИР вспомогательные алгоритмы пишутся в конце основной программы (после служебного слова кон ), вызываются на выполнение в основой программе по имени.
Вопросы и задания
1. Приведите все алгоритмы из трех команд, которые переместят Робота из исходного положения в клетку Б.
Существует ли для этой задачи алгоритм, при выполнении которого Робот делает:
а) два шага; б) четыре шага; в) пять шагов; г) семь шагов?
7. Известны два вспомогательных алгоритма Робота
Нарисуйте, что получится при выполнении Роботом следующих основных алгоритмов:
а) нц 5 раз
узор_1 вправо; вправо; |
б) нц 7 раз
узор_2 вправо; вправо |
в) вправо; вправо; вправо вверх; вверх вправо; вправо; вправо вниз; вниз
|
г) вправо; вправо вправо; вправо |
8. Составьте алгоритмы, под управлением которых Робот закрасит указанные клетки:
10. Известно, что где-то правее Робота есть закрашенная клетка.
Составьте алгоритм, под управлением которого Робот закрасит ряд клеток до закрашенной клетки и вернется в исходное положение.
11. Известно, что Робот находится рядом с левым входом в горизонтальный коридор.
12. Известно, что Робот находится где-то в горизонтальном коридоре. Ни одна из клеток коридора не закрашена.
Составьте алгоритм, под управлением которого Робот закрасит все клетки этого коридора и вернется в исходное положение.
Составьте алгоритм, который закрашивает клетки:
а) ниже каждой закрашенной клетки;
б) выше и ниже каждой закрашенной клетки.
нц пока клетка закрашена
ЕСЛИ справа свободно ТО
вправо; закрась
к
ц
15. Напишите программу, с помощью которой Робот сможет попасть в клетку Б во всех трех лабиринтах.
З
адачи ГИА
Дано
оридор2. Робот находится в верхней клетке узкого вертикального коридора. Ширина коридора – одна клетка, длина коридора может быть произвольной.
Напишите для Робота алгоритм, закрашивающий все клетки внутри коридора и возвращающий Робота в исходную позицию. Например, для приведенного выше рисунка Робот должен закрасить следующие клетки (см.рисунок):
Дано
апишите алгоритм для Робота, закрашивающий все клетки, расположенные выше стены и прилегающие к ней, независимо от размеров стены и начального положения Робота. Например, для приведенного рисунка Робот должен закрасить следующие клетки:
Конечное положение Робота может быть произвольным. При выполнении алгоритма Робот не должен разрушаться.
Напишите для Робота алгоритм, закрашивающий все клетки, расположенные левее вертикальной стены и выше горизонтальной стены и прилегающие к ним. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).
Напишите для Робота алгоритм, закрашивающий прилегающие к стене клетки, сверху и снизу, начиная с левой и через одну. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведѐнного рисунка а) Робот должен закрасить следующие клетки (см. рис. б).
Конечное положение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера стены и любой допустимой начальной позиции Робота.
Р | |||||
B
1102_ГИА2011
На бесконечном поле имеются две горизонтальные стены. Длина стен неизвестна. Расстояние между стенами неизвестно. Робот находится над нижней стеной в клетке, расположенной у ее левого края. Напишите для Робота алгоритм, закрашивающий все клетки, расположенные выше нижней стены и ниже верхней стены и прилегающие к ним. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведенного выше рисунка робот должен закрасить следующие клетки (см. рисунок):
Конечное расположение робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться.
В
1103_ГИА_2011
Напишите для Робота алгоритм, закрашивающий все клетки, расположенные выше горизонтальной стены и правее вертикальной стены и прилегающие к ним. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).
Карточки-задания
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Рассмотрим задачу:
На вход программе поступает натуральное число, не превосходящее 2 * 10 9 . Определите сумму цифр этого числа.
На первый взгляд задача весьма проста: необходимо последовательно выделять цифры в числе и добавлять их к сумме. В тоже время, очевидно, что количество цифр в числе может меняться, поэтому конечное значение параметра цикла для оказывается неопределенным и возникают сложности с его применением.
В циклических алгоритмах, в которых количество повторений определенного набора команд нельзя получить до момента его начала, применяются циклы с условием.
Одной из таких конструкций в языке программирования Кумир является цикл пока . Этот цикл, именуемый часто цикл с предусловием , имеет следующий формат записи:
Условие, записанное после служебного слова пока , представляет собой логическое выражение.
Выполнение цикла происходит следующим образом:
Важно! В теле цикла пока должно происходить изменение некоторой величины, связанной с условием, чтобы обеспечить окончание цикла, в противном случае, цикл может оказаться вечным.
Теперь применим цикл пока для решения нашей задачи
Итак, в ходе каждого исполнения тела цикла к величине сумма прибавляется последняя цифра числа, затем, число уменьшается в 10 раз. Очевидно, что в конце концов num станет равным 0, после чего выполнение цикла закончится.
В Кумире существует еще один вариант цикла с условием, получивший название цикл до тех пор , который имеет следующий формат:
Если в цикле пока проверка условия осуществляется перед телом цикла, то в цикле до тех пор - после. Поэтому этот цикл часто называют цикл с постусловием . Тело такого цикла всегда выполнится хотя бы один раз
Работа цикла до тех пор происходит следующим образом:
Задача. На вход программе поступает последовательность целых чисел, заканчивающихся нулем. Найдите количество отрицательных чисел в последовательности. Гарантируется, что в последовательности есть хотя бы одно число отличное от нуля.
{Фрагмент кода программы}
Ее для дальнейшей работы и научились задавать . Теперь перейдем непосредственно к составлению алгоритмов для Робота с использованием простых команд.
Если вам больше нравится информация в формате видеоуроков, то на сайте есть видеоурок
У любого исполнителя должна быть система команд (СКИ — система команд исполнителя ). Система команд исполнителя — совокупность всех команд, которые может выполнить исполнитель. В качестве примера рассмотрим дрессированную собаку. Она умеет выполнять некоторые команды — «Сидеть», «Лежать», «Рядом» и т. п. Это и есть ее система команд.
У нашего Робота тоже есть система команд. Сегодня мы рассмотрим простые команды Робота . Всего их 5:
Результат выполнения этих команд понятен из их названия:
Эти команды можно писать с клавиатуры, а можно использовать горячие клавиши (нажав их команды будут вставляться автоматически):
Обратите внимание, что набирать нужную комбинацию горячих клавиш нужно не привычным нам способом! Мы привыкли нажимать клавиши одновременно, а здесь их нужно нажимать последовательно . К примеру, чтобы ввести команду вверх, нужно нажать Escape, отпустить ее и после этого нажать стрелку вверх. Это нужно помнить.
Теперь мы готовы написать первый алгоритм для Робота. Предлагаю начать с простого — нарисуем квадрат со стороной 3 клетки. Поехали!
Запускаем Кумир, его. Можно начинать писать программу? Конечно нет! Мы же не ! Делаем это. Предлагаю использовать вот такую:
Вот теперь все готово. Начинаем писать программу. Пока она выглядит так
Удаляем символ «|» и называем наш алгоритм «Квадрат»
Предлагаю рисовать квадрат, двигаясь по часовой стрелке. Для начала закрасим текущую клетку, дав команду закрасить . Потом делаем шаг вправо и опять закрашиваем клетку. И еще раз шаг вправо и закрасить.
Попробуем запустить программу и посмотреть что же получилось. Для запуска нажимаем F9 или же кнопку на панели инструментов
В результате мы должны увидеть вот такую картину
Если такое окно Робота у вас не появилось, то на панели инструментов щелкните «Показать окно Робота » или в меню Робот выберите пункт «Показать окно Робота «. Продолжаем дальше.
Теперь мы будем двигаться вниз и закрашивать правую сторону квадрата:
вниз
закрасить
вниз
закрасить
Потом пойдем влево, закрашивая нижнюю границу квадрата
влево
закрасить
влево
закрасить
У нас осталась одна незакрашенная клетка. Закрасим ее
вверх
закрасить
Все готово! В итоге наша программа выглядит так:
использовать Робот
алг Квадрат
нач
закрасить
вправо
закрасить
вправо
закрасить
вниз
закрасить
вниз
закрасить