Синтаксис:
алг лит цел_в_лит(цел x)
Описание:
Возвращает строковое представление x.
Пример:
алг
нач
цел а
лит б
а:=5
б:=цел_в_лит(а)
вывод б
кон
Синтаксис:
алг лит вещ_в_лит(вещ x)
Описание:
Возвращает строковое представление x.
Пример:
алг
нач
вещ а
лит б
а:=5.9999
б:=вещ_в_лит(а)
вывод б
кон
Синтаксис:
алг вещ лит_в_вещ(лит СТРОКА, рез лог УСПЕХ)
Описание:
Переводит строку СТРОКА в вещественное представление. Если СТРОКА содержит только вещественное число, то в УСПЕХ записывается Да и алгоритм возвращает вещественное значение, иначе в УСПЕХ записывается Нет и алгоритм возвращает значение 0.
Пример:
алг
нач
лит а
вещ б
лог усп
а:="5.9999"
б:=лит_в_вещ(а, усп)
вывод б, " ", усп
кон
Синтаксис:
алг цел лит_в_цел(лит СТРОКА, рез лог УСПЕХ)
Описание:
Переводит строку СТРОКА в целочисленное представление. Если СТРОКА содержит только целое число, то в УСПЕХ записывается Да и алгоритм возвращает целосисленное значение, иначе в УСПЕХ записывается Нет и алгоритм возвращает значение 0.
Пример:
алг
нач
лит а
цел б
лог усп
а:="5"
б:=лит_в_цел(а, усп)
вывод б, " ", усп
кон
Синтаксис:
алг вещ arccos(вещ x)
Описание:
Арккосинус x
Пример:
вещ х
алг
нач
ввод х
х:=arccos (х)
вывод"арккосинус числа х равен ", х
кон
Синтаксис:
алг вещ arcctg(вещ x)
Описание:
Арккотангенс x
Пример:
вещ х
алг
нач
ввод х
х:=arcctg (х)
вывод "арккотангенс числа х равен ", х
кон
Синтаксис:
алг вещ arcsin(вещ x)
Описание:
Арксинус x
Пример:
вещ х
алг
нач
ввод х
х:=arcsin (х)
вывод "арксинус числа х равен ", х
кон
Синтаксис:
алг вещ arctg(вещ x)
Описание:
Арктангенс x
Пример:
вещ х
алг
нач
ввод х
х:=arctg (х)
вывод "арктангенс числа х равен ", х
кон
Синтаксис:
алг вещ cos(вещ x)
Описание:
Косинус x
Примеры:
вещ х
алг
нач
ввод х
х:=cos (х)
вывод "косинус угла х равен ", х
кон
вещ x, y
алг
нач
вывод "угол x="
ввод x
y:=2*sin(x)*cos(x)
вывод "sin2x = ", y
кон
Синтаксис:
алг вещ ctg(вещ x)
Описание:
Котангенс x
Пример:
вещ х
алг
нач
ввод х
х:=ctg (х)
вывод "котангенс угла х равен ", х
кон
Синтаксис:
алг вещ sin(вещ x)
Описание:
Синус x
Примеры:
вещ х
алг
нач
ввод х
х:=sin (х)
вывод "синус угла х равен ", х
кон
вещ x, y
алг
нач
вывод "угол x="
ввод x
y:=2*sin(x)*cos(x)
вывод "sin2x = ", y
кон
Синтаксис:
алг вещ tg(вещ x)
Описание:
Тангенс x
Пример:
вещ х
алг
нач
ввод х
х:=tg (х)
вывод "тангенс угла х равен ", х
кон
Синтаксис:
алг вещ abs(вещ x)
Описание:
Абсолютная величина вещественного числа x (|x|)
Пример:
вещ а, б
алг
нач
ввод а,б
а:=а+б
а:=abs(а)
вывод"Модуль суммы чисел равен ", а
кон
Синтаксис:
алг цел div(цел x, цел y)
Описание:
Частное от деления x на y (x,y - целые, y > 0)
Пример:
цел а,б,x,y
алг
нач
ввод а,б
x:=div(а,б)
y:=mod(а,б)
вывод "а/б=",x," с остатком ", y
кон
Синтаксис:
алг вещ exp(вещ x)
Описание:
e в степени числа x (e=2.718281828459045...)
Пример:
вещ x
цел а
алг
нач
ввод а
x:=exp(а)
вывод "число е в степени ", а, " равно ", x
кон
Синтаксис:
алг цел iabs(цел x)
Описание:
Абсолютная величина целого числа x (|x|)
Пример:
цел а, б
алг
нач
ввод а,б
а:=iabs(а)
б:=iabs(б)
вывод а+б
кон
Синтаксис:
алг цел int(вещ x)
Описание:
Целая часть x: максимальное целое число, не превосходящее x
Пример:
вещ а,б
алг
нач
ввод а
б:=int(а)
вывод "Целая часть ", а, " равна ", б
кон
Синтаксис:
алг вещ lg(вещ x)
Описание:
Десятичный логарифм x
Пример:
вещ а,б,с
алг
нач
ввод а, б
с:=а+б
с:=lg(с)
вывод "десятичный логарифм от суммы чисел ",а," и ",б," равен ",с
кон
Синтаксис:
алг вещ ln(вещ x)
Описание:
Натуральный логарифм x
Пример:
вещ а,б,с
алг
нач
ввод а, б
с:=а+б
с:=ln(с)
вывод "Натуральный логарифм от суммы чисел ",а," и ",б," равен ",с
кон
Синтаксис:
алг вещ max(вещ x, вещ y)
Описание:
Максимум из чисел x и y
Пример:
вещ а,б,с1, с2
алг
нач
ввод а, б
с1:= max(а,б)
с2:= min(а,б)
вывод с1, нс
вывод с2, нс
кон
Синтаксис:
алг вещ min(вещ 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
кон
Синтаксис:
алг вещ rnd(вещ х)
Описание:
Случайное число от 0 до x: при последовательных вызовах этой функции получается последовательность случайных чисел, равномерно распределенных на [0,х]
Пример:
алг Построение последовательности случайных вещественных чисел
нач
вещ таб а [1:10]
цел л
вещ б
ввод б
нц для л от 1 до 10
а[л]:=rnd(б)
кц
нц для л от 1 до 10
вывод а[л], " "
кц
кон
Синтаксис:
алг цел sign(вещ x)
Описание:
Знак числа x (-1, 0 или 1)
-1, если x < 0;
0, если x = 0;
1, если x > 0;
Пример:
цел а, б
алг
нач
ввод а
б:=sign(а)
если б=-1
то вывод а, "<0"
иначе
если б=0
то вывод а, "=0"
иначе вывод а, ">0"
все
все
кон
Синтаксис:
алг вещ sqrt(вещ x)
Описание:
Квадратный корень из x (x≥0).
Пример:
вещ х
алг
нач
ввод х
х:=sqrt (х)
вывод "корень квадратный из числа х равен ", х
кон
Синтаксис:
алг цел код(сим c)
Описание:
Возвращает номер символа c в таблице КОИ-8r. (стандарт RFC 1489)
Пример:
алг
нач
сим а
цел ц
вывод "введите символ"
ввод а
ц:=код(а)
вывод ц
кон
Синтаксис:
алг цел длин(лит S)
Описание:
Возвращает количество символов в строке S.
Пример:
алг
нач
лит а
цел ц
вывод "введите строку"
ввод а
ц:=длин(а)
вывод ц
кон
Синтаксис:
алг сим символ2(цел N)
Описание:
Возвращает символ, соответствующий номеру N в таблице Юникода.
Пример:
алг
нач
цел а
сим б
ввод а
б:=символ2(а)
вывод б
кон
Синтаксис:
алг сим символ(цел N)
Описание:
Возвращает символ, соответствующий номеру N в таблице КОИ-8r. (стандарт RFC 1489)
Пример:
алг
нач
цел а
сим б
ввод а
б:=символ(а)
вывод б
кон
Синтаксис:
алг цел юникод(сим c)
Описание:
Возвращает номер символа c в таблице Юникода.
Синтаксис:
алг пауза
Описание:
Приостанавливает выполнение программы. Переводит Кумир в режим паузы.
Пример:
алг
нач
вещ а, б, с
а:=1
б:=2
пауза
с:=а+б
вывод с
кон
Синтаксис:
алг стоп
Описание:
Останавливает выполнение программы.
Пример:
алг
нач
вещ а, б, с
а:=1
б:=2
вывод "Остановка перед вычислением значения С"
стоп
с:=а+б
вывод с
кон
Синтаксис:
алг цел время
Описание:
Возвращает текущее время (местное) в миллисекундах.
Пример:
алг
нач
цел а
а := время
вывод а, нс
кон
Синтаксис:
алг цел клав
Описание:
Ожидает нажатия на клавишу и возвращает её код.
Пример:
алг
нач
цел а
вывод "Нажмите клавишу...", нс
а := клав
вывод "Код нажатой клавиши равен ", а, нс
кон
Коды клавиш, имеющих символьное представление, совпадают с Юникодами соответствующих клавиш.
Коды клавиш, не имеющих символьное представление, приведены в таблице:
Клавиша | Код |
Tab | 16777217 |
Backspace | 16777219 |
Enter | 16777220 |
Enter на цифровом блоке клавиатуры | 16777221 |
Insert | 16777222 |
Delete | 16777223 |
Pause | 16777224 |
Print Screen | 16777225 |
Home | 16777232 |
End | 16777233 |
Стрелка влево | 16777234 |
Стрелка вверх | 16777235 |
Стрелка вправо | 16777236 |
Стрелка вниз | 16777237 |
Page Up | 16777238 |
Page Down | 16777239 |
Shift | 16777248 |
Ctrl (на Macintosh - Command) | 16777249 |
Meta [логотип Windows] (на Macintosh - Control) | 16777250 |
Caps Lock | 16777252 |
Num Lock | 16777253 |
Scroll Lock | 16777254 |
F2 | 16777265 |
F3 | 16777266 |
F4 | 16777267 |
F5 | 16777268 |
F6 | 16777269 |
F7 | 16777270 |
F8 | 16777271 |
F9 | 16777272 |
F10 | 16777273 |
F11 | 16777274 |
F12 | 16777275 |
F13 | 16777276 |
F14 | 16777277 |
F15 | 16777278 |
Алгоритм - основная структурная единица языка КуМир. Программа на языке КуМир в простейшем случае состоит из нескольких алгоритмов, следующих один за другим. В общем случае перед первым алгоритмом может располагаться вступление - любая неветвящаяся программа. Например, это могут быть строки с комментариями, описаниями общих величин программы, командами присваивания им начальных значений и пр. После последнего алгоритма может располагаться одна или несколько конструкций исполнитель. Исполнители рассматриваются в отдельном разделе справки.
Конструкции алг-нач-кон должны располагаться вплотную друг к другу, между ними могут быть только пустые строки и строки с комментариями.
Схема программы без вступления и исполнителей:
алг первый алгоритм
|
кон
алг второй алгоритм
|
кон
...
алг последний алгоритм
|
кон
Выполнение такой программы состоит в выполнении первого алгоритма (остальные алгоритмы будут выполняться при вызове из первого).
Схема программы со вступлением и без исполнителей:
| вступление
алг первый алгоритм
|
кон
алг второй алгоритм
|
кон
...
алг последний алгоритм
|
кон
Выполнение такой программы состоит в выполнении вступления, а затем первого алгоритма.
Алгоритм на языке КуМир записывается так:
алг тип_алгоритма имя_алгоритма (описание_параметров)
дано условие_применимости_алгоритма
надо цель_выполнения_алгоритма
нач
¦ последовательность команд
кон
и состоит из заголовка (часть до служебного слова нач) и тела
алгоритма (часть между словами нач и кон). Алгоритм-функция
отличается от алгоритма-процедуры формой записи заголовка
(перед именем алгоритма надо указать тип возвращаемого
значения) и использованием специального служебного слова знач.
Для алгоритмов-процедур тип_алгоритма должен быть опущен. Для алгоритмов-функций на месте тип_алгоритма должен быть указан один из простых типов алгоритмического языка (вещ, цел и т.д.), определяющий тип значений, которые принимает данная функция.
Пример алгоритма-процедуры:
алг гипотенуза (вещ 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))
кон
Значение, которое должно стать результатом алгоритма-функции, надо присвоить особой величине с именем знач. Ее описанием служит заголовок алгоритма, но в остальном величина знач используется так же, как и любая другая промежуточная величина. Вызов алгоритма-функции производится путем указания его имени в выражении. Встретив это имя при вычислении выражения, КуМир выполняет алгоритм-функцию и затем подставляет в выражение вместо имени алгоритма значение величины знач.
Если алгоритм не имеет параметров (аргументов и результатов), то в строке алг записывается только имя алгоритма.
Если у алгоритма есть параметры, то их описание
заключается в круглые скобки после имени алгоритма в строке
алг. Описание содержит информацию о типах параметров и о том,
являются они аргументами или результатами:
арг - описания параметров-аргументов
рез - описания параметров-результатов
арг рез - описания параметров, которые одновременно
являются и аргументами, и результатами
После каждого из служебных слов арг, рез, арг рез должно располагаться одно или несколько описаний одной или нескольких величин. Имена величин и описания разделяются запятыми. Если в начале описания нет служебных слов арг, рез, арг рез, то предполагается, что первыми идут описания аргументов (арг).
В заголовке алгоритма
алг тест (рез цел m,n, цел i, арг вещ y)
служебное слово рез относится к описаниям цел m,n и цел i, а
параметр вещ y будет аргументом.
Запрещается писать в теле алгоритма команды, изменяющие значения параметров-аргументов (описанных как арг). Результаты алгоритма (рез, но не арг рез) в начале выполнения алгоритма принимают неопределенные значения.
После последнего алгоритма программы может идти одна или несколько конструкций исполнитель. Таким образом, в самом общем виде программа имеет такой вид:
вступление программы
первый алгоритм
второй алгоритм
...
последний алгоритм
первый исполнитель
второй исполнитель
...
последний исполнитель
Конструкция "исполнитель" на языке КуМир записывается так:
исп имя исполнителя
¦ вступление исполнителя
¦ алг первый алгоритм исполнителя
¦ ¦
¦ кон
¦ ...
¦ алг последний алгоритм исполнителя
¦ ¦
¦ кон
кон_исп
В алгоритмах программы и исполнителей могут использоваться алгоритмы программы и любых исполнителей. В алгоритмах исполнителя могут использоваться общие величины этого исполнителя, но не общие величины программы и других исполнителей. Во вступлении данного исполнителя могут использоваться алгоритмы программы и алгоритмы исполнителей, записанных по тексту выше этого исполнителя.
При выполнении программы вначале выполняется ее вступление, затем, по порядку, вступления всех исполнителей, а затем начинает выполняться первый алгоритм программы.
Разбиение строк редактора на канонические строки
Терминология.
Р-строки – строки редактора; к-строки – канонические строки.
1. Точка с запятой (ТЗ) приравнивается к переносу строки. Две ТЗ подряд или ТЗ в конце р-строки не считаются ошибкой, но пустая к-строка при этом не порождается.
Пример:
алг
нач
цел а; вещ в
а:=5; в:=0.1
кон
2. "Неявные" переносы строк вставляются в следующих случаях:
1) перед словами все, кц, кц_при
2) после ксимволов нач, выбор, нц (только в случае цикла «нц-кц»), раз
3) перед и после ксимволов то, иначе, при
4) перед ксимволом при и после двоеточия в при-строке
Пример:
алг цел модуль(вещ а)
нач
если а<0 то знач:=-а иначе знач:=а все
кон
1. Имя бывает у величин, таблиц, алгоритмов и исполнителей.
Имя – это последовательность слов, разделенных пробелами. Первое слово имени не должно начинаться с цифры. Ни одно из слов не должно быть ключевым словом.
Примеры имен: m, погода на завтра, Ноябрь 7, Седьмое ноября, дом_57бПримеры неправильных имен: 7е ноября (первое слово начинается с цифры); альфа-бета (‘-‘ – недопустимый символ); альфа или омега (или – ключевое слово)
Примечание. Ключевое слово не можно вставлять внутрь многословных «логических» имен.
2. Слово – это последовательность словарных символов. Разрешенными символами являются:
1) буквы (кириллические и латинские, прописные и строчные);
2) цифры;
3) два специальных знака: @ _
Примеры слов: бета123, 3кг, мама, Linux, КоСтЯ, kumir@infomir_ru
Примеры не слов: альфа-123, ма%ма, С++
3. Ключевые слова языка КУМИР – это: алг нач кон исп кон_исп дано надо арг рез аргрез знач цел вещ лог сим лит таб целтаб вещтаб логтаб симтаб литтаб и или не да нет утв выход ввод вывод нс если то иначе все выбор при нц кц кц_при раз пока для от до шаг
4. Многословные не-имена.
В отрицаниях логических величин, таблиц и алгоритмов функций ключевое слово не можно вставлять между словами многословного имени.
Пример:
лог л, завтра будет дождь
…
л := не завтра будет дождь | Правильно
л := завтра не будет дождь | Правильно
л := завтра будет не дождь | Правильно
л := завтра будет дождь не | Неправильно
л := не завтра не будет дождь | Неправильно
Первые три присваивания присваивают логической величине л значение, противоположное значению логической величины завтра будет дождь. Четвертая строка синтаксически неверна – не нельзя ставить после имени. Последняя строка также неверна: нельзя использовать более одного не.
1. Константы бывают целые, вещественные, логические, символьные и литеральные.
2. Целые константы бывают положительные и отрицательные. Целая константа по абсолютной величине должна быть строго меньше 2 в 31-й степени. Целые константы можно записывать в десятичной и 16-ричной форме. Шестнадцатеричные константы начинаются с символа $.
Примеры: 123, -100000, $100.
3. Вещественные константы бывают положительные и отрицательные. Вещественная константа по абсолютной величине должна быть строго меньше 2 в 1024-й степени. Вещественные константы можно записывать в десятичной и экспоненциальной форме. В качестве разделителя в экспоненциальной записи можно использовать любой вариант буквы ‘e’: строчный или прописной, латинский или кириллический.
Примеры: 1.23, -0.56, 1e+4, 5E-7.
4. Логическая константа – это одно из ключевых слов да, нет.
5. Символьные константы.
Допустимый символ – это любой символ, который можно набрать на стандартной клавиатуре.
Символьная константа имеет вид ‘c’ или "с" (здесь с – допустимый символ).
Примеры. ‘a’, “%”, ‘"’, "’".
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:Пример 2:
Формат вызова:
вывод выражение1, ..., выражениеN
Каждое выражение может быть либо арифметическим, логическим или литерным выражением, либо командой перехода на новую строку (ключевое слово нс). Значения выражений выводятся последовательно в строку и разделяются пробелом. Когда строка полностью заполнена, автоматически происходит переход к началу новой строки. Когда окно ввод-вывода полностью заполнено, последующие команды вывода будут сдвигать содержимое окна вверх, вытесняя верхние строки окна.
Пример:
алг
нач
нц 5 раз
вывод "Hello!", нс
кц
кон
Формат вызова:
ввод имя1, ... ,имяN
При выполнении этой команды КуМир выводит курсор в окно ввода-вывода и ждет, пока пользователь введет соответствующие значения. По окончании введенные значения присваиваются указанным величинам. В качестве имен величин можно указывать имена переменных простых типов или элементов таблиц (с указанием индексов). Признаком конца ввода служит нажатие на клавишу Enter. При вводе нескольких чисел они отделяются друг от друга запятой или пробелом.
Пример:
алг
нач
целтаб т[1:10]
цел ц, а
ввод ц
нц для а от 1 до ц
ввод т[а]
кц
нц для а от 1 до ц
вывод т[а], нс
кц
кон
Существует два вида вспомогательных алгоритмов в языке КуМир - процедуры и функции. Алгоритм-функция возвращает значение по окончании своего выполнения, алгоритм-процедура - нет.
Если в записи алгоритма X встречается вызов алгоритма Y, то Y называется вспомогательным для X, а X - основным по отношению к Y. Один и тот же алгоритм может выступать и в роли вспомогательного и в роли основного. Вызовом вспомогательного алгоритма-процедуры или алгоритма-функции называется запись, приказывающая КуМиру выполнить алгоритм для заданных аргументов и результатов.
Вызов алгоритма-функции состоит во включении записи
имя_алгоритма-функции (список_параметров_вызова)
в какое-нибудь выражение подходящего типа. Само это выражение
может быть записано в правой части команды присваивания, в
команде вывода, и т.д.
Вызов алгоритма-функции выполняется при вычислении содержащего
этот вызов выражения.
Пример 1:
алг
нач
вывод кв(2), нс
кон
алг цел кв(цел а)
нач
знач := а*а
кон
Вызов алгоритма-процедуры является отдельной командой
алгоритмического языка и имеет вид:
имя_алгоритма-процедуры или
имя_алгоритма-процедуры ( список_параметров_вызова )
Пример 2:
алг
нач
подпр
кон
алг подпр
нач
вывод "Мы в подпрограмме", нс
кон
Пример 3:
алг
нач
подпр(2.4, 7.6)
кон
алг сум(вещ а, вещ б)
нач
вывод "Сумма = ", а+б, нс
кон
Общий вид команды:
если условие
то серия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]<b[j] : i:=i+1
при а[i]>b[j] : j:=j+1
при а[i]=b[j] : i:=i+1; j:=j+1
все
Общий вид цикла для:
нц для 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+2*d, ... до тех пор, пока значение i удовлетворяет условию i≤i2.
Если же шаг i3 отрицателен и равен -d, то тело цикла будет выполняется последовательно для i=i1, i=i1-d, i=i1-2*d, ... до тех пор, пока значение 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, вещ y)
Описание:
Перемещает чертежника в точку с координатами (x, y).
Синтаксис:
алг сместиться на вектор(вещ dX, вещ dY)
Описание:
Перемещает чертежника в точку на dX вправо и dY вверх.
Синтаксис:
алг поднять перо
Описание:
Переводит чертежника в режим перемещения.
Синтаксис:
алг создать файл(лит имя_файла)
Описание:
Создает новый пустой файл c именем имя_файла в текущем каталоге ввода-вывода.
Пример:
алг
нач
лит имяФайла
имяФайла:="t1.txt"
создать файл(имяФайла)
...
Синтаксис:
алг открыть на чтение(лит имя_файла, рез цел ключ)
Описание:
Открывает файл имя_файла на чтение и присваивает ему идентификатор ключ
Пример:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
создать файл(имяФайла)
открыть на чтение(имяФайла, Ключ)
........
закрыть (Ключ)
Синтаксис:
алг открыть на запись(лит имя_файла, рез цел ключ)
Описание:
Открывает файл имя_файла на запись и присваивает ему идентификатор ключ
Пример:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
открыть на запись(имяФайла, Ключ)
......
закрыть(Ключ)
Оператор. Ввод данных из файла c идентификатором ключ.
Формат вызова: ф_ввод ключ, п1, п2, ...
Пример:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
создать файл(имяФайла)
открыть на чтение(имяФайла, Ключ)
вещ buf
ф_ввод Ключ, buf
закрыть(Ключ)
Оператор. Вывод данных в файл с идентификатором ключ.
Формат вызова: ф_вывод ключ, п1, п2, ...
Пример:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
создать файл(имяФайла)
открыть на запись(имяФайла, Ключ)
ф_вывод Ключ, "сумма чисел равна 5"
закрыть(Ключ)
Синтаксис:
алг лог конец файла(цел ключ)
Описание:
Проверяет, достигли ли мы конца файла с ключом ключ
Пример:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
создать файл(имяФайла)
открыть на чтение(имяФайла, Ключ)
цел n
n := 0
вещ таб a[1:100]
вещ buf
нц пока не конец файла(Ключ)
n := n+1
ф_ввод Ключ, buf
вывод buf, нс
a[n] := buf
кц
Синтаксис:
алг закрыть(цел ключ)
Описание:
Закрывает файл ключ после того, как он был открыт на чтение или на запись
Примеры:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
создать файл(имяФайла)
открыть на чтение(имяФайла, Ключ)
........
закрыть (Ключ)
алг
нач
цел Ключ
лит имяФайла
имяФайла := "t1.txt"
открыть на запись(имяФайла, Ключ)
......
закрыть(Ключ)
Синтаксис:
алг лог существует файл(лит имя_файла)
Описание:
Проверяет, существует ли файл с именем имя_файла в текущем каталоге ввода-вывода
Пример:
алг
нач
цел Ключ
лит имяФайла
имяФайла := "tmp.dat"
если не существует файл(имяФайла)
то создать файл(имяФайла)
все
Внешние исполнители системы Кумир описываются в файлах с расширением .kum. Эти файлы могут содержать описание одного или нескольких исполнителей:
первый исполнитель
второй исполнитель
...
последний исполнитель
Конструкция "исполнитель" на языке КуМир записывается так:
исп имя_исполнителя
¦ пролог
¦ алг первый алгоритм исполнителя
¦ ¦
¦ кон
¦ ...
¦ алг последний алгоритм исполнителя
¦ ¦
¦ кон
кон_исп
См. пример файла с описанием внешнего исполнителя.
исп Дроби цел числитель цел знаменатель алг сложить (цел ч1, з1, ч2, з2) нач числитель := ч1*з2+ч2*з1 знаменатель := з1*з2 сократить дробь(числитель, знаменатель) кон алг вычесть (цел ч1, з1, ч2, з2) нач числитель := ч1*з2-ч2*з1 знаменатель := з1*з2 сократить дробь(числитель, знаменатель) кон алг умножить (цел ч1, з1, ч2, з2) нач числитель := ч1*ч2 знаменатель := з1*з2 сократить дробь(числитель, знаменатель) кон алг разделить (цел ч1, з1, ч2, з2) нач числитель := ч1*з2 знаменатель := з1*ч2 сократить дробь(числитель, знаменатель) кон алг сократить дробь(цел а, цел б) нач цел нод если а<>0 и б<>0 то нод := НОД(а, б) числитель := div(а, нод) знаменатель := div(б, нод) иначе числитель := а знаменатель := б все кон алг цел НОД(цел а, б) нач цел нод1, нод2 нод1 := а нод2 := б нц пока не (нод1 = нод2) нц пока нод1 > нод2 нод1 := нод1 - нод2 кц нц пока нод1 < нод2 нод2 := нод2-нод1 кц кц |вывод "НОД = ", нод1, нс знач := нод1 кон алг вывод_дроби нач вывод числитель, " / ", знаменатель кон кон_исп
Для подключения исполнителя, который описан во внешнем файле с расширением .kum, следует:
Для использования зарегистрированного исполнителя необходимо в начале программы добавить строку использовать имя_исполнителя.
Пример программы, работающей с представленным исполнителем Дроби:
использовать Дроби
алг
нач
сложить(1,2,1,6)
вывод_дроби
кон
Результат выполнения: 2 / 3
Для отключения зарегистрированного исполнителя следует: