Задания школьного этапа Всероссийской олимпиады школьников по информатике и ИКТ для учеников 5-6 классов. Время выполнения заданий – 60 минут. Обеспечение: компьютер с установленной программой КуМир. Общие сведения о языке программирования КуМир (краткая справка для участника олимпиады). В языке программирования КуМир можно запрограммировать несколько типов виртуальных роботов-исполнителей: Кузнечик, Водолей, Черепаха, Робот и др. Все программы для исполнителей имеют одинаковую структуру: Здесь, после ключевого слова исполнитель исполнитель … алг записывается имя исполнителя (одно из названных нач выше имен), после алг записывается название … кон алгоритма, между словами нач (начало) и кон (конец) записываются команды исполнителю. Каждый исполнитель имеет свой специфический набор команд (справка по каждому исполнителю будет дана в каждой из задач в отдельности). Но при этом, все исполнители понимают общие команды: нц … кц, нц …раз …кц, нц пока … кц, если … то … все, если … то … иначе … все. Первые три команды служат для организации циклов (нц – начало цикла, кц – конец цикла), а последние две - для организации ветвления (принятия решений). Команды записанные между нц и кц будут поочередно нц выполняться бесконечное количество раз. … кц нц 5 раз … кц Команды записанные между нц 5 раз и кц будут поочередно выполняться 5 раз. Команды записанные между нц пока и кц будут поочередно выполняться пока условие верно. Условие задается с помощью знаков сравнения: >,<,=,>=,<=,<> больше, меньше, равно, больше либо равно, меньше либо равно, не равно. Возможно использование союзов (логических операций): не, или, и. Здесь условие задается по тем же правилам, что и если <условие> то … ранее. Между то и все указывается последовательность все команд, которую нужно выполнить, когда условие выполнено. Отличие этого оператора от предыдущего в том, если <условие> то что добавилось ключевое слово иначе. Если условие … выполнено, то исполнитель должен выполнить серию иначе … команд между то и иначе. В противном случае – серию все между иначе и все. нц пока <условие> … кц 1 Задача 1. Теория к задаче. У исполнителя Кузнечик имеются три собственные команды: вперед …, назад …, перекрасить. В задании фиксировано на сколько целых клеточек Кузнечик прыгает вперед, а на сколько назад. Первоначально Кузнечик находится в начале координатной прямой. Внешний вид поля показан на рисунке, Кузнечик обозначен синим треугольником. Команда перекрасить меняет цвет клетки на противоположный (закрашена, не закрашена). Например, если Кузнечик умеет: вперед 4, назад 3, то чтобы закрасить все четные числа между 2 и 12 нужно дописать программу, выполнив которую, Кузнечик пока закрашивает только 4, 8,12, 10. Траектория кузнечика приведена на рисунке ниже. Можно выполнить это же задание, с использованием циклов. Пример кода и траектория представлены на рисунках ниже. Практическое задание. Кузнечик умеет прыгать на 5 клеток вперед и на 3 клетки назад. Нужно, написать 2 программы: А) Кузнечик закрашивает все клетки кратные 4 в отрезке от 8 до 20 включительно; (5 баллов) Б) Кузнечик закрашивает все клетки кратные 4 в отрезке от 8 до 400 включительно. Текст программы должен содержать циклы и состоять из не более 40 команд. (5 баллов) 2 Задача 2. Теория к задаче. У исполнителя Черепаха имеются четыре собственные команды: вперед(…), вправо(…), поднять хвост, опустить хвост. вперед(…) – указывает на сколько точек сместиться Черепахе вперед. Если в скобках указать отрицательное число, черепаха сместиться назад, двигаясь задним ходом. Например, вперед(10) – на 10 пикселей пройти вперед. Если при выполнении этой команды у Черепахи был опущен хвост, то она оставляет на песке след (черная линия), иначе следа не остается. Для управления хвостом Черепахи используются команды: поднять хвост, опустить хвост. вправо(…) - указывает на сколько градусов повернуться Черепахе вправо. Если в скобках указать отрицательное число, Черепаха будет поворачиваться влево. Например, вправо(90) – Черепаха повернется на месте на 90 градусов вправо. Например, нижеприведенная программа рисует зигзаг. Для быстрого рисования узоров нужно использовать циклы. Например, следующая программа рисует повторяющийся узор. Практическое задание. Написать две программы: А) Черепаха рисует доску для забора. В вершине доски – правильный треугольник. Размеры доски, конечное положение Черепахи произвольные, доска расположена вертикально. (5 баллов) Б) Черепаха рисует забор из 8 таких досок. Текст программы содержит не более 20 команд. Размеры доски, конечное положение Черепахи произвольные. (5 баллов) А) Б) 3 Задача 3. Теория к задаче. У исполнителя Робот имеются следующие собственные команды: вперед, вправо, влево, вверх, вниз, закрасить, слева стена, справа стена, сверху стена, снизу стена. вперед, вправо, влево, вверх – при выполнении любой из этих команд Робот смещается в соответствующем направлении на одну клетку. Если ему преграждает путь стена, то он пытается пройти через нее и разбивается (программа прерывает свою работу). закрасить – закрашивает пустую клетку в желтый цвет; слева стена, справа стена, сверху стена, снизу стена - при выполнении любой из этих команд программа получает значение да или нет в зависимости от того, есть ли стена в соседней клетке с указанной стороны. Пример. Следующая программа заставляет Робота спускаться по лесенке неизвестных размеров, но известной формы (сверху-вниз, слева-направо). Начальное положение Робота – на верхней ступеньке слева. Требуемое конечное положение Робота – на нижней ступеньке справа. Нужно чтобы Робот также закрасил все клетки, в которых он побывал. Эта программа решает задачу для произвольного поля и произвольной лесенки. Практическое задание. Робот находится на поле произвольного прямоугольного размера в верхнем левом углу. На поле в произвольном порядке расположены только вертикальные стены, причем на верхней и нижней строках их нет. Он должен пройти по полю и пометить все клетки вертикальных коридоров. Клетка принадлежит вертикальному коридору, если слева и справа от нее находятся стены. Напишите программу управления Роботом. (10 баллов) Примеры входных и выходных данных: Вх. Вх. Вых. Вых. 4 Задача 4. Теория к задаче. Если в среде программирования КуМир не указать исполнителя, то исполнителем является Компьютер. Общение с Компьютером происходит через клавиатуру (ввод информации) и монитор (вывод информации). У исполнителя Компьютер имеются следующие собственные команды: mod(a,b), div(a,b), +,- , *, /,ввод, вывод, цел. mod(a,b), div(a,b) вычисляют соответственно остаток и частное от деления целых чисел a на b. Например, mod(25,4)=1, div(25,4)=6. +,- , *, / - обычные операции сложения, вычитания, умножения и деления. Порядок выполнения операций такой же как в математике. Прежде чем использовать имена переменных, их нужно описать. Например, если мы хотим использовать три целых числа a, b, c, то в программе перед их использованием пишем: цел a, b, c. ввод – ожидает вода значения переменной, записанной после слова ввод. Если требуется ввести несколько значений переменных, то их имена записывают после ключевого слова ввод, отделяя друг от друга запятыми. Например, цел a, b,c ввод a, b,c означает, что компьютер будет ожидать ввода трех целых чисел, которые будут сохранены под указанными именами a, b, c. вывод – выводит информацию на экран. После этого оператора указывают список выражений, значения которых сначала вычисляются, а затем выводятся. Например, если имена переменных a, b, c хранят целые числа, и соответственно они содержат 5, 4, 2, то команда вывод a+ b* c выведет на экран число 13. Пример. На вход программе поступают два натуральных числа n и m. Текст состоит из n символов. На страницу текста входит не более m символов. Требуется вывести минимальное количество страниц, необходимое для распечатки текста при таких условиях. Пояснение. Если на страницу входит 1000 символов, то: текст из 2000 символов займет 2 страницы; текст из 2001 символа займет 3 страницы; текст из 2015 символов займет 3 страницы. Эту задачу можно решить так: Практическое задание. На выставке собак каждый хозяин был хотя бы с одним псом. Известно, что был хозяин как минимум с двумя псами. Мальчик посчитал общее количество ног хозяев и псов (все псы и люди не имели физических недостатков). Напишите программу, которая по введенному допустимому количеству ног выведет максимально возможное количество хозяев. (10 баллов) Например, если: количество ног 10, то количество хозяев – 1; количество ног 12, то количество хозяев – 1; количество ног 14, то количество хозяев – 1; количество ног 16, то количество хозяев – 2. 5