Основная структурная единица языка КуМир — алгоритм. Программа на языке КуМир в простейшем случае состоит из нескольких алгоритмов, следующих один за другим. Перед первым алгоритмом может располагаться вступление — любая неветвящаяся последовательность команд. Например, это могут быть строки с комментариями, описаниями общих величин программы, командами присваивания им начальных значений и пр. После последнего алгоритма могут располагаться опсания исполнителей (см. ??). Алгоритмы в программе должны располагаться вплотную друг к другу, между ними могут быть только пустые строки и строки с комментариями.
Схема программы без вступления и исполнителей:
алг первый алгоритм
|
кон
алг второй алгоритм
|
кон
…
алг последний алгоритм
|
кон
Выполнение такой программы состоит в выполнении первого алгоритма (он называется основным алгоритмом программы). Остальные алгоритмы будут выполняться при вызове из первого алгоритма или из других ранее вызванных алгоритмов.
Схема программы со вступлением и без исполнителей:
вступление
алг первый алгоритм
|
кон
алг второй алгоритм
|
кон
…
алг последний алгоритм
|
кон
Выполнение такой программы состоит в выполнении вступления, а затем первого алгоритма.
| Пример 1.
| Это вступление
цел длина, ширина
длина := 10
ширина := 15
| Это - основной алгоритм.
| У него может не быть имени
алг
нач
· вывод ”Площадь равна ”, площадь
кон
| Это - вспомогательный алгоритм. При выполнении он вызывается из основного.
| У вспомогательного алгоритма обязательно должно быть имя и могут быть параметры.
алг цел площадь
нач
· знач := длина*ширина
кон
| Пример 2.
| Это вступление
вещ длина, ширина, масса
длина := 10
ширина := 15
алг
нач
· вещ S
· S := площадь
· вещ плотность, масса
· плотность := 6.8 | г/см**2
· найти массу пластинки(плотность, S, масса)
· вывод ”Масса пластинки равна ”, масса
кон
|
| Это - вспомогательный алгоритм.
| При выполнении он вызывается из основного алгоритма.
| У вспомогательного алгоритма
| обязательно должно быть имя.
алг вещ площадь
нач
· знач := длина*ширина
кон
|
| Это - еще один вспомогательный алгоритм.
| При выполнении он вызывается из
| другого вспомогательного алгоритма.
| У вспомогательного алгоритма
| обязательно должно быть имя.
| У вспомогательного алгоритма могут быть параметры
алг найти массу пластинки(арг вещ p, S, рез вещ m)
нач
· m := p*S
кон
Алгоритм на языке КуМир записывается так:
алг тип_алгоритма имя_алгоритма (описание_параметров)
· дано условие_применимости_алгоритма
· надо цель_выполнения_алгоритма
нач
· последовательность команд
кон
Описание алгоритма состоит из:
Алгоритмы делятся на алгоритмы-процедуры и алгоритмы-функции. Алгоритм-функция после выполнения возвращает значение-результат. Правила описания алгоритмов-процедур и алгоритмов-функций имеют два отличия.
Во-первых, для алгоритмов-функций на месте тип_алгоритма должен быть указан один из простых типов алгоритмического языка (вещ, цел и т.д.), определяющий тип значений, которые принимает данная функция. Для алгоритмов-процедур тип_алгоритма должен быть опущен.
Во-вторых, в теле алгоритма-функции необходимо использовать служебную величину знач, в которую записывается вычисленное значение функции. В теле алгоритма-процедуры величину знач использовать нельзя.
Алгоритмы-функции и алгоритмы-процедуры отличаются также по способу вызова. См. ?? и ??.
Пример алгоритма-процедуры:
алг гипотенуза (вещ a, b, рез вещ c)
дано a>=0 и b>=0 | длины катетов треугольника
надо | c = длинa гипотенузы этого треугольника
нач
· c := sqrt( a**2 + b**2 )
кон
Пример алгоритма-функции:
алг вещ площадь (вещ a, b, c)
дано a>=0 и b>=0 и c>=0 | длины сторон треугольника
надо | значение функции равно площади этого треугольника
нач
· вещ p | полупериметр
· p := (a+b+c)/2
· знач := sqrt(p*(p-a)*(p-b)*(p-c))
кон
Значение, которое должно стать результатом алгоритма-функции, надо присвоить особой величине с именем знач. Ее описанием служит заголовок алгоритма, но в остальном величина знач используется так же, как и любая другая промежуточная величина. Вызов алгоритма-функции производится путем указания его имени в выражении. Встретив это имя при вычислении выражения, КуМир выполняет алгоритм-функцию и затем подставляет в выражение вместо имени алгоритма значение величины знач.
Если алгоритм не имеет параметров (аргументов и результатов), то в строке алг записывается только имя алгоритма.
Если у алгоритма есть параметры, то их описание заключается в круглые скобки после имени алгоритма в строке алг. Описание содержит информацию о типах параметров и о том, являются они аргументами или результатами:
После каждого из служебных слов арг, рез, аргрез должно располагаться одно или несколько описаний одной или нескольких величин. Имена величин и описания разделяются запятыми. Если в начале описания нет служебных слов арг, рез, аргрез, то предполагается, что первыми идут описания аргументов (арг).
Пример.
алг
нач
· вещ число
· цел целое, сотые
· лит запись
· число := 3.14
· тест(целое, сотые, запись, число)
кон
алг тест (рез цел m, n, лит т, арг вещ y)
нач
· вещ r
· m := int(y)
· r := (y - m)*100
· n := int(r)
· т := вещ_в_лит(y)
кон
В заголовке алгоритма алг тест (рез цел m, n, лит т, арг вещ y) служебное слово рез относится к описаниям цел m, n и лит т, а параметр вещ y будет аргументом.
ВНИМАНИЕ: Запрещается писать в теле алгоритма команды, изменяющие значения параметров-аргументов (описанных как арг). Результаты алгоритма (рез, но не аргрез) в начале выполнения алгоритма принимают неопределенные значения.
После последнего алгоритма программы может идти одна или несколько конструкций исполнитель. Таким образом, в самом общем виде программа имеет такой вид:
вступление программы
первый алгоритм
второй алгоритм
...
последний алгоритм
первый исполнитель
второй исполнитель
...
последний исполнитель
Конструкция исполнитель на языке КуМир записывается так:
исп имя_исполнителя
вступление_исполнителя
алг первый_алгоритм_исполнителя
|
кон
...
алг последний_алгоритм_исполнителя
|
кон
кон_исп
В алгоритмах программы и исполнителей могут использоваться алгоритмы программы и любых исполнителей. В алгоритмах исполнителя могут использоваться общие величины этого исполнителя, но не общие величины программы и других исполнителей. Во вступлении данного исполнителя могут использоваться алгоритмы программы и алгоритмы исполнителей, записанных по тексту выше этого исполнителя.
При выполнении программы вначале выполняется ее вступление, затем, по порядку, вступления всех исполнителей. После этого начинает выполняться основной алгоритм (т. е. первый по порядку). Выполнение программы заканчивается, когда заканчивается выполнение основного алгоритма.
В простейшем случае каждая простая команда и каждое ключевое слово в составных командах пишется на отдельной строке. Однако, чтобы сделать программу более компактной, можно «склеивать» несколько строк в одну. Это можно сделать в следующих случаях.
Точка с запятой приравнивается к переносу строки.
Пример:
Программа 1 и Программа 2 имеют одинаковый смысл.
| Программа 1 — сжатое написание
алг
нач
· цел а; вещ в
· а := 5; в := 0.1
кон
| Программа 2 — полное написание
алг
нач
· цел а
· вещ в
· а := 5
· в := 0.1
кон
Для многих ключевых слов можно догадаться, что перед ними или после них должен быть перевод строки.
<<Неявные>> переносы строк вставляются в следующих случаях:
Пример:
алг
нач цел знак, вещ модуль
· вещ щ
· ввод щ
· модуль :=0; знак := 0
· если щ > 0 то
· · модуль :=щ; знак := 1
· все
· если щ < 0 то модуль :=щ; знак := 1 все
кон
алг
· # Это алгоритм вычисления суммы двух чисел
нач
· цел а, б | объявляем величины
· ввод а, б | вводим значения с клавиатуры
· вывод а+б | посчитаем сумму чисел
кон
В этом алгоритме после знака | в некоторых строках записаны комментарии. Такие комментарии разрешается помещать в конце любой строки, отделяя их знаком |. Если комментарий занимает несколько строк, то знак | перед комментарием надо ставить в каждой строке. Комментарии могут записываться в любой удобной для человека форме. При выполнении алгоритма компьютер полностью пропускает комментарии — алгоритм выполнятеся так же, как если бы комментариев вообще не было.
Таким образом, комментарии предназначены исключительно для человека — они облегчают понимание алгоритма.
Кроме того, существует особый вид комментария – он может располагаться только между строками алг и нач алгоритма и начинается с символа #. С помощью этого комментария описывается весь алгоритм в целом. Данная информация отображается в пункте главного меню Инструменты – Алгоритмы пользователя.
Имя бывает у величин, таблиц, алгоритмов и исполнителей. Имя – это последовательность слов, разделенных пробелами. Первое слово имени не должно начинаться с цифры. Ни одно из слов не должно быть ключевым словом. Примеры имен: m, погода на завтра, Ноябрь 7, Седьмое ноября, дом_57б.
Примеры неправильных имен:
Примечание. Ключевое слово не можно вставлять внутрь многословных логических имен (см. ??).
Слово — это последовательность разрешенных (словарных) символов. Словарными символами являются:
Примеры слов: бета123, 3кг, мама, Linux, КоСтЯ, kumir@infomir_ru.
Примеры не слов: альфа-123, ма%ма, С++.
Ключевые слова языка КУМИР — это: алг нач кон исп кон_исп дано надо арг рез аргрез знач цел вещ лог сим лит таб целтаб вещтаб логтаб симтаб литтаб и или не да нет утв выход ввод вывод нс если то иначе все выбор при нц кц кц_при раз пока для от до шаг.
В отрицаниях логических величин, таблиц и алгоритмов функций ключевое слово не можно вставлять между словами многословного имени.
Пример:
лог л, завтра будет четверг | |
л := не завтра будет четверг | | Правильно |
л := завтра не будет четверг | | Правильно |
л := завтра будет не четверг | | Правильно |
л := завтра будет четверг не | | Неправильно |
л := не завтра не будет четверг | | Неправильно |
Первые три присваивания присваивают логической величине л значение, противоположное значению логической величины завтра будет четверг. Четвертая строка синтаксически неверна — не нельзя ставить после имени. Последняя строка также неверна: нельзя использовать более одного не.
Величины, с которыми работает КуМир-программа, подразделяются на несколько типов. Величина каждого из типов может принимать свой набор значений. В языке КуМир предусмотрены следующие типы величин:
Типы цел и вещ называются числовыми; типы сим и лит — текстовыми.
Значения величин МЦЕЛ и МВЕЩ определяются способом представления чисел в современных компьютерах и примерно одинаковая в большинстве современных языков программирования.
Язык КуМир содержит встроенные функции преобразования числовых типов в текстовые и наоборот (см. ??). При необходимости значения целого типа автоматически переводятся в вещественные, а символьные — в текстовые. Для преобразования вещественных значений в целые используется встроенная функция int (см. ??).
Константы бывают целые, вещественные, логические, символьные и литеральные.
Целые константы бывают положительные и отрицательные. Целая константа по абсолютной величине должна быть строго меньше 231. Целые константы можно записывать в десятичной и 16-ричной форме. Шестнадцатеричные константы начинаются с символа $.
Примеры: 123, -100000, $100.
Вещественные константы бывают положительные и отрицательные. Вещественная константа по абсолютной величине должна быть меньше 21023. Вещественные константы можно записывать в десятичной и экспоненциальной форме. В качестве разделителя в экспоненциальной записи можно использовать любой вариант буквы e: строчный или прописной, латинский или кириллический.
Ограничения для вещественных констант определяются стандартом IEEE 754-2008.
Примеры: 1.23, -0.56, 1e+4, 5E-7.
Логическая константа — это одно из ключевых слов да, нет.
В символьной константе допустим любой символ, который можно набрать на стандартной клавиатуре. Такие символы называются допустимыми.
Символьная константа имеет вид ’c’ или ”с” (здесь с — допустимый символ).
Примеры: ’a’, ”%”, ’ ” ’, ” ’ ”, ’Это я’, ”It’s me”.
Литеральная (текстовая) константа имеет вид ’Т’ или ”Т”. Здесь Т — строка, состоящая из допустимых символов. При этом, если константа Т ограничена простыми кавычками, то Т не содержит простую кавычку, а если Т ограничена двойными кавычками, то она не содержит двойную кавычку.
Каждая величина имеет имя, тип, вид и значение.
Имя величины служит для обозначения величины в алгоритме (см. ??).
Тип величины показывает, какие значения может принимать величина, и какие операции можно с ней выполнять (см. ??).
Вид величины показывает ее информационную роль в алгоритме. Например, аргументы содержат исходную информацию, необходимую для работы алгоритма, а промежуточные величины предназначены для хранения текущей информации, которую обрабатывает алгоритм.
Во время выполнения алгоритма в каждый конкретный момент величина имеет какое-то значение либо не определена.
Имя, тип и вид величины можно однозначно определить по тексту алгоритма.
Это статические характеристики величины. Значение определяется только во время выполнения. Это динамическая характеристика.
В языке КУМИР используются простые и табличные величины (таблицы).
Характеристики простых величин описаны в ??. Для таблиц кроме того определена размерность (бывают таблицы размерностей 1, 2 и 3). Для каждого измерения определены границы изменения индекса таблицы по этому измерению — два целых числа.
Каждая величина должна иметь описание. Это может быть сделано:
В описании задаются перечисленные выше статические характеристики переменной.
Кроме того, в алгоритмах-функциях используется простая переменная знач, ее тип определяется типом функции, (см. ??). Явного описания переменная знач не имеет. Ее область действия — тело соответствующего алгоритма-функции.
Команда описания простой величины состоит из ключевого слова нужного типа (цел, вещ, сим, лит, лог), за которым следует список имен величин.
Пример.
цел j, k, n
вещ длина, ширина
лит мой текст
Для описания таблиц после описания типа нужно указать ключевое слово таб (слитно или раздельно с ключевым словом типа). Размерность таблицы и границы изменения индексов указываются после имени каждой величины.
Примеры.
цел таб k[-5:5]
вещтаб tab[1:4, 1:12]
Здесь k — линейная таблица, состоящая из 11 элементов целого типа. Индексы элементов принимают значения от -5 до 5. Таблица tab — прямоугольная. В ней 48 элементов — 4 строки и 12 столбцов.
В зависимости от способа описания и места описания в программе, где описана величина, определена ее область действия описания — та часть текста программы, где допустимо использование этой величины.
Если величина описана во вступлении к программе, ее можно использовать в любом алгоритме этой программы (но не в исполнителях!).
Если величина описана во вступлении к исполнителю, то ее можно использовать в любом алгоритме этого исполнителя.
Если величина описана в заголовке алгоритма, то ее можно использовать в теле этого алгоритма, а также в заголовке — после этого описания.
Пример:
алг цел сумма элементов таблицы (цел длина, целтаб таблица[1:длина])
Если переменная описана в теле алгоритма, то ее можно использовать только в теле этого алгоритма после места описания. Такие величины называются промежуточными.
Пример:
алг
нач
· п := 1 | Так нельзя!
· цел п
· п := 1 | Так можно
кон
Выражение в языке КуМир описывает новое значение, полученное из уже известных значений с помощью предусмотренных в языке КуМир операций.
Примеры:
В КуМир-программе выражения могут появляться в:
Операции в языке КуМир — это:
Для каждой операции известны:
В зависимости от типов аргументов и результата, базовые операции делятся на следующие классы:
Каждой базовой операции соответствует свой символ. В некоторых случаях приходится применять составной символ, состоящий из двух обычных символов:
Полный список базовых операций и их описания приведены в ??.
Типом выражения называется тип результата операции, которая выполняется последней при вычислении этого выражения.
Типы всех подвыражений должны быть согласованы с типами аргументов выполняемых операций.
Пример.
Рассмотрим выражение
гамма(x) - дельта(2y+1, z),
где гамма и дельта — описанные в программе алгоритмы-функции. Это должны быть функции числового типа. Если обе они имеют тип цел, то и все выражение имеет тип цел. В противном случае выражение имеет тип вещ.
Операция вырезки из строки имеет 3 аргумента: лит строка, цел старт, цел финиш и результат: лит вырезка. В отличие от базовых операций, аргументы вырезки из строки имеют разные типы. Поэтому способ записи вырезки из строки отличается от способа, принятого для базовых операций.
Пример:
лит строка, вырезка
строка = ”строка”
вырезка := строка[3:5]
утв вырезка = ”рок”
В выражениях языка КУМИР можно использовать:
. У каждой функции есть имя, для нее фиксировано количество параметров, параметры перенумерованы. Для каждого параметра функции и ее результата фиксированы их типы; тип результата называется типом функции.
Вызов функции с именем имя_функции и аргументами, заданными выражениями
X1, …, Xn записывается так:
имя_функции(X1, …, Xn).
−1/x2 | -1/x**2 |
a/bc | a/(b*c) |
a/bc | a/b*c или (a/b)*c |
222n | 2**(2**(2**n)) |
xyz | x**(y**z) |
−b+√b2−4ac/2a | (-b+sqrt(b**2-4*a*c))/(2*a) |
√p(p−a)(p−b)(p−c) | sqrt(p*(p-a)*(p-b)*(p-c)) |
a+b+c/2 | (a+b+c)/2 |
√a2+b2−2abcosγ | sqrt(a**2+b**2-2*a*b*cos(gamma)) |
ad+bc/bd | (a*d+b*c)/(b*d) |
sinαcosβ+cosαsinβ | sin(alfa)*cos(beta)+cos(alfa)*sin(beta) |
В этом разделе описаны 5 видов простых команд (из 6 допустимых в языке КуМир):
Еще один вид простых команд — команды описания величин — представлен в ??.
Команда присваивания предназначена для изменения значения простых переменных и элементов таблиц и имеет общий вид <ВЕЛИЧИНА> := <ВЫРАЖЕНИЕ>, где
Тип выражения должен быть согласован с типом величины.
Примеры:
n := 0
m := n
m := m+1
m := 2*длин(t)+div(n,2)
c := (x+y)/2
площадь:=a*b*sin(C)/2
d:=b**2-4*a*c
x[1]:=(-b+sqrt(d))/(2*a)
a[i]:=2*a[i-2]+a[i-1]
b[i,j]:=-b[j,i]
Все переменные должны быть описаны, а их типы — согласованы с типами операций и их аргументов.
В языке КуМир существует три команды контроля выполнения: утв, дано, надо.
Формат вызова:
утв <ЛОГ ВЫРАЖЕНИЕ>
дано <ЛОГ ВЫРАЖЕНИЕ>
надо <ЛОГ ВЫРАЖЕНИЕ>
Все три команды выполняются так. Проверяется условие. Если условие не соблюдается (равно нет), то КуМир прекращает выполнение алгоритма и сообщает, что возник отказ. Если же условие соблюдается, то выполнение алгоритма нормально продолжается так, как если бы команды контроля не было вовсе.
Команда дано проверяет условие в начале выполнения алгоритма, команда надо — в конце выполнения алгоритма, а командой утв можно проверить условие в процессе выполнения алгоритма.
Пример 1:
алг абс (рез вещ х)
дано х<=0
надо х>=0
нач
· х := -х
кон
Пример 2:
алг вещ кв (вещ х)
нач
· вещ к
· к := х*х
· утв к>=0
· знач := к
кон
Формат вызова:
вывод выражение-1, …, выражение-N
Каждое выражение может быть либо арифметическим, логическим или текстовым выражением, либо командой перехода на новую строку (ключевое слово нс). Значения выражений выводятся последовательно в строку области ввода-вывода и разделяются пробелом. Когда строка полностью заполнена, автоматически происходит переход к началу новой строки.
Когда окно ввод-вывода полностью заполнено, последующие команды вывода будут сдвигать содержимое окна вверх, вытесняя верхние строки окна.
Пример:
алг
нач
· нц 5 раз
· · вывод ”Hello!”, нс
· кц
кон
Формат вызова:
ввод имя-1, …, имя-N
При выполнении этой команды КуМир выводит курсор в окно ввода-вывода и ждет, пока пользователь введет соответствующие значения. По окончании введенные значения присваиваются указанным величинам. В качестве имени величины можно указать имя простой величины или имя элемента таблицы с указанием значений индексов. Признаком конца ввода служит нажатие на клавишу Enter. При вводе нескольких чисел они отделяются друг от друга запятой или пробелом.
Пример:
алг
нач
· целтаб т[1:10]
· цел ц, а
· ввод ц
· нц для а от 1 до ц
· · ввод т[а]
· кц
· нц для а от 1 до ц
· · вывод т[а], нс
· кц
кон
Вызов алгоритма-процедуры является отдельной командой алгоритмического языка и имеет вид:
Пример 1:
алг
нач
· подпр
кон
алг подпр
нач
· вывод ”Мы в подпрограмме”, нс
кон
Пример 2:
нач
· сумма(2.4, 7.6)
кон
алг сумма(вещ а, вещ б)
нач
· вывод ”Сумма = ”, а+б, нс
кон
Команда выход используется для выхода из цикла или для окончания работы текущего алгоритма. Если команда выход выполняется внутри цикла, то выполнение продолжается с первой команды после тела этого цикла. Если команда выход используется во вложенных циклах, то завершается самый внутренний цикл. Если команда выход выполняется вне циклов, то она приводит к завершению выполнения текущего алгоритма.
Пример:
алг
нач
· нц
· · нц
· · · вывод ”–2–”, нс
· · · выход
· · кц
· · вывод ”–1–”, нс
· · выход
· кц
· вывод ”–0–”, нс
· выход
· вывод ”–F–”, нс
кон
При выполнении этой программы будет напечатано:
–2–
–1–
–0–
–F–
Общий вид команды:
если условие
· то серия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
все
Общий вид команды:
выбор
· при условие 1 : серия 1
· при условие 2 : серия 2
· ...
· при условие n : серия n
· иначе серия n+1
все
Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать:
выбор
· при условие_1 : серия_1
· при условие_2 : серия_2
· ...
· при условие_n : серия_n
все
КуМир сначала проверяет условие 1. Если оно соблюдается, то КуМир выполняет команды из серии 1, после чего переходит к выполнению команд, записанных после слова все. В противном случае КуМир делает то же самое с условием 2 и командами из серии 2 и т.д.
Команды, записанные после слова иначе, выполняются в том случае, когда не соблюдено ни одно из условий.
В команде выбор всегда выполняется не более одной серии команд, даже если несколько условий окажутся истинными. Выполнение команды выбор заканчивается после того, как найдено первое (по порядку следования) условие со значением да (и выполнена соответствующая серия команд).
Пример 1:
выбор
· при а>1: i:=i+1
· при а<0: j:=j-1
· иначе t:=i; i:=j; j:=t
все
Пример 2:
выбор
· при а[i]>1000 : b[i]:=3; c[i]:=3.141
· при а[i]>100 :
· · b[i]:=2; c[i]:=3.14
· при а[i]>10 :
· · b[i]:=1
· · c[i]:=3.14
все
В примере 2 при a[i]=1812 будут выполнены присваивания: b[i]:=3; c[i]:=3.141.
Общий вид цикла для:
нц для i от i1 до i2
· тело_цикла
кц
Здесь i — величина типа цел (она называется параметром цикла), а i1 и i2 — целые выражения, т. е. выражения типа цел. При выполнении цикла для тело цикла выполняется последовательно для i=i1, i=i1+1, …, i=i2. Если i1=i2, то тело цикла выполнится один раз для i=i1. Если же i1>i2, то тело цикла не выполнится ни разу.
Общий вид цикла для с шагом:
нц для i от i1 до i2 шаг i3
· тело_цикла
кц
Если шаг i3 (который также должен быть целым выражением) равен положительному числу d, то тело цикла будет выполняться последовательно для i=i1, i=i1+d, i=i1+2d, …до тех пор, пока значение i удовлетворяет условию i ≤ i2.
Если же шаг i3 отрицателен и равен −d, то тело цикла будет выполняется последовательно для i=i1, i=i1−d, i=i1−2d, …до тех пор, пока значение i удовлетворяет условию i ≥ i1.
Пример 1:
нц для j от 1 до длин(t)
· t1[j]:=t[длин(t)+1-j]
кц
Пример 2:
нц для i от 1 до 100 шаг 2
· а[i+1]:=a[i]
кц
Пример 3:
нц для i от 100 до 1 шаг -2
· а[i]:=a[i-1]
кц
В теле любого из циклов может быть использована команда выход (см. ??). При выполнении этой команды содержащий ее цикл будет завершен.
Общий вид цикла пока:
нц пока условие
· тело_цикла
кц
При выполнении цикла пока КУМИР циклически повторяет следующие действия:
Если же условие соблюдается, то КуМир выполняет тело цикла, снова проверяет условие и т.д.
Пример:
нц пока а<10
· а := а + 1
кц
В теле цикла может быть использована команда выход (см. ??). При выполнении этой команды содержащий ее цикл будет завершен.
Общий вид цикла до тех пор:
нц
· тело_цикла
кц_при условие
При выполнении цикла до тех пор КуМир циклически повторяет следующие действия:
Пример:
нц
· x := 2*x
кц_при x>100
Условие окончания цикла может быть добавлено в любую команду повторения, например, в цикл N раз.
Пример:
нц 5 раз
· ввод x, y, z
· вывод нс, ”Координаты:”, x, y, z
кц_при x+y+z>100
В теле любого из циклов может быть использована команда выход (см. ??). При выполнении этой команды содержащий ее цикл будет завершен.
Общий вид цикла N раз:
нц N раз
· тело_цикла
кц
Здесь N — целое выражение, задающее число повторений. При выполнении алгоритма последовательность команд циклически повторяется указанное число раз.
Пример:
нц 4 раз
· ввод x, y, z
· вывод нс, ”Координаты:”, x, y, z
кц
В теле цикла может быть использована команда выход (см. ??). При выполнении этой команды содержащий ее цикл будет завершен.
Общий вид цикла:
нц
· тело_цикла
кц
Пример:
нц
· а := а + 1
· если а>100 то выход все
кц
КуМир не проверяет, встречается ли в теле цикла команда выход. Если такой команды нет, то цикл нц-кц будет выполняться до бесконечности.
Синтаксис: алг лит цел_в_лит(цел x)
Возвращает строковое представление x.
Пример:
алг
нач
цел а
· лит б
· а := 5
· б := цел_в_лит(а)
· вывод б
кон
Синтаксис: алг лит вещ_в_лит(вещ x)
Возвращает строковое представление x.
Пример:
алг
нач
· вещ а
· лит б
· а := 5.9999
· б := вещ_в_лит(а)
· вывод б
кон
Синтаксис: алг вещ лит_в_вещ(лит СТРОКА, рез лог УСПЕХ)
Переводит строку СТРОКА в вещественное представление. Если СТРОКА содержит только вещественное число, то в УСПЕХ записывается Да и алгоритм возвращает вещественное значение, иначе в УСПЕХ записывается Нет и алгоритм возвращает значение 0.
Пример:
алг
нач
· лит а
· вещ б
· лог усп
· а := ”5.9999”
· б := лит_в_вещ(а, усп)
· вывод б, ” ”, усп
кон
Синтаксис: алг цел лит_в_цел(лит СТРОКА, рез лог УСПЕХ)
Переводит строку СТРОКА в целочисленное представление. Если СТРОКА содержит только целое число, то в УСПЕХ записывается Да и алгоритм возвращает целосисленное значение, иначе в УСПЕХ записывается Нет и алгоритм возвращает значение 0.
Пример:
алг
нач
· лит а
· цел б
· лог усп
· а := ”5”
· б := лит_в_цел(а, усп)
· вывод б, ” ”, усп
кон
Синтаксис: алг вещ sqrt(вещ x)
√x — квадратный корень из x (x ≥ 0).
Пример:
вещ х
алг
нач
· ввод х
· х := sqrt (х)
· вывод ”корень квадратный из числа х равен ”, х
кон
Синтаксис: алг вещ abs(вещ x)
Абсолютная величина вещественного числа x (|x|).
Пример:
вещ а, б
алг
нач
· ввод а,б
· а := а+б
· а := abs(а)
· вывод”Модуль суммы чисел равен ”, а
кон
Синтаксис: алг цел iabs(цел x)
Абсолютная величина целого числа x (|x|)
Пример:
цел а, б
алг
нач
· ввод а,б
· а := iabs(а)
· б := iabs(б)
· вывод а+б
кон
Синтаксис: алг цел sign(вещ x)
Знак числа x (-1, 0 или 1):
Пример:
цел а, б
алг
нач
· ввод а
· б := sign(а)
· если б=-1
· · то вывод а, ”<=0”
· · иначе
· · · если б=0
· · · · то вывод а, ”=0”
· · · · иначе вывод а, ”>=0”
· · · все
· все
кон
Синтаксис: алг вещ sin(вещ x)
Синус x
Пример:
вещ х
алг
нач
· ввод х
· х := sin (х)
· вывод ”синус угла х равен ”, х
кон
вещ x, y
алг
нач
· вывод ”угол x=”
· ввод x
· y := 2*sin(x)*cos(x)
· вывод ”sin2x = ”, y
кон
Синтаксис: алг вещ cos(вещ x)
Косинус x
Пример:
вещ х
алг
нач
· ввод х
· х := cos (х)
· вывод ”косинус угла х равен ”, х
кон
вещ x, y
алг
нач
· вывод ”угол x=”
· ввод x
· y := 2*sin(x)*cos(x)
· вывод ”sin2x = ”, y
кон
Синтаксис: алг вещ tg(вещ x)
Тангенс x
Пример:
вещ х
алг
нач
· ввод х
· х := tg (х)
· вывод ”тангенс угла х равен ”, х
кон
Синтаксис: алг вещ ctg(вещ x)
Котангенс x
Пример:
вещ х
алг
нач
· ввод х
· х := ctg (х)
· вывод ”котангенс угла х равен ”, х
кон
Синтаксис: алг вещ arcsin(вещ x)
Арксинус x
Пример:
вещ х
алг
нач
· ввод х
· х := arcsin (х)
· вывод ”арксинус числа х равен ”, х
кон
Синтаксис: алг вещ arccos(вещ x)
Арккосинус x
Пример:
вещ х
алг
нач
· ввод х
· х := arccos (х)
· вывод ”арккосинус числа х равен ”, х
кон
Синтаксис: алг вещ arctg(вещ x)
Арктангенс x
Пример:
вещ х
алг
нач
· ввод х
· х := arctg (х)
· вывод ”арктангенс числа х равен ”, х
кон
Синтаксис: алг вещ arcctg(вещ x)
Арккотангенс x
Пример:
вещ х
алг
нач
· ввод х
· х := arcctg (х)
· вывод ”арккотангенс числа х равен ”, х
кон
Синтаксис: алг вещ ln(вещ x)
Натуральный логарифм x
Пример:
вещ а,б,с
алг
нач
· ввод а, б
· с := а+б
· с := ln(с)
· вывод ”Натуральный логарифм от суммы чисел ”,а,” и ”,б,” равен ”,с
кон
Синтаксис: алг вещ lg(вещ x)
Десятичный логарифм x
Пример:
вещ а,б,с
алг
нач
· ввод а, б
· с := а+б
· с := lg(с)
· вывод ”десятичный логарифм от суммы чисел ”,а,” и ”,б,” равен ”,с
кон
Синтаксис: алг вещ exp(вещ x)
e в степени числа x (e≈ 2.718281828459045…)
Пример:
вещ x
цел а
алг
нач
· ввод а
· x := exp(а)
· вывод ”число е в степени ”, а, ” равно ”, x
кон
Синтаксис: алг вещ min(вещ x, вещ y)
Минимум из чисел x и y
Пример:
вещ а,б,с1, с2
алг
нач
· ввод а, б
· с1 := max(а,б)
· с2 := min(а,б)
· вывод с1, нс
· вывод с2, нс
кон
Синтаксис: алг вещ max(вещ x, вещ y)
Максимум из чисел x и y
Пример:
вещ а,б,с1, с2
алг
нач
· ввод а, б
· с1 := max(а,б)
· с2 := min(а,б)
· вывод с1, нс
· вывод с2, нс
кон
Синтаксис: алг цел mod(цел x, цел y)
Остаток от деления x на y (x,y - целые, y > 0))
Пример:
цел а, б, x, y
алг
нач
· ввод а, б
· x := div(а,б)
· y := mod(а,б)
· вывод ”а/б=”, x, ” с остатком ”, y
кон
Синтаксис: алг цел div(цел x, цел y)
Частное от деления x на y (x, y - целые, y > 0)
Пример:
цел а, б, x, y
алг
нач
· ввод а, б
· x := div(а,б)
· y := mod(а,б)
· вывод ”а/б=”, x, ” с остатком ”, y
кон
Синтаксис: алг цел int(вещ x)
Целая часть x: максимальное целое число, не превосходящее x
Пример:
вещ а,б
алг
нач
· ввод а
· б := int(а)
· вывод ”Целая часть ”, а, ” равна ”, б
кон
Синтаксис: алг вещ rnd(вещ х)
Случайное число от 0 до x: при последовательных вызовах этой функции получается последовательность случайных чисел, равномерно распределенных на [0,х].
Пример:
алг Построение последовательности случайных вещественных чисел
нач
· вещ таб а [1:10]
· цел л
· вещ б
· ввод б
· нц для л от 1 до 10
· · а[л] := rnd(б)
· кц
· нц для л от 1 до 10
· · вывод а[л], ” ”
· кц
кон
Синтаксис: алг вещ МВЕЩ
Самое большое вещественное число, которое можно использовать в языке КуМир. МВЕШ≈ 1.797693× 10308 (это немного меньше, чем 21024). Величина этого числа определяется способом представления чисел в современных компьютерах и примерно одинаковая в большинстве современных языков программирования.
Пример:
алг Самое большое вещественное число в КуМире
нач
· вещ щ
· щ := МВЕЩ
· вывод ’Самое большое вещественное число в КуМире – это число ’, щ
кон
Синтаксис: алг цел МЦЕЛ
Самое большое целое число, которое можно использовать в языке КуМир. МЦЕЛ=231−1. Величина этого числа определяется способом представления чисел в современных компьютерах и примерно одинаковая в большинстве современных языков программирования.
Пример:
алг Самое большое целое число в КуМире
нач
· цел ц
· ц := МЦЕЛ
· вывод ’Самое большое целое число в КуМире – это число ’, ц
кон
Синтаксис: алг цел длин(лит S)
Возвращает количество символов в строке S.
Пример:
алг
нач
· лит а
· цел ц
· вывод ”введите строку”
· ввод а
· ц := длин(а)
· вывод ц
кон
Синтаксис: алг цел код(сим c)
Возвращает номер символа c в таблице КОИ-8r. (стандарт RFC 1489).
Пример:
алг
нач
· сим а
· цел ц
· вывод ”введите символ”
· ввод а
· ц := код(а)
· вывод ц
кон
Синтаксис: алг сим символ(цел N)
Возвращает символ, соответствующий номеру N в таблице КОИ-8r (стандарт RFC 1489).
Пример:
алг
нач
· цел а
· сим б
· ввод а
· б := символ(а)
· вывод б
кон
Синтаксис: алг цел юникод(сим c)
Возвращает номер символа c в таблице Юникода.
Синтаксис: алг сим символ2(цел N)
Возвращает символ, соответствующий номеру N в таблице Юникода.
Пример:
алг
нач
· цел а
· сим б
· ввод а
· б := символ2(а)
· вывод б
кон
Синтаксис: алг пауза
Приостанавливает выполнение программы. Переводит Кумир в режим паузы.
Пример:
алг
нач
· вещ а, б, с
· а := 1
· б := 2
· пауза
· с := а+б
· вывод с
кон
Синтаксис: алг стоп
Останавливает выполнение программы.
Пример:
алг
нач
· вещ а, б, с
· а := 1
· б := 2
· вывод ”Остановка перед вычислением значения С”
· стоп
· с := а+б
· вывод с
кон
Синтаксис: алг цел время
Возвращает текущее время (местное) в сотых долях секунды, прошедшее с начала суток.
Пример:
алг
нач
· цел мс
· мс := время
цел с, ч, м
· с := div(мс, 100)
· м := div(с, 60)
· ч := div(м, 60)
· с := с - м*60
· м := м - ч*60
· вывод ”Текущее время: ”, ч, ” часов, ”, м, ” минут ”, с, ” секунд”
кон
Синтаксис: алг цел клав
Ожидает нажатия на клавишу и возвращает её код.
Пример:
алг
нач
· цел а
· вывод ”Нажмите клавишу...”, нс
· а := клав
· вывод ”Код нажатой клавиши равен ”, а, нс
кон
Коды клавиш, имеющих символьное представление, совпадают с Юникодами соответствующих клавиш. Коды клавиш, не имеющих символьное представление, приведены в таблице:
Клавиша | Код | Клавиша | Код |
Tab | 16777217 | Alt | 16777251 |
Backspace | 16777219 | Caps Lock | 16777252 |
Enter | 16777220 | Num Lock | 16777253 |
Enter на цифровом блоке клавиатуры | 16777221 | Scroll Lock | 16777254 |
Insert | 16777222 | F1 | 16777264 |
Delete | 16777223 | F2 | 16777265 |
Pause | 16777224 | F3 | 16777266 |
Print Screen | 16777225 | F4 | 16777267 |
Home | 16777232 | F5 | 16777268 |
End | 16777233 | F6 | 16777269 |
Стрелка влево | 16777234 | F7 | 16777270 |
Стрелка вверх | 16777235 | F8 | 16777271 |
Стрелка вправо | 16777236 | F9 | 16777272 |
Стрелка вниз | 16777237 | F10 | 16777273 |
Page Up | 16777238 | F11 | 16777274 |
Page Down | 16777239 | F12 | 16777275 |
Shift | 16777248 | F13 | 16777276 |
Ctrl (на Macintosh - Command) | 16777249 | F14 | 16777277 |
Meta — логотип Windows (на Macintosh - Control) | 16777250 | F15 | 16777278 |
Система команд исполнителя <<Робот>> включает:
Командам влево, вправо, вверх, вниз, закрасить соответствуют алгоритмы-процедуры языка КуМир. Остальным командам соответствуют алгоритмы-функции, тип этих функций указан ниже.
Команда | Описание |
влево | Перемещает робота на одну клетку влево. Если слева стена, выдает отказ. |
вправо | Перемещает робота на одну клетку вправо. Если справа стена, выдает отказ. |
вверх | Перемещает робота на одну клетку вверх. Если сверху стена, выдает отказ. |
вниз | Перемещает робота на одну клетку вниз. Если снизу стена, выдает отказ. |
закрасить | Делает клетку, в которой находится робот, закрашенной. |
Пример:
алг
нач
· вправо
· вниз
· влево
· вверх
· закрасить
кон
Команда | Описание |
лог слева свободно | Возвращает да, если робот может перейти влево, иначе — нет. |
лог справа свободно | Возвращает да, если робот может перейти вправо, иначе — нет. |
лог сверху свободно | Возвращает да, если робот может перейти вверх, иначе — нет. |
лог снизу свободно | Возвращает да, если робот может перейти вниз, иначе — нет. |
лог слева стена | Возвращает да, если слева от робота находится стена, иначе — нет. |
лог справа стена | Возвращает да, если справа от робота находится стена, иначе — нет. |
лог сверху стена | Возвращает да, если сверху от робота находится стена, иначе — нет. |
лог снизу стена | Возвращает да, если снизу от робота находится стена, иначе — нет. |
лог клетка закрашена | Возвращает да, если клетка закрашена, и нет, если клетка не закрашена. |
лог клетка чистая | Возвращает нет, если клетка закрашена, и да, если клетка не закрашена. |
Команда | Описание |
вещ радиация | Возвращает значение радиации в клетке, где находится робот. |
вещ температура | Возвращает значение температуры в клетке, где находится робот. |
Система команд исполнителя <<Чертежник>> включает 6 команд:
Команда | Описание |
опустить перо | Переводит чертежника в режим перемещения с рисованием. |
поднять перо | Переводит чертежника в режим перемещения без рисования. |
сместиться на вектор (вещ dX, dY) | Перемещает перо на dX вправо и dY вверх. |
сместиться в точку (вещ x, y) | Перемещает перо в точку с координатами (x, y). |
установить цвет (лит цвет) | Устанавливает цвет пера. Допустимые цвета: ”черный”, ”белый”, ”красный”, ”оранжевый”, ”желтый”, ”зеленый”, ”голубой”, ”синий”, ”фиолетовый”. |
надпись (вещ ширина, лит текст) | Выводит на чертеж текст, начиная от текущей позиции пера. В конце выполнения команды перо находится на правой нижней границе текста (включая отступ после последнего символа). Ширина знакоместа измеряется в условных единицах чертежника. Это ширина буквы вместе с отступом после нее. |
Примечание 1. Поднять (опустить) перо — сокращение от полной формы <<сделать так, чтобы перо оказалось поднятым (опущенным)>>. Если перо, например, поднято, то после выполнения команды поднять перо, оно просто останется поднятым.
Примечание 2. Если в момент вызова функции установить цвет значение ее аргумента не совпадает ни с одним из перечисленных 9 допустимых цветов, то выдается отказ и выполнение программы прерывается.
Пример:
алг
нач
· установить цвет(”красный”)
· опустить перо
· сместиться на вектор(1,1)
· надпись(0.5, ”Рис. 1”)
кон
Система команд исполнителя <<Файлы>> включает:
Создает новый пустой файл в текущем каталоге ввода-вывода.
Открывает файл на чтение и присваивает ему идентификатор.
Открывает файл на запись и присваивает ему идентификатор.
Открывает файл на запись байтов и присваивает ему идентификатор.
Открывает файл на чтение байтов и присваивает ему идентификатор.
Перемещает текущую позицию чтения в начало файла, позволяя прочитать открытый файл заново.
Закрывает файл после того, как он был открыт на чтение или на запись.
Оператор. Ввод данных из файла c идентификатором ключ. О формате входных данных см. ??.
Оператор. Вывод данных в файл с идентификатором ключ. Работает аналогично оператору вывод.
Считывает один байт из файла. Если чтение невозможно — значение байт устанавливается равным -1.
Записывает один байт в файл.
Проверяет, достигнут ли конец файла.
Проверяет, существует ли файл в текущем каталоге ввода-вывода.
Удаляет файл в текущем каталоге ввода-вывода.
Пример:
использовать Файлы
алг
нач
· если не существует файл(”a.txt”)
· · то создать файл(”a.txt”)
· все
· цел r, i
· открыть на запись(”a.txt”, r)
· ф_вывод r, 5
· закрыть(r)
· открыть на чтение(”a.txt”, r)
· утв не конец файла(r)
· ф_ввод r, i
· утв i=5
· начать чтение(r)
· ф_ввод r, i
· утв i=5
· закрыть(r)
· вывод (i=5), нс
кон
Файл, который читается с помощью оператора ф_ввод, должен иметь следующую структуру:
1, 2,1.1,2.2, 'с',"т" да, нет, "один" 'два'
Исполнитель Робот существует в некоторой обстановке — прямоугольном поле, разбитом на клетки, между которыми могут стоять стены. Обстановка, в которой находится Робот, называется текущей обстановкой Робота. Кроме того, определена еще одна обстановка Робота — стартовая обстановка. Стартовая обстановка используется при управлении Роботом из программы, подробнее см. ниже ??.
Робот может передвигаться по полю, закрашивать клетки, измерять температуру и радиацию. Робот не может проходить сквозь стены, но может проверять, есть ли рядом с ним стена. Робот не может выйти за пределы прямоугольника (по периметру стоит <<забор>>). Подробно система команд Робота описана ниже.
Удобно представлять себе, что Робот существует всегда. В частности, когда начинается сеанс работы системы Кумир, Робот уже существует и для него определены и текущая, и стартовая обстановка (они совпадают).
Обстановки Робота могут храниться в файлах специального формата (расширение .fil).
В Кумире есть специальное устройство — Окно наблюдения за Роботом (иногда для краткости будем говорить Окно Робота). В этом окне всегда видна текущая обстановка Робота, включая положение самого Робота. Подробнее об окне Робота см. ??.
Кумир-программа, управляющая Роботом, должна начинаться со строки использовать Робот (подробнее — см. описание языка Кумир). При выполнении этой строки Кумир помещает Робота в некоторую заранее определенную обстановку. Эта обстановка и называется стартовой обстановкой Робота.
Таким образом, в каждый момент сеанса работы системы Кумир определены две обстановки Робота — текущая и стартовая. Текущая обстановка в любой момент показывается в окне наблюдения за Роботом.
В системе Кумир есть средства, с помощью которых Школьник может задать нужную ему стартовую обстановку. Это можно сделать двумя способами. Один способ — загрузить стартовую обстановку из указанного Школьником файла. Другой способ — редактировать существующую стартовую обстановку с помощью специального редактора стартовых обстановок.
Редактор стартовых обстановок является частью системы Кумир. Редактирование обстановки происходит в отдельном окне (окно редактирования стартовой обстановки), структура этого окна аналогична структуре окна наблюдения Робота. Редактируемая обстановка может быть сохранена в файл или непосредственно использоваться в качестве стартовой обстановки. Подробнее редактирование стартовых обстановок описано в ??.
В систему Кумир входит пульт ручного управления Роботом (см. ??). Этот пульт позволяет вручную управлять Роботом — выдавать команды, входящие в систему команд Робота. Использовать пульт можно в любое время, кроме тех временных промежутков, когда происходит непрерывное выполнение Кумир-программы. В частности, Роботом можно управлять с пульта в те моменты, когда выполнение Кумир программы приостановлено (система Кумир находится в состоянии <<Пауза>>).
Окно наблюдения за Роботом создается в момент начала сеанса работы системы Кумир и доступно до окончания сеанса. Во время сеанса работы окно может находиться в одном из двух состояний — видимо или скрыто (с отображением на панели задач или без).
В верхнем правом углу окна Робота (в правом конце заголовка) есть две стандартные кнопки: _ (скрыть с отображением в панели задач) и X (скрыть без отображения в панели задач).
В момент запуска Кумира окно наблюдения за Роботом скрыто. Чтобы сделать окно видимым, Школьник должен нажать кнопку <<Показать окно Робота>> на панели инструментов. Кроме того, окно Робота автоматически становится видимым при запуске на выполнение программы, содержащей строку использовать Робот (см. ??). Окно Робота становится видимым на том же месте, где оно находилось, когда его последний раз сделали скрытым.
При окончании сеанса Работы система запоминает положение окна наблюдения за Роботом на экране. При следующем запуске окно появится на том же самом месте.
На окне наблюдения за Роботом нет ни меню, ни кнопок. Таким образом, в окне Робота есть только полоса заголовка и рабочее поле.
В левой части заголовка есть надпись <<Робот>>, за которой следует имя файла, в котором хранится стартовая обстановка. Если такого файла нет, то вместо имени файла выводится слово <<временная>>. Правила, определяющие привязку стартовой обстановки к определенному файлу, описаны ниже.
Размер окна наблюдения полностью определяется размерами стартовой обстановки. Пользователь не может менять размер окна с помощью стандартных средств, например, манипулируя мышью.
Обстановка Робота представляет собой прямоугольное поле, окруженное забором и разбитое на клетки. Говоря более точно, обстановка описывается следующими величинами:
Примечание. Нижняя возможная температура — это (приблизительно) абсолютный ноль (0 градусов по шкале Кельвина). Верхняя температура — это температура, при которой горят книги (451 градус по Фаренгейту).
Система команд Робота позволяет ему определить значения всех этих характеристик клетки (см. ниже).
Кроме того, в клетке могут быть пометки, видимые наблюдателю, но не доступные <<органам чувств>> Робота:
Частью описания обстановки является и положение Робота. Как и для чтения пометок, у Робота нет средств, чтобы определить свои координаты.
Изображение текущей обстановка всегда полностью помещается в рабочем поле окна наблюдения за Роботом (см. ??).
Фон рабочего поля — зеленый. Закрашенные клетки — серые. Между клетками — тонкие черные линии. Стены (в том числе — <<забор>> по периметру прямоугольника обстановки) изображаются толстыми желтыми линиями.
В клетке рабочего поля окна наблюдения Робот изображается ромбиком. Температура и радиация не показываются, они могут быть только измерены Роботом. Символы в клетках, наоборот, видны человеку, но Робот не умеет их считывать.
Текущая обстановка изменяется при выполнении команд Робота, подаваемых из программы или с пульта (см. ??). Изменения текущей обстановки тут же отображаются в окне наблюдения за Роботом, если оно в этот момент видимо.
Выполнение команд Робота влияет на текущую обстановку следующим образом. Команды перемещения и закрашивания отображаются в текущей обстановке естественно.
Если команда перемещения выдает отказ, то текущая обстановка не изменяется, а на экране (если он виден) соответствующий угол Робота закрашивается красным. Красный цвет снимается:
Команды проверок и измерения радиации и температуры на текущую обстановку не влияют.
Кроме того, в двух случаях происходит принудительное помещение Робота в стартовую обстановку (текущая обстановка становится равной стартовой). Это происходит:
Стартовая обстановка — это обстановка, в которую Робот будет помещен при запуске Кумир-программы, т. е. при выполнении команды использовать Робот (см. ??).
Со стартовой обстановкой связана специальная настройка Кумира — текстовая строка, в которой записано имя некоторого файла, содержащего описание обстановки Робота. Как правило, в качестве стартовой настройки используется обстановка, хранящаяся в этом файле. Исключения описаны в ??.
Увидеть имя файла стартовой обстановки (для краткости — ФСО) можно с помощью вкладки <<Каталоги и файлы>> окна настройки. Как можно менять имя ФСО описано в ??.
Как правило, стартовая обстановка — это обстановка, хранящаяся в ФСО.
Из этого правила есть два исключения. Одно из них связано с тем, что файл с указанным именем может не содержать корректного описания обстановки или вообще не существовать. Этот случай рассмотрен ниже в ??.
Другое исключение связано с возможностью упрощенного внесения временных изменений в стартовую обстановку. А именно, если в данный момент в Кумир-системе происходит редактирование файла обстановки, то текущее промежуточное значение этой редактируемой обстановки считается временной стартовой обстановкой. Говоря неформально, действия пользователя по подготовке обстановки имеют приоритет над содержимым строки с именем ФСО.
Во время редактирования в заголовке окна наблюдения за Роботом вместо имени файла написано <<временная>>. Имя файла восстанавливается в окне Робота в момент окончания редактирования. Редактирование обстановок подробно описано в ??.
Школьник может изменить имя файла стартовой обстановки (ФСО) двумя способами:
Состояние окна наблюдения (видимо/скрыто) при этих действиях не меняется.
При изменении строки с именем ФСО, стартовая обстановка становится текущей (Робот помещается в новую стартовую обстановку), что отражается в окне наблюдения за Роботом.
Изменение строки с именем ФСО происходит с помощью стандартного диалога выбора файла. При этом в качестве каталога по умолчанию предлагается каталог текущего файла стартовой обстановки. Если выбранный файл существует и содержит корректную обстановку, то эта обстановка считается стартовой. Она же объявляется текущей, т. е. Робот помещается в эту обстановку. Это отображается в окне наблюдения Робота. Имя файла стартовой обстановки (без директории) показывается в левой части заголовка окна наблюдения за Роботом.
Если с чтением обстановки из выбранного файла возникают какие-либо проблемы, то стартовой (и одновременно текущей) объявляется стандартная обстановка, хранящаяся в Кумире. В левой части заголовка окна наблюдения за Роботом появляется предупреждающая надпись — <<нет файла>>. Никакой файл с обстановкой при этом не создается, а предыдущее значение имени файла стартовой обстановки не изменяется.
Редактор стартовых обстановок Робота — составная часть системы Кумир, его работа подробно описана в ??. Он позволяет добавлять и удалять стены, менять размеры обстановки и т. п.
В меню этого редактора есть команда <<Сохранить как стартовую>>. По этой команде вызывается стандартный диалог сохранения. По умолчанию предлагается текущее имя файла стартовой обстановки. При корректном выполнении операции сохранения новое имя файла стартовой обстановки запоминается, а сохраненная обстановка объявляется стартовой. При этом новая стартовая обстановка одновременно становится текущей, т. е. показывается в окне наблюдения за Роботом.
Примечание. В заголовке окна наблюдения (до окончания редактирования стартовой обстановки) остается слово <<временная>>, а не имя файла.
Система Кумир при окончании сеанса работы запоминает в своих настройках значение имени файла со стартовой обстановкой. При новом запуске система Кумир проверяет, существует ли файл с запомненным именем. Если файл существует и содержит корректную обстановку, то эта обстановка считается стартовой. Она же объявляется текущей, т. е. Робот помещается в эту обстановку. Это отображается в окне наблюдения Робота. Имя файла стартовой обстановки (без директории) показывается в левой части заголовка окна наблюдения за Роботом.
Если с чтением обстановки из выбранного файла возникают какие-либо проблемы, то стартовой (и одновременно текущей) объявляется стандартная обстановка, хранящаяся в Кумире. В левой части заголовка окна наблюдения за Роботом появляется предупреждающая надпись — <<нет файла>>. Никакой файл с обстановкой при этом не создается, а предыдущее значение имени файла стартовой обстановки не изменяется.
При инсталляции системы Кумир в качестве имени ФСО записывается полное имя файла со стандартной обстановкой, который входит в поставку Кумира (10x16.fil). Стандартной обстановкой является пустая обстановка максимально допустимого размера 10*16 с Роботом в левом верхнем углу. Слово <<пустая>> означает, что
Редактор стартовых обстановок можно использовать:
Запуск редактирования производится с помощью команды <<Редактировать стартовую обстановку>> меню <<Инструменты>>. По этой команде появляется специальное окно — окно редактирования стартовой обстановки (для краткости — окно редактирования). Выход из состояния редактирования стартовой обстановки производится с помощью соответствующей кнопки на окне редактирования или по команде <<Выход>> меню <<Обстановка>> на этом окне.
Свойства окна редактирования аналогичны свойствам окна наблюдения за Роботом. Основных отличий – два:
После включения режима редактирования строка <<Редактировать стартовую обстановку>> становится неактивной, т. е. редактировать одновременно две обстановки нельзя.
В полосе меню окна редактирования стартовой обстановки имеется выпадающее меню <<Обстановка>> и команда <<Помощь>>.
По команде «Помощь» появляется окно с текстом:
Редактирование обстановки |
Поставить/убрать стену — щелкнуть по границе между клетками. Закрасить/сделать чистой клетку — щелкнуть по клетке. Поставить/убрать точку — щелкнуть по клетке при нажатой клавише Ctrl. Установить температуру, радиацию, метки — щелкнуть по клетке правой кнопкой. Переместить Робота — тащить мышью. Изменить размеры обстановки — команда <<Новая обстановка>> меню <<Обстановка>>. |
Меню «Обстановка» содержит следующие команды:
Перечислим кратко особенности выполнения каждой команды.
Открывается стандартная форма. Ввести число, превосходящее максимальный размер нельзя. Допустимые размеры: по высоте (строки) — от 1 до 10, по ширине (столбцы) – от 1 до 16.
Открывает для редактирования файл с обстановкой, для чего вызывается стандартная форма. О выборе директории по умолчанию — см. ниже ??.
Работает стандартно. В качестве недавних обстановок запоминаются все обстановки, к которым применялись операции сохранения и записи (см. ??).
Работает стандартно. Если обстановка была создана командой <<Новая обстановка>>, то спрашивает имя в стандартной форме. О выборе директории по умолчанию — см. ??.
Работает так же, как <<Сохранить>>, но с обязательным запросом имени файла сохранения. Эта команда не влияет на имя файла стартовой обстановки.
То же, что и <<Сохранить как…>>, но с изменением имени файла стартовой обстановки.
Создание PDF-файла с изображением окна (см. ??).
Cиноним — X на заголовке окна. Завершает редактирование; если последняя обстановка не сохранена — переспрашивает.
Основное редактирование обстановок Робота ведется в непосредственном режиме. Предусмотрены следующие операции непосредственного редактирования:
В последнем случае появляется форма, с помощью которой можно установить нужные значения.
В заключение этого раздела перечислим все операции с файлами обстановок (расширение .fil), предусмотренные в системе Кумир. Соответствующие им команды входят в меню «Робот» главного окна (команды «Сменить стартовую обстановку», «Сохранить обстановку в файл») и в меню «Обстановка» окна редактирования стартовой обстановки (команды «Открыть», «Сохранить», «Сохранить как…», «Сохранить как стартовую»).
Система Кумир запоминает файлы, к которым применялись указанные операции. Список последних таких файлов доступен с помощью команды «Недавние файлы» меню «Обстановка». Во всех перечисленных ниже операциях с файлами обстановок в качестве директории по умолчанию предлагается директория, использовавшаяся в последней по времени выполнения операции с файлами обстановок.
Пульт Робота располагается в отдельном окне и предназначен для управления Роботом. С помощью пульта Роботу можно передавать команды, Робот непосредственно выполняет эти команды.
Пользоваться пультом можно как при видимом окне наблюдения за Роботом, так и когда это окно скрыто (управление Роботом вслепую).
Пульт влияет только на поведение Робота внутри текущей обстановки и на отображение этого в окне наблюдения за Роботом. В частности, манипуляции с пультом Робота не влияют на свернутость/развернутость окна наблюдения за Роботом и обстановку в окне редактора стартовых обстановок.
Окно Пульта создается при запуске системы Кумир. Его свойства — такие же, как у окна наблюдения за Роботом и окна редактирования стартовой обстановки. В частности: при запуске системы Кумир пульт скрыт; пользователь не может менять размеры окна пульта. Чтобы сделать пульт видимым, нужно воспользоваться командой «Пульт Робота» меню «Робот» на главном окне системы Кумир или соответствующей этой строке инструментальной клавишей.
Связь Пульта с Роботом возможна всегда, кроме тех моментов, когда идет непрерывное выполнение программы, использующей Робот (т. е. программы, которая содержит строку использовать Робот). В частности, не имеет значения, идет редактирование стартовой обстановки или нет. О наличии связи свидетельствуют индикаторы в левом верхнем углу пульта.
По желанию пользователя, система Кумир может «перехватывать» команды, передаваемые с пульта, и вставлять их в текст Кумир-программы (см. ??).
На пульте Робота есть:
На панели есть:
Для передачи команды действия (вверх, вниз, вправо, влево, закрасить, радиация, температура) достаточно нажать соответствующую кнопку.
Чтобы передать команду проверки нужно последовательно нажать две кнопки: сначала — префикс («Стена/Закрашено» и «Свободно/Чисто»), а потом — основную (закрасить или одну из стрелок).
Примеры:
После того, как нажата кнопка-префикс, она меняет цвет. Если после кнопки-префикса нажата кнопка, отличная от стрелок и кнопки «закрасить», то исходная кнопка-префикс просто будет забыта.
На табло выводятся все команды, передаваемые Роботу вмести с реакцией Робота на эти команды. В ответ на команды перемещения в правой части появляется надпись «ОК» или «Отказ». Если с Роботом нет связи, на табло выдается «Нет связи».
Вывод на табло при первом включении Пульта в сеансе работы системы Кумир или после нажатия кнопки «Сброс табло» начинается с верхней строки. Когда табло заполнилось, начинается прокрутка и вывод идет в последнюю строку табло. Выше и ниже табло есть две кнопки для прокрутки его содержимого на одну строку вверх/вниз.
Для того, чтобы установить режим перехвата команд пульта Робота, предназначен пункт «Перехватывать команды пульта» меню «Редактирование» главного окна системы Кумир. Если такой режим установлен (это отображается пометкой в меню), то каждая передаваемая с пульта команда, отображается строкой в тексте Кумир-программы. Место вставки — после строки, в которой находится курсор; после вставки курсор переводится в конец вставленной строки.
При включенном режиме перехвата команд пульта возможно и обычное редактирование, в частности — изменение положения курсора с помощью мыши.
Для команд-действий (вверх, вниз, влево, вправо, закрасить) вставляется вызов соответствующего алгоритма-процедуры. Для других команд Робота, которым соответствуют алгоритмы-функции, вставляются команды вывода, например:
вывод ”Радиация: ”, радиация, нс
вывод ”Сверху стена: ”, сверху стена, нс
К Роботу относится меню «Робот» главного окна системы «Кумир» (полностью), а также две команды из других меню — «Редактировать стартовую обстановку» меню «Инструменты» (см. ??) и «Перехватывать команды пульта» меню «Редактирование» (см. ??). Меню Робот содержит следующие строки:
Для действий «Показать поле Робота» и «Пульт Робота» есть инструментальные кнопки на главной панели.
Ниже отдельно описана каждая из команд меню «Робот».
В этом разделе мы перечисляем все объекты и действия, которые относятся к исполнителю Робот.
Робот существует в определенной обстановке. Описания обстановок хранятся в текстовых файлах специального формата (формат .fil).
Обстановка, в которой находится Робот в данный момент (включая информацию о положении Робота), называется текущей обстановкой.
Кроме того, есть особая стартовая обстановка — обстановка, в которую принудительно помещается Робот в начале выполнения программы, использующей Робот.
Одна из настроек Робота содержит имя файла — файла стартовой обстановки. Как правило, стартовая обстановка — это обстановка, описанная в этом файле.
Из этого правила есть два исключения:
С Роботом связаны три окна:
Эти окна создаются в момент начала сеанса работы системы Кумир и могут использоваться одновременно и в любых сочетаниях. Каждое из окна независимо от остальных может быть видимо или скрыто.
Команды, которые делают видимым окно наблюдения за Роботом и пульт, находятся в меню «Робот». Для этих команд также есть инструментальные кнопки. Окно наблюдения за Роботом автоматически становится видимым в момент начала выполнения программы, использующей Робот.
Команда, которая делает видимым окно редактирования стартовой обстановки, находится в меню «Инструменты». Эта команда («Редактировать стартовую обстановку») одновременно включает режим редактирования стартовой обстановки. Выход из режима редактирования стартовой обстановки производится с помощью команды «Выход» меню «Обстановка» окна редактирования или с помощью кнопки этого окна. Во время режима редактирования строка «Редактировать стартовую обстановку» неактивна.
На окне наблюдения за Роботом нет собственного меню (это окно только для наблюдения). На окне редактирования есть меню (см. ??). Одна из команд этого меню («Сохранить как стартовую…») приводит к изменению текущей обстановки, что находит отражение в окне наблюдения за Роботом.
Команды, передаваемые с пульта, непосредственно влияют на текущую обстановку, а значит, и на окно наблюдения. Команды, передаваемые с пульта, могут отражаться в тексте редактируемой Кумир-программы. На окно редактирования стартовой обстановки команды пульта не влияют.
Текущая обстановка изменяется:
Робот принудительное помешается в стартовую обстановку:
Имя файла стартовой обстановки изменяется при выполнении следующих команд:
Стартовая обстановка изменяется:
Исполнитель Чертежник предназначен для построения рисунков, чертежей, графиков и т. д. на бесконечном во все стороны листе, ниже этот лист называется чертежным листом. На чертежном листе задана прямоугольная система координат, единицу измерения в этой системе координат будем называть единицей Чертежника (сокращенно – е. ч.).
Чертежник имеет перо, которое может подниматься, опускаться и перемещаться при выполнении команд КУМИР-программы (см. ??). При перемещении опущенного пера за ним остается след — отрезок от старого положения пера до нового.
Пользователь может видеть ограниченную часть листа через прямоугольное окно Чертежника. Пользователь может задать форму окна (<<альбомная>> или <<книжная>>, см. ниже), какую часть листа показывать и в каком масштабе.
Поведение Чертежника описывается состоянием его пера:
Школьник может работать с чертежным листом (очистить, сохранить, загрузить и т. п.) с помощью меню <<Чертеж>> на окне Чертежника, и управлять режимом работы самого окна с помощью меню <<Вид>> и кнопок на окне Чертежника.
Исполнитель Чертежник может выполнять следующие шесть команд (для каждой команды указан алгоритм языка КуМир).
Переводит чертежника в режим перемещения без рисования.
Переводит чертежника в режим перемещения с рисованием.
Замечание. Поднять (опустить) перо — сокращение от полной формы <<сделать так, чтобы перо оказалось поднятым (опущенным)>>. Если перо, например, поднято, то после выполнения команды поднять перо, оно просто останется поднятым.
Перемещает перо на dX вправо и dY вверх.
Перемещает перо в точку с координатами (x,y).
Устанавливает цвет чернил. Допускается 9 цветов: ”черный”, ”белый”, ”красный”, ”оранжевый”, ”желтый”, ”зеленый”, ”голубой”, ”синий”, ”фиолетовый”. Подробнее об использовании цветов в Чертежнике см. ??.
Каждый символ рисуется шрифтом Courier New. Позиция пера в момент начала рисования рассматривается как начальная точка базовой линии рисования. После окончания рисования перо должно оказаться на базовой линии рисования в правом конце промежутка, отделяющего нарисованный символ от следующего символа. При этом перо находится в том же режиме, что и перед выполнением команды.
Значение ширина_знакоместа задается в единицах чертежника. В соответствии со стандартом шрифта Courier New, параметр ширина_знакоместа полностью определяет все размеры всех символов, а также ширину расстояния между символами в слове.
В каждый момент работы Чертежника определен используемый цвет чернил. Чертежник рисует линии именно этим цветом. При загрузке Кумира устанавливается черный цвет. Пользователь может установить цвет специальной командой. Узнать из программы цвет чернил (как и другие элементы состояния пера Чертежника, см. ??) из программы нельзя. При рисовании на одном и том же месте разными цветами будет виден последний цвет.
Чертежник умееет рисовать девятью цветами. Эти цвета: ”черный”, ”белый”, ”красный”, ”оранжевый”, ”желтый”, ”зеленый”, ”голубой”, ”синий”, ”фиолетовый”. Никаких других цветов, кроме девяти указанных, в Чертежнике нет, никаких смешиваний цветов сделать нельзя.
Изменение цвета производится командой установить цвет (см. выше ??). У каждого цвета ровно одно допустимое наименование, записываемое строчными русскими буквами: ”черный”, ”белый”, ”красный”, ”оранжевый”, ”желтый”, ”зеленый”, ”голубой”, ”синий”, ”фиолетовый”. Цвета пишутся в кавычках — как литерные константы. Использование заглавных букв не допускается (как и при написании ключевых слов).
Школьник может задать аргумент команды установить цвет не только константой, но и произвольным текстовым выражением. При этом контроль допустимости цвета происходит на этапе выполнения.
В начале КУМИР-программы должна быть строка использовать Чертежник.
При выполнении команды использовать Чертежник чертежный лист приводится к начальному состоянию — пустому листу. Кроме того, окно Чертежника становится видимым, в нем изображается фрагмент пустого листа, соответствующий текущим настройкам окна. Если нужно, изображаются оси координат и сетка. Если пользователь желает вернуться к настройкам окна по умолчанию, он может сделать это вручную с помощью пункта <<Восстановить>> меню <<Вид>>.
Окно исполнителя чертежник в правом углу поля имеет две стандартные кнопки имеет _ и X со стандартной семантикой.
Окно создается в момент старта Кумира, но является невидимым. Окно становится видимым в следующих случаях:
Окно имеет стандартные размеры, зависящие от размеров экрана (см. ниже). Окно может иметь одну из двух стандартных форм, они называются ниже ГОР и ВЕРТ. ГОР — <<альбомная форма>>, ВЕРТ — <<книжная>>. Пользователь может менять форму окна с помощью меню <<Чертеж>> окна Чертежника (см. ниже). Размеры окна для каждой формы однозначно привязаны к размерам экрана. С помощью стандартных оконных средств (например, мыши) их менять нельзя.
Большую часть окна занимает рабочее поле, в котором изображается выбранный фрагмент листа рисования.
Над рабочим полем расположено раскрывающееся меню <<Чертеж>> (слева), правее него расположено раскрывающееся меню <<Вид>> и четыре кнопки, дублирующие некоторые функции меню <<Вид>> (см. ниже). Меню <<Чертеж>> работает с содержимым листа рисования; меню <<Вид>> определяет режим просмотра выбранного фрагмента листа.
При запуске системы Кумир в качестве участка просмотра устанавливается прямоугольник в горизонтальном положении шириной 7 единиц (от -3.5 до 3.5). Высота участка просмотра в единицах чертежника однозначно определяется указанной шириной и уже известными пропорциями рабочего поля (см. выше). Если перевести окно из горизонтального формата в вертикальный или наоборот, то положение центра окна на чертеже не изменится, а ширина станет равной около 3 единиц.
В окне Чертежника виден прямоугольный участок листа рисования. Его размеры в пикселях зависят от размера экрана и выбранной формы окна (ГОР или ВЕРТ). Установка видимого фрагмента чертежа при запуске системы Кумир описана выше.
В дальнейшем размер участка просмотра и его положение на листе устанавливаются с помощью команд меню <<Вид>> на окне Чертежника, кнопок на окне и манипуляций мышкой.
Часть чертежа, попавшая в область просмотра, может быть разлинована сеткой, линии сетки — серые. Рисовать ли сетку, и с какими параметрами пользователь может указывать (в произвольный момент работы Чертежника) с помощью команды <<Сетка>> меню <<Вид>>. При этом сетка всегда проходит через начало координат, а пользователь задает шаг сетки (при желании – различный по горизонтали и вертикали).
Подчеркнем, что параметры сетки задаются в условных единицах чертежника, т.е. сетка как бы «вморожена» в лист чертежа. Чертеж мысленно разлиновывается сеткой с указанными параметрами, а в окне показывается указанная часть чертежа (вместе с сеткой) и в указанном масштабе.
Примечание. Если сетка становится слишком мелкой, то чертеж <<замазывается>>, а процесс рисования — тормозится. Такое может произойти:
Чтобы избежать описанных выше явлений, Кумир отслеживает последствия запрашиваемых пользователем <<опасных>> действий. Если сетка становится слишком мелкой (расстояние между линиями менее трех пикселей), то сетка не рисуется и кнопка <<Сетка>> на панели окна чертежника (крайняя справа) становится красной.
Оси координат (если они попадают участок просмотра), показываются синими линиями. Оси координат всегда проходят через точку (0,0).
При нажатии правой кнопкой мыши на поле чертежа, на поле показываются координаты точки. Если отпустить кнопку, координаты исчезнут.
Меню содержит следующие пункты:
Очистить | Стирает с листа все нарисованные линии и надписи |
Сохранить | Сохранить чертеж в .ps файл |
Загрузить | Загрузить чертеж из .ps файла (поддерживаются только файлы, сохраненные чертежником) |
Печать в файл | Печатает в PDF-файл область просмотра чертежа (то, что видно в рабочем окне) |
Меню <<Вид>> управляет показом чертежа в рабочем поле окна Чертежника. Оно содержит такие пункты:
Управление масштабом показа выполняется с помощью пунктов Крупнее, Мельче, Весь чертеж, Восстановить. Кроме того, масштаб изображения можно менять мышью (см. ??).
Команды Крупнее и Мельче изменяют масштаб изображения (размер участка просмотра) в √2 ≈ 1.4 раз. Центр участка просмотра на листе рисования при этом не меняется.
Команда Весь чертеж выбирает в качестве область показа минимальную прямоугольную область нужной формы, в которой полностью помещается весь нарисованный чертеж. Масштаб изображения выбирается так, чтобы весь этот прямоугольник помещался в рабочем поле (с учетом небольших отступов со всех сторон).
Команда Восстановить восстанавливает параметры области просмотра, принятые по умолчанию (см. ??).
По команде Сетка возникает форма с двумя кнопками (<<Показывать сетку>> и <<Сетка квадратная>>) и двумя редактируемыми полями (<<Шаг X>> и <<Шаг Y>>). При этом, если выбрано <<Сетка квадратная>>, то изменение шага по одному из направлений сетки синхронно меняет шаг по другому направлению.
По команде Информация выводится табличка с информацией об области показа и состоянии пера.
По команде Сдвиги выпадает меню четырех направлений сдвигов. Кроме того, в этом меню есть текст, объясняющий, как двигать чертеж мышью и рекомендующий так и поступать.
Справа от меню <<Вид>> расположены 4 кнопки, соответствующие командам Крупнее, Мельче, Полный чертеж, Сетка меню <<Вид>>.
Для управления масштабом изображения можно использовать колесико мыши, а для управлением положением видимой области на листе — <<таскать лист>> в окне мышью при нажатой левой кнопке. Интерфейс этого — стандартный.
Система Кумир — позволяет создавать, отлаживать и выполнять программы на универсальном языке программирования Кумир.
Кумир — учебная система. Она сводит к минимуму «накладные расходы» на освоение, имеет развитую систему диагностики ошибок, средства, позволяющие ученику следить за выполнением программы и т. п. Ученик, никогда ранее не программировавший, может начать писать и выполнять алгоритмически относительно сложные программы через 1–2 часа после первого знакомства с Кумиром. В то же время система Кумир позволяет создавать достаточно большие и сложные программы (сотни строк).
Во время редактирования программы система Кумир после каждого перевода курсора на новую строку автоматически производит синтаксический разбор и сообщает о найденных ошибках.
Система Кумир включает графические исполнители Робот и Чертежник, которыми можно управлять из программы (а Роботом кроме того можно управлять вручную).
В каждый момент пользователь работает только с одной Кумир-программой, которую мы называем основной (в данный момент) программой системы Кумир. Текст основной программы представлен в рабочем окне (редакторе) системы Кумир (см. ??). Пользователь может прочитать текст основной программы из файла и поместить этот текст в редактор, редактировать текст и сохранить подготовленный текст в файл. Именно к основной программе относятся команды системы Кумир на выполнение.
Во время сеанса работы, кроме текста основной программы пользователю могут потребоваться и другие связанные с ней объекты — вспомогательные программы, написанные на Кумире (т. н. внешние исполнители), файлы с входными данными для основной программы и результатами ее работы, различные описания и т. п. Система Кумир имеет средства, облегчающая работу с этими вспомогательными объектами.
Язык Кумир — универсальный язык программирования, его прототипом послужил «школьный язык программирования» разработанный А. П. Ершовым в первой половине 80-х годов ХХ века. В дополнение к обычным для универсальных языков программирования возможностям, Кумир имеет средства управления исполнителями. Говоря неформально, исполнитель – это устройство, которое может выполнять определенный набор действий. Действие может совершаться над внешними для исполнителя данными (параметрами действия) и/или над присущими исполнителю внутренними для него данными (обстановкой исполнителя).
Примером исполнителя может служить Робот. Его обстановка — это прямоугольник, разделенный на квадратные клетки. Размер прямоугольника может варьироваться. Каждой клетке приписаны числовые характеристики — «температура» и «радиация». Робот может «измерять» значения этих величин, а также передвигаться по клеткам по горизонтали и вертикали (действия влево, вправо, вперед, назад). Границы между некоторыми клетками непроходимы для Робота (там стоят «стены»), Робот умеет выполнять проверки слева стена, справа стена и т. п. При попытке «пройти через стену» в любом направлении возникает ситуация отказ.
Робот — пример встроенного исполнителя. Пользователь также может описать свои исполнители на языке Кумир.
Работа пользователя в системе Кумир состоит в:
В зависимости от выполняемого действия, система Кумир находится в одном из четырех возможных состояний:
Состояние системы накладывает естественные ограничения на возможность выполнения различных действий. Например, во время выполнения программы нельзя изменять ее текст.
Смысл двух первых состояний ясен из их названия. В состояние АНАЛИЗ система переходит после окончания выполнения программы (нормального или аварийного). В этом состоянии пользователю доступны все рабочие сообщения программы — для просмотра и анализа. Любое действие по изменению текста программы сбрасывает эти рабочие сообщения и переводит систему в состояние РЕДАКТИРОВАНИЕ. В состояние ПАУЗА система переходит в случае остановки во время выполнения (при вызове встроенной функции пауза или после очередного шага при выполнении программы «по шагам», см. ??). Схема возможных переходов между состояниями выглядит так:
Запуск системы Кумир может быть выполнен стандартными средствами операционной системы:
Сохранять настройки системы Кумир не в реестре, а в INI-файле. Файл kumir.ini должен располагаться в директории путь. Если в указанной директории этого файла нет, то он создается, а настройки системы принимаются по умолчанию.
Сохранять настройки системы Кумир не в реестре, а в INI-файле имя_файла. Если этого файла не существует, то он создается, а настройки системы принимаются по умолчанию.
После запуска Кумира на экране появляется главное окно системы Кумир. Главное окно открывается при начале сеанса работы системы Кумир и закрывается в момент окончания сеанса работы. Иногда мы будем называть это окно рабочим, т. к. основная работа с системой происходит именно в этом окне.
Главное окно системы Кумир имеет стандартный вид. Вверху окна расположены заголовок окна, главное меню и панель инструментов; снизу — строка состояния. Заголовок окна содержит полное имя файла, из которого была загружена основная программа. Строка состояния используется для вывода сообщений, показа положения курсора, состояния системы и т. п.
При работе с окном доступны стандартные возможности управления окнами: окно можно свернуть-развернуть, сжать-растянуть, передвинуть и т. п. При закрытии окна его параметры (например, размеры и положение) запоминаются; при следующем запуске окно открывается с теми же параметрами.
Собственно окно разбито на две основные области: рабочую область (вверху) и область ввода-вывода (внизу).
В рабочей области располагается основная программа — программа, с которой в данный момент работает система Кумир. При этом рабочая область делится на две части: область программы (слева) и область построчных сообщений (справа). Область построчных сообщений аналогична «полям» в ученических тетрадях. В эту область при подготовке программы выводятся сообщения об ошибках, найденных в каждой строке, а при выполнении — сведения о значениях переменных, присваиваемых в строке.
Строки в области программы и области построчных сообщений синхронизированы: при прокрутке текста в области программы синхронно прокручиваются и сообщения. Относительные размеры (по горизонтали) области программы и «полей», а также размер области ввода-вывода по вертикали могут меняться пользователем.
Как по горизонтали, так и по вертикали виртуальный размер всех текстов не ограничены, поддерживается прокрутка.
Меню главного окна (главное меню системы Кумир) содержит восемь пунктов:
Каждому из этих пунктов соответствует свое раскрывающееся меню. Как правило, действие, для которого есть команда в главном меню, может быть выполнено также с помощью аккорда клавиш и/или инструментальной кнопки. В последнем случае нужный аккорд или пиктограмма приводятся рядом со строкой раскрывающегося меню.
Меню «Программа», «Редактирование» и «Вставка» описаны в ??; меню «Выполнение» — в ??; меню «Инструменты» — в ??. Отметим, что меню «Инструменты» не обязательно при первом знакомстве с системой Кумир.
Меню «Робот» и «Чертежник» посвящены встроенным графическим исполнителям системы Кумир, они описаны в отдельных руководствах.
Меню «Инфо» содержит сведения о версии системы Кумир, а также обеспечивает доступ к руководствам:
Все эти руководства подготовлены в виде pdf-файлов и могут просматриваться стандартными средствами как в ходе сеанса работы системы Кумир, так и автономно.
Инструментальные кнопки (за исключением двух) расположены на панели инструментов, которая расположена под главным меню. Эта панель разбита на области, разделенные двойным пунктиром; порядок областей соответствует пунктам главного меню. Каждая кнопка снабжена всплывающей подсказкой, текст подсказки совпадает с текстом в раскрывающемся меню.
Область снизу главного окна системы Кумир предназначена для отображения вывода программы и для ввода данных в программу.
После каждого выполнения программы в область ввода-вывода добавляется горизонтальная линия. Таким образом, выводы отдельных запусков программ всегда разделены между собой.
Каждый вывод программ содержит в своем начале и конце специальные строки. Подробнее об этом см. ??.
Слева снизу области ввода-вывода находятся две кнопки управления ею: <<Сохранить область вывода>> и <<Очистить область вывода>>. Они также дублируются в командах главного меню <<Инструменты>>. Кнопка очистки просто очищает область вывода, а при нажатии на кнопку сохранения появляется подменю:
Назначение этих пунктов интуитивно понятно. Вывод сохраняется в текстовый файл.
Меню «Программа» обеспечивает работу с файлами, в которых хранятся Кумир-программы, эти файлы имеют расширение .kum. Меню содержит следующие пункты:
Эти пункты имеют стандартный для современных оконных систем смысл. Для пункта «Сохранить» есть инструментальная кнопка.
Пункт <<Передать программу…>> предназначен для передачи текста программы из редактора Кумира в какой-либо дополнительный модуль (например, в конвертор).
Редактор системы Кумир обеспечивает стандартные средства редактирования текстов: ввод символов в режиме вставки или замены, удаление символов, выделение / копирование / вставку / удаление фрагмента текста, «откатку» (отмену последних действий) и «накатку» (отмену откатки), поиск по тексту и т. п. Эти действия можно выполнять как в непосредственном режиме, так и с помощью меню «Редактирование». Кроме того, редактор программ системы Кумир предоставляет пользователю дополнительные возможности, ориентированные на специфику языка Кумир.
Редактор программ всегда использует шрифт, в котором все символы имеют одинаковую ширину. Какой именно это будет шрифт и его размер, пользователь может установить на вкладке «Внешний вид» диалогового окна «Настройки». Подробнее об этом см. ??
Меню «Редактирование» содержит следующие строки:
Первые шесть строк имеют стандартный смысл и могут быть выполнены с помощью стандартных аккордов, для них (кроме «Найти и заменить») предусмотрены инструментальные кнопки.
Команда «Закомментировать» добавляет знак комментария | в начало каждой выделенной (хотя бы частично) строки. Команда «Раскомментировать» удаляет знак комментария из начала каждой выделенной строки. Если в начале выделенной строки не было знака комментария, то содержимое этой строки не меняется. Для команд «Закомментировать» и «Раскомментировать» предусмотрены инструментальные клавиши.
Команда «Перехватывать команды Пульта» связана с работой встроенного исполнителя Робот и позволяет вставлять в программу команды этого исполнителя. Подробнее — см. руководство по исполнителю Робот.
Строка «Макросы» описана ниже.
Строка «Макросы» меню «Редактирование» позволяет запомнить нужную пользователю последовательность действий (макрос), а затем выполнить всю эту последовательность, нажав клавишу Esc, а потом — еще одну (выбранную пользователем) клавишу. Каждому макросу, таким образом, соответствуют:
Кроме того, макросу соответствует условное имя, используемое при редактировании набора макросов. Определенные таким образом макросы сохраняются от сеанса к сеансу работы системы Кумир, т. е. пользователь может создать свою собственную библиотеку макросов.
Строка «Макросы» приводит к появлению вспомогательного меню, включающего 3 пункта:
После этих пунктов перечислены определенные в данный момент макросы. Для вызова макроса (вместо использования клавиши Esc и клавиши, определенной пользователем) достаточно щелкнуть левой кнопкой мыши по строке этого макроса.
Из двух первых пунктов вспомогательного меню «Макросы» в каждый момент активен лишь один. Обычно, активен пункт «Начать запись макроса», а после того, как запись макроса начата, активным становится пункт «Завершить запись макроса». После того, как начата запись макроса, система Кумир запоминает все действия пользователя по редактированию программы (одновременно эти действия выполняются). По сигналу об окончании записи макроса, появляется диалоговое окно, предлагающее определить для нового макроса имя и клавишу вызова.
Пункт «Список макросов» приводит к появлению вспомогательного окна, содержащего список определенных пользователем макросов. С помощью этого окна пользователь может удалить любой макрос или изменить его имя и клавишу.
Примечание. По техническим причинам в окне определения макросов клавиши обозначаются заглавными латинскими буквами. При вызове макроса раскладка клавиатуры (рус/лат, большие/маленькие буквы) не важна.
В этом меню описаны встроенные в систему макросы, обеспечивающие ввод в текст программы стандартных конструкций. Эти макросы не могут быть удалены или отредактированы или отредактированы пользователем. Меню «Вставка» позволяют вводить в текст программы следующие конструкции, для каждой конструкции указана соответствующая клавиша.
Редактор системы Кумир ориентирован именно на работу с программами на языке Кумир. Это проявляется различными способами, которые представлены ниже.
В редакторе Кумир есть возможность ввода символов из другой (русской или латинской раскладки), не переключая ее. Для этого необходимо вводить символы с нажатой клавишей "Alt".
Например, при активной русской раскладке клавиатуры, нажимая последовательно клавиши: ц, е, л, пробел, Alt+ш, получим текст: цел i.
Кроме того, для некоторых часто используемых последовательностей, зарезервированы сочетания клавиш (в любой раскладке клавиатуры):
Всякий раз, когда курсор переходит на новую строку, происходит синтаксический разбор программы (всей программы, а не только этой строки). При этом отмечаются ошибки (если они есть), а также происходит разметка текста программы, облегчающая работу с ним:
Сообщения об ошибках выводятся в область построчных сообщений (на «поля»), каждое сообщение — напротив той строки, в которой обнаружена ошибка. Место ошибки подчеркивается красным. Если в строке найдено более одной ошибки, то диагностируется только одна (первая слева).
Отступы изображаются точками в левой части строки, при синтаксическом разборе эти точки игнорируются. Размер отступа (количество позиций на один отступ) можно установить с помощью меню <<Настройки>> → <<Внешний вид>>.
Пользователь может поместить курсор в область отступов с помощью мыши или стрелок и передвигать его с помощью стрелок. Однако, для изменений эти области заблокированы. Если нажать какую-нибудь клавишу, отличную от стрелки, то произойдет следующее. Если это символьная клавиша, то курсор будет передвинут в первую «значащую» позицию строки и там будет выведен указанный символ. Клавиша Delete, не меняя текста, переведет курсор в первую значащую позицию строки. Клавиша BackSpace, не меняя текста, переведет курсор в конец предыдущей строки.
Различные компоненты текста программы выделяются цветом и видом шрифта (жирность, курсив). К таким компонентам относятся:
Рекомендуется также выводить курсивом латинские буквы в именах, чтобы не путать их с близкими по начертанию русскими буквами.
Пользователь сам может настроить выбор цветов и свойств шрифта, используя панель «Настройки>> → <<Подсветка кода». Для настройки цвета нужно щелкнуть правой кнопкой по цветовому квадратику.
Система Кумир облегчает пользователю ввод длинных имен алгоритмов. Если набрать несколько первых букв имени алгоритма, а потом аккорд Ctrl-пробел (кроме ОС Mac) или Tab (кроме ОС MS Windows), то:
В этом разделе мы напоминаем необходимые сведения о языке Кумир. Подробнее — см. описание языка Кумир.
Выполнение программы на языке Кумир состоит в том, что последовательно выполняются:
Выполнение программы происходит по шагам. Один шаг выполнения состоит в:
При развернутой записи программы каждый шаг выполнения соответствует одной строке программы. Однако, возможна и более компактная запись, при которой одна строка соответствует нескольким шагам выполнения.
Особую роль играют вызовы вспомогательных алгоритмов, представленных в текущей программе. По желанию пользователя, такой вызов может трактоваться как один шаг (крупный «ШАГ»). В то же время, можно и «войти внутрь вызова». Тогда очередной шаг (мелкий «шаг») будет состоять только в выполнении строки-заголовка, а выполнение всего вызова будет рассматриваться как цепочка мелких шагов.
Выполнение программы завершается нормально, если выполнена строка кон основного алгоритма или выполнены все строки вступления (если основного алгоритма нет). Кроме того, выполнение может завершиться аварийно — если произошла ошибка при выполнении одной из команд или пользователь остановил выполнение командой «Прервать» (см. ниже). В случае аварийного завершения работы программы в поле ввода-вывода выводится сообщение о причинах аварии.
Напомним, что система Кумир может находиться в таких состояниях:
Переход в состояние ВЫПОЛНЕНИЕ возможен из состояний:
Из состояния ВЫПОЛНЕНИЯ система Кумир может перейти в состояния:
Как правило, при выполнении Кумир-программы, на поля выводятся значения, присваиваемые величинам и результаты проверок. Вывод значений на поля производится при выполнении следующих команд:
Если в одной строке записано несколько команд, то на поля выводится несколько сообщений, разделенных точкой с запятой.
Первый алгоритм может иметь параметры, типами который являются простые величины (цел, вещ, лог, сим, лит).
Перед выполнением первого алгоритма, система КуМир запрашивает у пользователя значения всех арг и аргрез параметров, а после его выполнения - выводит значения рез и аргрез параметров.
Если алгоритм является функцией (то есть возвращает некоторое значение), то после его выполнения также выводится возвращаемое значение.
Пример.
алг лит алгоритм(вещ а, рез цел р)
нач
· р := int(а)
· знач := вещ_в_лит(а)
кон
Выполнению этого алгоритма соответствует программа:
алг
нач
· вещ а
· цел р
· цел результат_алгоритм
· вывод Введите а:
· ввод а
· результат_алгоритм := алгоритм(а, р)
· вывод Значение функции = , результат_алгоритм, нс
· вывод р = , р, нс
кон
алг лит алгоритм(вещ а, рез цел р)
нач
· р := int(а)
· знач := вещ_в_лит(а)
кон
Действия, связанные с выполнением основной программы, выполняются с помощью меню «Выполнение». В этом меню шесть пунктов. Для всех этих пунктов предусмотрены аккорды и инструментальные кнопки.
Начинает (при состоянии системы РЕДАКТИРОВАНИЕ или АНАЛИЗ) или продолжает (при состоянии системы ПАУЗА) выполнение программы. Программа выполняется «непрерывно», т. е. без остановок между шагами. Выполнение программы может быть завершено (нормально, аварийно или по команде «Прервать») или приостановлено, если в ходе выполнения будет выполняться команда ввод, либо одна из встроенных функций пауза или клав.
Во время выполнения на поля выводятся вычисляемые значения величин и условий (см. ??).
Аналогично «Выполнить непрерывно» — но без вывода на поля вычисляемых значений величин и условий.
Выполняет один ШАГ программы и переходит в режим ПАУЗА. Допускается использование в состояниях РЕДАКТИРОВАНИЕ, АНАЛИЗ, ПАУЗА. При запуске в состоянии РЕДАКТИРОВАНИЕ и АНАЛИЗ «проскакивает» строки использовать… и останавливается перед выполнением первой строки вступления основной программы (если оно есть) или перед выполнение алг-строки основного алгоритма. Выполнение команды вызова алгоритма-процедуры трактует как один ШАГ.
Аналогично команде «ШАГ». Отличие состоит в трактовке команды алгоритма-процедуры и вычислении значении алгоритма-функции (если они представлены в текущей программе). В этих случаях очередным шагом будет выполнение строки-заголовка вспомогательного алгоритма. В дальнейшем команда «шаг» или «ШАГ» приведет к выполнению очередного шага внутри выполняемого вспомогательного алгоритма.
Допускается использование только в состоянии ПАУЗА. Программа выполняется непрерывно, но останавливается на первой встретившейся строке кон (как будто перед ней стоит вызов функции пауза).
Прерывает выполнение программы. Допускается использование только в состояниях ВЫПОЛНЕНИЕ и ПАУЗА.
В начале выполнения программы в поле ввода вывода выводится строка-заголовок вида:
> 16:39:48 - Новая программа* - Начало выполнения
Далее под этой линией появляются все сообщения, выводимые программой (включая эхо ввода, см. ниже). В конце работы программы выводится итоговая строка и линия-разделитель. Предусмотрено 3 вида заключительной строки:
Для просмотра доступных алгоритмов следует выбрать пункт главного меню <<Инструменты>> → <<Алгоритмы пользователя>>. Появится окно <<Алгоритмы пользователя>>, отображающее древовидный список доступных алгоритмов. На первом уровне дерева находится список исполнителей, слева от каждого исполнителя отображается знак +. После нажатия на + раскрывается список алгоритмов этого исполнителя.
Исполнители разделяются на три вида, соответственно в списке они отображаются по разному:
При выделении алгоритма в списке отображается информация о нем в правой части окна <<Алгоритмы пользователей>>, а именно: описание алгоритма и формат вызова (синтаксис).
При выборе пункта главного меню <<Инструменты>> → <<Величины>> открывается окно с таблицей величин, состоящей из следующих столбцов:
Каждой строке таблицы соответствует одна величина (переменная) программы.
Эта таблица содержит все величины, используемые в программе. Таблица является актуальной в каждый момент времени — так, если выполнение программы проходит при открытой таблице величин, то данные в таблице обновляются динамически.
Язык Кумир поддерживает работу с исполнителями. Три исполнителя (Робот, Чертежник, Файлы) встроены в систему Кумир. Другие исполнители:
Для каждого встроенного, внешнего или сетевого исполнителя, который используется в программе, в начале этой программы должна быть строка вида:
использовать имя_исполнителя
Например:
использовать Робот
Все строки использовать… должны располагаться в начале программы. Если используется несколько исполнителей, то порядок следования строк использовать… значения не имеет.
При синтаксическом разборе программы строка использовать… сообщает о возможности вызова алгоритмов указанного исполнителя. При выполнении программы при обработке строки использовать… производятся необходимые для указанного исполнителя подготовительные действия. Например, для исполнителей, написанных на языке Кумир, выполняется вступление (см. описание языка), для исполнителя Робот делается видимым окно наблюдения за Роботом и т. п.
Для исполнителей, представленных в текущей программе, наличие строки использовать… не обязательно, наличие такой строки «подразумевается».
Напомним, что внешним мы называем исполнитель, написанный на языке Кумир, и не представленный в текущей программе. Внешние исполнители хранятся в файлах стандартного формата, используемого для хранения Кумир-программ. Один файл может содержать описания нескольких исполнителей.
Такие файлы могут быть предварительно подготовлены с помощью системы Кумир. Для этого нужно подготовить в редакторе текст, содержащий нужные исполнители, и сохранить его командой «Сохранить» или «Сохранить как…» (см. ??).
Для того, чтобы использовать внешний или сетевой исполнитель, его нужно предварительно зарегистрировать. В строке использовать… можно указывать только имя:
В конце сеанса работы системы Кумир список зарегистрированных исполнителей запоминается. В начале следующего сеанса этот список восстанавливается. Если в промежутке между сеансами файл с исполнителем был испорчен, или сетевой исполнитель стал недоступен, то соответствующий исполнитель не включается в список зарегистрированных. Никакое сообщение при этом не выдается.
Регистрация исполнителей производится с помощью строки «Исполнители» меню «Инструменты». При нажатии этой строки появляется вспомогательное окно «Регистрация исполнителей», позволяющее:
Окно содержит кнопки, позволяющие выполнить указанные действия, а также список уже зарегистрированных исполнителей. Для каждого из них указывается:
Размеры окна «Регистрация исполнителей», а также ширину каждого из его полей (имя исполнителя, файл) можно изменять с помощью мыши.
Чтобы зарегистрировать новый исполнитель, нужно нажать соответствующую кнопку на окне «Регистрация исполнителей», после чего в ходе стандартного диалога выбрать имя файла. Система Кумир анализирует выбранный файл и в отдельном окне «Выбор исполнителей» выводит список исполнителей, описанных в этом файле.
Пользователь отмечает в этом окне нужные ему исполнители (не обязательно все). Если в выбранном файле есть исполнитель, имя которого совпадает с именем уже зарегистрированного исполнителя, то об этом выводится предупреждение в поле «Сообщения». Регистрация такого исполнителя невозможна.
Выбранные исполнители регистрируются и показываются в списке зарегистрированных исполнителей окна «Регистрация исполнителей».
Размеры окна «Выбор исполнителей» и ширину его полей можно настраивать с помощью мыши.
Отмена регистрации исполнителя производится с помощью окна «Регистрация исполнителей». Для этого нужно нажать на имя нужного исполнителя в списке, а затем нажать кнопку «Удалить».
Меню «Инструменты» содержит следующие пункты:
Строка «Редактировать стартовую обстановку» относится к работе с исполнителем Робот и описана в соответствующем руководстве.
Ниже мы описываем строки «Новый текст» и «Настройки».
Открывает новое окно простого текстового редактора. Его можно использовать, например, для редактирования и просмотра входных и выходных файлов.
Диалоговое окно «Настройки» разделено на 6 закладок:
На окне имеется кнопка <<Восстановить настройки по умолчанию>>, позволяющая вернуться к первоначальным настройкам.
Здесь задается текст программы, появляющийся в редакторе при выборе пункта меню <<Программа>> → <<Новая программа>>. Кнопка <<Взять из редактора>> копирует текст, находящийся в текущий момент в редакторе.
Параметры внешнего вида редактора. Можно выбрать шрифт для редактора (моноширинный), его размер и начертание, ширину отступа в начале строк программы. Также можно указать, показывать ли номера строк в редакторе.
На этой закладке:
Здесь задаются параметры окна ввода-вывода системы: цвет области ввода и ширина строки вывода.
Здесь можно выбрать программу, используемую для просмотра документации по системе Кумир в формате PDF.
Ученик получает файл, содержащий заготовки вспомогательного алгоритма (его должен написать ученик), и основного алгоритма, с помощью которого ученик сможет проверить правильность своего алгоритма.
![]()
Figure 4.1: Программа с заготовками вспомогательного алгоритма
Строки, выделенные темным фоном, защищены от изменения. Это значит, что имя алгоритма и список его параметров заданы заранее, и их нельзя поменять. Для выполнения задания нужно написать тело вспомогательного алгоритма и убедиться в правильности его работы, подготовив и выполнив соответствующий основной алгоритм.
![]()
Figure 4.2: Реализация программы учеником
В задание включен также алгоритм тестирования вспомогательного алгоритма, подготовленного учащимся. Этот алгоритм по желанию учителя может быть скрыт от ученика (как на показано на предыдущих двух рисунках) или виден ему:
![]()
Figure 4.3: Тестирующий алгоритм @тестирование
После того, как вспомогательный алгоритм будет готов, полученную программу можно проверить. Для этого необходимо выбрать пункт меню Программа→Запустить тестирование либо нажать комбинацию клавиш Ctrl+T. Эти действия приводят к выполнению алгоритма с именем @тестирование.
Тестирование может завершиться с двумя исходами: Если ошибок не обнаружено, то после окончания тестирования в поле ввода-вывода запишется строка Тестирование завершено успешно. Если в процессе выполнения тестирующего алгоритма произойдет ошибка (это означает, что есть ошибка в алгоритме ученика), то тестирование прервется с сообщением Ошибка выполнения тестирования.
Возможна ситуация, когда в заготовке программы не предусмотрена возможность тестирования. В этом случает при выборе пункта меню Программа→Запустить тестирование либо при нажатии комбинации клавиш Ctrl+T появится сообщение Программа не содержит тестирующего алгоритма.
В состав поставки КуМир входит гипертекстовый учебник, тесно взаимодействующий с системой. Этот учебник можно использовать с помощью Web-браузера. Вызовы гипертекстового учебника производится из меню Инструменты→Гипертекстовый учебник.
Замечание. В настоящее время текст данного учебника находится в стадии разработки.
вверх | вниз |
вправо | влево |
закрасить |
вещ температура |
вещ радиация |
лог сверху стена | лог сверху свободно |
лог снизу стена | лог снизу свободно |
лог справа стена | лог справа свободно |
лог слева стена | лог слева свободно |
лог клетка закрашена | лог клетка чистая |
поднять перо |
опустить перо |
сместиться в точку (арг вещ x, y) |
сместиться на вектор (арг вещ x, y) |
установить цвет (арг стр ц) |
надпись (арг вещ ширина, арг лит стр) |
создать файл (арг лит имяФайла) |
открыть на чтение (арг лит имяФайла, арг цел ключ) |
открыть на запись (арг лит имяФайла, арг цел ключ) |
начать чтение (арг цел ключ) |
закрыть (арг цел ключ) |
ф_ввод ключ, … |
ф_вывод ключ, … |
лог конец файла (арг цел ключ) |
лог существует файл (арг лит имяФайла) |
прочесть байт (рез цел байт, арг цел ключ) |
записать байт (арг цел байт, арг цел ключ) |
алг имя (аргументы и результаты)
· дано условия применимости алгоритма
· надо цель выполнения алгоритма
нач
· тело алгоритма
кон
нц число повторений раз · тело цикла (последовательность команд) кц |
нц пока условие · тело цикла (последовательность команд) кц |
нц для i от i1 до i2 · тело цикла (последовательность команд) кц |
если условие · то серия 1 · иначе серия 2 все | если условие · то серия 1 все |
выбор условие · при условие 1: серия 1 · при условие 2: серия 2 · … · при условие n: серия n · иначе серия n+1 все | выбор условие · при условие 1: серия 1 · при условие 2: серия 2 · … · при условие n: серия n все |
утв условие | |
ввод имена величин | |
вывод тексты, имена величин, выражения, нс | |
выход | |
вызов: | имя алгоритма (аргументы и имена результатов) |
присваивание: | имя величины := выражение |
Таблицы: | |
целые цел вещественные вещ логические лог символьные сим литерные лит | целые цел таб вещественные вещ таб логические лог таб символьные сим таб литерные лит таб |
Пример описания: цел i, j, лит t, вещ таб а[1:50] |
исп имя
· вступление исполнителя:
· – описание общих величин исполнителя
· – команды для задания начальных значений общих величин и т. п.
· алгоритмы исполнителя
кон_исп
Название операции | Форма записи |
сложение | x + y |
вычитание | x - y |
умножение | x * y |
деление | x / y |
возведение в степень | x ** y |
Название функции | Форма записи |
корень квадратный | sqrt(x) |
абсолютная величина | abs(x) и iabs(x) |
знак числа (-1, 0 или 1) | sign(x) |
синус | sin(x) |
косинус | cos(x) |
тангенс | tg(x) |
котангенс | ctg(x) |
арксинус | arcsin(x) |
арккосинус | arccos(x) |
арктангенс | arctg(x) |
арккотангенс | arcctg(x) |
натуральный логарифм | ln(x) |
десятичный логарифм | lg(x) |
степень числа e (e ≈ 2.718181) | exp(x) |
минимум из чисел x и y | min(x,y) |
максимум из чисел x и y | max(x,y) |
остаток от деления x на y (x, y — целые) | mod(x,y) |
частное от деления x на y (x, y — целые) | div(x,y) |
целая часть числа x | int(x) |
случайное число в диапазоне от 0 до x | rnd(x) |
Название операции | Форма записи |
равно | x = y |
не равно | x <> y |
меньше | x<y |
больше | x>y |
меньше или равно | x<=y |
больше или равно | x>=y |
Название операции | Форма записи | Пример |
конъюнкция | и | а и б |
дизъюнкция | или | а или б |
отрицание | не | не а, завтра не будет дождь |
Название операции | Пример |
слияние | а+б |
вырезка | а[3:5] |
взятие символа | а[3] |
равно | а = б |
не равно | а <> б |
Функция | Форма вызова |
Строковое представление целого числа | цел_в_лит(х) |
Строковое представление вещественного числа | вещ_в_лит(х) |
Перевод строки в целое число | лит_в_цел(стр, успех) |
Перевод строки в вещественное число | лит_в_вещ(стр, успех) |
Длина строки | длин(стр) |
Код символа в таблице КОИ-8 | код(с) |
Символ таблицы КОИ-8 | символ(х) |
Код символа в таблице Юникод | юникод(с) |
Символ таблицы Юникод | символ2(х) |
Код нажатой клавиши | клав |
Текущее время в миллисекундах | время |
Приостановка выполнения программы | пауза |
Остановка выполнения программы | стоп |
|
|
This document was translated from LATEX by HEVEA.