Среда программирования Кумир Язык КУМИР - универсальный язык программирования, его прототипом послужил "школьный язык программирования", разработанный А.П. Ершовым в первой половине 80-х годов ХХ века. Система КУМИР позволяет создавать, отлаживать и выполнять программы. Несложные программы Вы сможете начать писать и выполнять практически сразу после знакомства с системой, однако система КУМИР позволяет создавать и достаточно большие, сложные программы. Во время редактирования программы система КУМИР автоматически производит синтаксический разбор и сообщает о найденных ошибках. В то же время КУМИР является учебной системой. В неё встроено несколько графических исполнителей, действия которых визуализируются на их "игровом поле" или арене. Кроме обычных средств программирования Кумир имеет интерактивные средства управления исполнителями - панелью управления, которая дает выполнять определенный набор действий. Система КУМИР включает встроенные графические исполнители. Среда программирования КУМИР может быть установлена как под Linux, так и под Windows, а также доступна в исходных кодах. Скачать ее можно на сайте НИИСИ: http://www.niisi.ru/kumir/ Язык КуМир ни в коем случае не должен стать конечной точкой при обучении программированию! Это язык, с которого хорошо начать, чтобы освоить основы алгоритмического подхода и процедурный стиль программирования. Фортран и BASIC не рекомендуется к изучению, как морально устаревшие языки программирования. Следующими языками должны стать Python, Pascal, Си или C++. Среда исполнителя содержит три сосуда, обозначенные латинскими буквами «A», «B», «C», а также верхнюю панель, на котором находится меню «Задание». При запуске исполнителя создаются два окна: окно водолея и окно пульта. На окне Водолея под каждым стаканом показан его объем, ползунки справа от каждого стакана показывают текущий объем воды в нем. Наверху окна показано количество воды, которое нужно получить, это же количество отмечено зеленой полоской на каждом из стаканов. СКИ: наполни А наполни B наполни C вылей А вылей B вылей C перелей из A в B перелей из A в C перелей из B в A перелей из B в C перелей из C в A перелей из C в B Исполнитель Кузнечик прыгает по числовой оси. Его СКИ: 1. вперед 3 — Кузнечик смещается на 3 числа вправо; 2. назад 2 — Кузнечик смещается на 2 числа влево; 3. перекрасить — Кузнечик закрашивает поле, на котором находится. На экране положение Кузнечика отмечается треугольником: После выполнения программы: ПРИМЕР увидим результат: Прыжки Кузнечика нарисованы линиями, а поле 1 — закрашено. С помощью пункта меню Задание можно изменять длину прыжков Кузнечика (по умолчанию вперед 3, назад 2), а также менять его начальное положение (по умолчанию 0). Также можно расставлять флажки -— так помечают клетки, на которых должен побывать Кузнечик. Можно ограничить клетки, по которым может прыгать Кузнечик (по умолчанию, ось бесконечна в обе стороны). Графический исполнитель Робот "живет" на прямоугольном поле из квадратных клеток, может переходить между соседними клетками и закрашивать клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот пройти не может. На практике поле всегда ограниченного размера, а стенки стоят в заданных местах в зависимости от задачи. Задача состоит в закрашивании определенных клеток и остановке робота в заданном месте. У Робота есть пять команд-приказов: вверх вниз влево вправо закрасить При выполнении одной из первых четырех команд Робот перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Если Робот получит команду передвижения через стену, то он разрушится (произойдет отказ). По команде закрасить закрашивается клетка, в которой Робот находится в настоящий момент (если клетка уже закрашена, отказа не проис Чертежник действует на координатной плоскости и предназначен для построения рисунков, чертежей и графиков. Команды управления Чертежником - поднять перо, опустить перо, сместиться в точку (арг вещ х,у), сместиться на вектор (арг вещ х,у), установить цвет (лит наименование цвета), надпись (вещ ширина_знакоместа, лит текст). В команде сместиться в точку в качестве (х,у) выступают абсолютные значения координат, а сместиться на вектор - значения приращений по соответствующим осям. При перемещении опущенного пера за ним остается след - отрезок от старого положения пера до нового, а при перемещении с поднятым пером следа не остается). Команда установить цвет задает цвет пера: ”черный”, ”белый”, ”красный”, ”оранжевый”, ”желтый”, ”зеленый”, ”голубой”, ”синий”, ”фиолетовый”. По умолчанию используется черный цвет. Названия цветов пишутся в кавычках. При использовании исполнителя Чертежник программа должна начинаться со строчки «использовать Чертежник». Рассмотрим пример простой программы для исполнителя Кузнечик в системе Кумир: ПРИМЕР | Это пример алгоритма для исполнителя Кузнечик использовать Кузнечик алг Пример алгоритма · дано | Кузнечик на квадрате 0 · надо | Кузнечик на квадрате 1 нач · вперед 3 · назад 2 · перекрасить кон Первая строка начинается с прямой черты — так в Кумире обозначаются комментарии. При выполнении программы комментарии полностью игнорируются, они предназначены для людей — для автора программы и других людей, которые будут читать эту программу. Строка "использовать Кузнечик" позволяет написать программу для исполнителя Кузнечик. Аналогично вызываются и другие исполнители. Эта строка идет до слова алг и может вообще отсутствовать, например, в вычислительных программах. Слово алг обозначает начало алгоритма. После него идет название алгоритма. Оно подбирается так, чтобы было понятно, для чего нужен алгоритм, но может и отсутствовать. В строке дано описывается начальное состояние, из которого запускается алгоритм, а в строке надо — конечное состояние (результат выполнения алгоритма). Эти слова могут отсутствовать. В нашем примере после дано и надо записаны комментарии, поясняющие смысл алгоритма. Между словами нач и кон записываются команды, из которых состоит алгоритм (тело алгоритма). Словаалг, нач и кон должны располагаться строго друг под другом. Для их добавления в текст программы используйте сокращение Esc, А. Каждая команда в программе пишется на новой строчке. Если нужно записать несколько команд в одной строке, их разделяют точкой с запятой: вперед 3; назад 2; перекрасить Основные алгоритмические конструкции, кроме элементарных операций, изображаемых одним элементом схемы – это альтернативное исполнение и циклы. Существует два варианта программирования альтернативного исполнения и существует три основных вида цикла. Условно исполняемый код Некоторые операции могут быть поставлены под условный оператор. Тогда они будут выполнены только в случае истинности этого условия. если <условие> то <действия> все Альтернатива В блок-схеме проверка условия может служить принципом выбора альтернативных операций. То есть, если условие истинно, исполнение пойдет по одной траектории, а если ложно, то по другой. На языке КуМир цикл с предусловием имеет следующий вид: если <условие> то <действия> иначе <альтернативные действия> все Цикл с предусловием Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название — while-цикл. На языке КуМир цикл с предусловием имеет следующий вид: нц пока <условие> <тело цикла> кц Цикл с постусловием Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует операторrepeat..until, в Си — do…while. На языке КуМир цикл с постусловием имеет следующий вид: нц <тело цикла> кц_при <условие> Цикл со счётчиком Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for, в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. На языке КуМир цикл со счетчиком имеет следующий вид: цел а нц для а от 0 до 9 … тело цикла кц В различных языках программирования по-разному решается вопрос о значении переменной по завершении цикла, в котором эта переменная использовалась как счётчик. ЦИКЛ "N РАЗ" Общий вид цикла N раз: нц N раз · тело_цикла кц Здесь N - целое выражение, задающее число повторений. При выполнении алгоритма последовательность команд циклически повторяется указанное число раз. ПРИМЕР нц 4 раз · ввод x, y, z · вывод нс "Координаты:", x, y, z кц ПРИМЕР нц 5 раз · наполни А · перелей из A в B кц Обратите внимание: даже в случае двух раз необходимо писать "нц 2 раз", а не "раза". Цикл "пока" Общий вид цикла пока : нц пока условие · тело_цикла кц При выполнении цикла пока КуМир циклически повторяет следующие действия: Проверяет записанное после служебного слова пока условие. Если условие не соблюдается, то выполнение цикла завершается и КуМир начинает выполнять команды, записанные после кц. Если же условие соблюдается, то КуМир выполняет тело цикла, снова проверяет условие и т.д. ПРИМЕР нц пока а < 10 · а := а + 1 кц Цикл "до тех пор" Общий вид цикла до тех пор: нц · тело_цикла кц_при условие При выполнении цикла до тех пор КуМир циклически повторяет следующие действия: Выполняет тело цикла. Проверяет записанное после служебного слова кц_при условие. Если условие соблюдается, то выполнение цикла завершается и КуМир начинает выполнять команды, записанные после кц_при. Если же условие не соблюдается, то КуМир выполняет тело цикла, снова проверяет условие и т.д. ПРИМЕР 1 нц · x := 2*x кц_при x>100 Условие окончания цикла может быть добавлено в любую команду повторения, например, в цикл N раз. ПРИМЕР 2 нц 5 раз · ввод x, y, z · вывод нс, "Координаты:", x, y, z кц_при x+y+z>100 если-то-иначе-все Общий вид команды: если условие то серия 1 иначе серия 2 все Серия 2 вместе со служебным словом иначе может отсутствовать. В этом случае команда имеет вид: если условие то серия 1 все При выполнении команды если КуМир сначала проверяет условие, записанное между если и то. При соблюдении этого условия выполняется серия 1, в противном случае — серия 2 (если она есть), после чего КуМир переходит к выполнению команд, записанных после слова все. Если условие не соблюдается, а серия 2 вместе с иначе отсутствует, то КуМир сразу переходит к выполнению команд, записанных после слова все. ПРИМЕР 1 если a<b то b:=b-a p:=p+q иначе a:=a-b q:=q+p все ПРИМЕР 2 если x > m то m := x n := n+1 все ПРИМЕР 3 (ИСПОЛНИТЕЛЬ РОБОТ) если справа свободно то вправо все выбор-при-иначе-все Общий вид команды: выбор при условие 1 : серия 1 при условие 2 : серия 2 … при условие n : серия n иначе серия n+1 все Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать: выбор при условие 1 : серия 1 при условие 2 : серия 2 … при условие n : серия n все КуМир сначала проверяет условие 1. Если оно соблюдается, то КуМир выполняет команды из серии 1, после чего переходит к выполнению команд, записанных после слова все. В противном случае КуМир делает то же самое с условием 2 и командами из серии 2 и т.д. Команды, записанные после слова иначе, выполняются в том случае, когда не соблюдено ни одно из условий. В команде выбор всегда выполняется не более одной серии команд, даже если несколько условий окажутся истинными. Выполнение команды выбор заканчивается после того, как найдено первое (по порядку следования) условие со значением да (и выполнена соответствующая серия команд). ПРИМЕР 1 выбор при a > 1: i := i + 1 при a < 0: j := j - 1 иначе t := i; i := j; j := t все ПРИМЕР 2 выбор при a[i] > 1000: b[i] := 3 c[i] := 3.141 при a[i] > 100: b[i] := 2 c[i] := 3.14 при a[i] > 10: b[i] := 1 c[i] := 3.1 все В примере 2 при a[i]=1812 будут выполнены присваивания: b[i]:=3; c[i]:=3.141. ПРИМЕР 3 (ИСПОЛНИТЕЛЬ РОБОТ) выбор при сверху свободно: вверх при слева свободно: влево при снизу свободно: вниз при справа свободно: вправо все Алгоритм на языке КуМир записывается так: алг тип_алгоритма имя_алгоритма (описание аргументов и результатов) дано условие_применимости_алгоритма надо цель_выполнения_алгоритма нач последовательность команд кон Описание алгоритма состоит из: заголовка (часть до служебного слова нач), тела алгоритма (часть между словами нач и кон). Части "дано", "надо", а также "тип алгоритма" и "описание аргументов и результатов" могут отсутствовать. Простейшие алгоритмы Рассмотрим следующий вспомогательный алгоритм для исполнителя Чертежник. ПРИМЕР АЛГОРИТМА алг квадрат нач опустить перо сместиться на вектор(0,2) сместиться на вектор(2,0) сместиться на вектор(0,-2) сместиться на вектор(-2,0) поднять перо кон Он позволяет нарисовать квадрат 2х2 (начиная с левого нижнего угла). Для этого нужно использовать в основной программе команду вызова вспомогательного алгоритма, которая будет иметь вид: квадрат Алгоритмы с аргументами Для того, чтобы рисовать квадраты разных размеров, можно использовать алгоритм с аргументами. ПРИМЕР АЛГОРИТМА алг квадрат (арг вещ а) нач опустить перо сместиться на вектор(0, а) сместиться на вектор(а, 0) сместиться на вектор(0, -а) сместиться на вектор(-а, 0) поднять перо кон Слово арг означает, что у алгоритма есть аргумент (а), а вещ — то, что этот аргумент имеет вещественный тип. Команда вызова такого алгоритма может иметь вид квадрат(2) (в этом случае будет нарисован квадрат 2x2) или, например, квадрат(5) (в этом случае будет нарисован квадрат 5x5). Алгоритмы с результатами Алгоритм может не только получать информацию, но и отдавать ее. Для этого используется специальный вид величины — результаты. ПРИМЕР АЛГОРИТМА С РЕЗУЛЬТАТАМИ алг гипотенуза (вещ a, b, рез вещ c) дано a >= 0 и b >= 0 | длины катетов треугольника надо | c = длинa гипотенузы этого треугольника нач c := sqrt(a ** 2 + b ** 2) кон Здесь служебное слово рез указывает на то, что величина c является результатом и ее значение будет меняться в процессе работы алгоритма. Например, после вызова гипотенуза(3, 4, c) величина c примет значение 5. Алгоритмы-процедуры и алгоритмы-функции Рассмотренные выше примеры являются алгоритмами-процедурами. В Кумире также существуюталгоритмы-функции. Алгоритм-функция после выполнения возвращает значение-результат. Правила описания алгоритмов-процедур и алгоритмов-функций имеют два отличия. Во-первых, для алгоритмов-функций на месте тип_алгоритма должен быть указан один из простых типов алгоритмического языка (вещ, цел и т.д.), определяющий тип значений, которые возвращает данная функция. Во-вторых, в теле алгоритма-функции необходимо использовать служебную величину знач, которой присваивается вычисленное значение функции. Ее описанием служит заголовок алгоритма, но в остальном величина знач используется так же, как и любая другая промежуточная величина. (В теле алгоритма-процедуры величину знач использовать нельзя.) Вызов алгоритма-процедуры является отдельной командой алгоритмического языка и имеет вид: имя_алгоритма-процедуры или имя_алгоритма-процедуры (список_параметров_вызова) Вызов алгоритма-функции производится путем указания его имени в выражении. Встретив это имя при вычислении выражения, КуМир выполняет алгоритм-функцию. ПРИМЕР АЛГОРИТМА-ФУНКЦИИ алг вещ площадь (вещ a, b, c) дано a >= 0 и b >= 0 и c >= 0 | длины сторон треугольника надо | значение функции равно площади этого треугольника нач вещ p | полупериметр p := (a + b + c) / 2 знач := sqrt(p * (p - a) * (p - b) * (p - c)) кон Использовать этот алгоритм в программе можно, например, так: алг нач вещ P P := площадь(3, 4, 4) кон или так: если площадь(a, b, c) > 10 то … все Язык КУМИР допускает обычную работу консольного приложения, для ввода используется команда ввод, для вывода - вывод. Вывод вывод выражение-1, . . . , выражение-N Каждое выражение может быть либо арифметическим, логическим или текстовым выражением, либо командой перехода на новую строку (ключевое слово нс). Значения выражений выводятся последовательно в строку области ввода-вывода и разделяются пробелом. Когда строка полностью заполнена, автоматически происходит переход к началу новой строки. Когда окно ввод-вывода полностью заполнено, последующие команды вывода будут сдвигать содержимое окна вверх, вытесняя верхние строки окна. ПРИМЕР алг нач · нц 5 раз · · вывод ”Hello!”, нс · кц кон Ввод ввод имя-1, . . . , имя-N При выполнении этой команды КуМир выводит курсор в окно ввода-вывода и ждет, пока пользователь введет соответствующие значения. По окончании введенные значения присваиваются указанным величинам. В качестве имени величины можно указать имя простой величины или имя элемента таблицы с указанием значений индексов. Признаком конца ввода служит нажатие на клавишу Enter. При вводе нескольких чисел они отделяются друг от друга запятой или пробелом. ПРИМЕР алг нач · целтаб т[1:10] · цел ц, а · ввод ц · нц для а от 1 до ц · · ввод т[а] · кц · нц для а от 1 до ц · · вывод т[а], нс · кц кон