Справочник общедоступных задач (подпрограмм) на Глаголе

Расположение отделов с общедоступными задачами

\Глагол\Отделы\Обмен\
Читать.отд чтение из потока
Писать.отд запись в поток
Параметр.отд работа с параметрами запуска приложения
Вывод.отд вывод на экран
Ввод.отд ввод состояния клавиатуры и мышки
Файл.отд работа с файлами ОС
ОС.отд взаимодействие с ОС
\Глагол\Отделы\Числа\
Текст.отд преобразование чисел в (из) текст(а)
Матем.отд основные математические функции
Функц.отд специальные функции
Вект.отд вектора
Матр.отд матрицы
Компл.отд функции комплексной переменной
КомплВект.отд вектора комплексных чисел
КомплМатр.отд матрицы с комплексными числами
МатрВВ.отд ввод/вывод матриц и векторов
Собств.отд собственные значения и вектора
\Глагол\Отделы\Иное\
Знак.отд распознавание и преобразование знаков
Цепь.отд обработка цепочек знаков (ЦЕПЬ)
Ряд.отд упорядочивание и поиск в рядах
Набор.отд построение списков наборов (предок наборов)
Перевод.отд преобразование знаков и цепочек в латиницу и обратно
Асм.отд дополнительные задачи на ассемблере
\Глагол\Приложения\Поле\
Прямоуг.отд прямоугольная область на экране (предок для Поле и Надел)
Надел.отд область ввода и вывода (предок видимых наделов)
Поле.отд экранное поле с наделами для ввода и вывода текстовых данных
Метка.отд текстовая метка, потомок надела
Кнопка.отд кнопка, потомок надела

\Глагол\Отделы\Обмен\


ОТДЕЛ Читать;

Чтение из потока. Для предварительного чтения используется промежуточная память (ПП).

ЗАДАЧА Открыть(имяфайла-:ЦЕПЬ):Поток;
(* Открывает новый поток. *)

ЗАДАЧА Закрыть(п+:Поток);
(* Закрывает поток. *)

ЗАДАЧА Конец(п:Поток):КЛЮЧ;
(* Возвращает ВКЛ, если в потоке уже окончились данные. *)

ЗАДАЧА Позиция(п:Поток):ЦЕЛ;
(* Возвращает позицию, отсчитываемую от начала файла. *)

ЗАДАЧА СменаПозиции(п:Поток; поз:ЦЕЛ);
(* Меняет позицию чтения на <поз>, отсчитываемую от начала файла. *)

ЗАДАЧА Знак(п:Поток):ЗНАК;
(* Считывает знак из потока. *)

ЗАДАЧА Ячейки(п:Поток; память+:ВЯчейки; размер:ЦЕЛ);
(* Читает в <память> определённое число ячеек.
 * При невозможности чтения заполняет ячейки нулями. *)

ЗАДАЧА Цепь(п:Поток; цепь+:ЦЕПЬ);
(* Считывает строку знаков из потока в цепочку знаков. При этом
 * конец строки "#0D#0A" не записывается в конец этой цепочки. *)

ЗАДАЧА Строка(п:Поток);
(* Пропускает в потоке строку знаков. *)

ЗАДАЧА Число(п:Поток):ШИРВЕЩ;
(* Считывает из потока знаковое представление числа
 * и переводит его в ШИРВЕЩ вид. *)


ОТДЕЛ Писать;

Запись в поток. Для отложенной записи используется промежуточная память (ПП).

ЗАДАЧА Открыть(имяфайла-:ЦЕПЬ):Поток;
(* Открывает новый поток для записи данных. *)

ЗАДАЧА Пополнить(имяфайла-:ЦЕПЬ):Поток;
(* Открывает поток для записи данных в его конец. *)

ЗАДАЧА Сбросить(п:Поток);
(* Сбрасывает в файл данные из ПП потока-записи. *)

ЗАДАЧА Закрыть(п+:Поток);
(* Сначала сбрасывает в файл данные из ПП, а потом закрывает поток. *)

ЗАДАЧА Позиция(п:Поток):ЦЕЛ;
(* Возвращает позицию, отсчитываемую от начала файла. *)

ЗАДАЧА СменаПозиции(п:Поток; поз:ЦЕЛ);
(* Меняет позицию записи на <поз>, отсчитываемую от начала файла. *)

ЗАДАЧА Знак(п:Поток; з:ЗНАК);
(* Записывает знак в поток. *)

ЗАДАЧА Ячейки(п:Поток; память-:ВЯчейки; размер:ЦЕЛ);
(* Записывает определённое число ячеек. *)

ЗАДАЧА Цепь(п:Поток; цепь-:ЦЕПЬ);
(* Записывает цепочку знаков. '^' обозначает конец строки. *)

ЗАДАЧА ЧЦел(п:Поток; описание-:ЦЕПЬ; ц0,ц1,ц2,ц3:ШИРЦЕЛ);
(* Записывает текст из 4-х целых чисел, используя заданное описание *)

ЗАДАЧА ЧВещ(п:Поток; описание-:ЦЕПЬ; в0,в1,в2,в3:ШИРВЕЩ);
(* Записывает текст из 4-х вещественных чисел, используя заданное описание *)


ОТДЕЛ Параметр;

Работа с параметрами запуска приложения. Этот отдел предлагает средства для доступа к командной строке, которая была передана программе при запуске. Имеется возможность обращаться к ней как целиком, так и к каждому отдельному параметру. Причём подразумевается, что параметры разделяются в командной строке пробелами, запятыми или и тем, и другим вместе. Параметры, которые должны содержать пробелы или запятые, должны заключаться в кавычки.

ЗАДАЧА Текст(номер:ЦЕЛ; текст+:ЦЕПЬ);
(* Параметр под номером <номер> переписывается в <текст>.
 * Если выбран несуществующий параметр, то возвращает пустую цепочку. *)


ОТДЕЛ Вывод;

Вывод на экран.

ЗАДАЧА Пробел(x0,y0,x1,y1:ЦЕЛ);
(* Заполняет прямоугольник пробелом. *)

ЗАДАЧА Цвет(x0,y0,x1,y1,цвет:ЦЕЛ);
(* Устанавливает цвет прямоугольника. *)

ЗАДАЧА Рамка(x0,y0,x1,y1:ЦЕЛ);
(* Обрамляет прямоугольник двойной линией. *)

ЗАДАЧА Черта(x0,y0,x1,y1:ЦЕЛ);
(* Рисует горизонтальную или вертикальную черту, учитывая пересечения. *)

ЗАДАЧА Цепь(цепь-:ЦЕПЬ);
(* Записывает цепочку знаков в файл вывода. *)

ЗАДАЧА ВПрямоуг(x0,y0,x1,y1:ЦЕЛ; цепь-:ЦЕПЬ);
(* Записывает цепочку знаков в прямоугольную область. *)

ЗАДАЧА ЧЦел(описание-:ЦЕПЬ; ц0,ц1,ц2,ц3:ШИРЦЕЛ);
(* Записывает текст из 4-х целых чисел в файл вывода,
 * используя заданное описание. *)

ЗАДАЧА ЧВещ(описание-:ЦЕПЬ; в0,в1,в2,в3:ШИРВЕЩ);
(* Записывает текст из 4-х вещественных чисел в файл вывода,
 * используя заданное описание. *)


ОТДЕЛ Ввод;

Ввод состояния клавиатуры и мышки.

ЗАДАЧА Опрос(отКлавиш+:ОтКлавиш; отМышки+:ОтМышки):ЦЕЛ;


ОТДЕЛ Файл;

Работа с файлами ОС. Обозначения: место - местоположение файла на определённом накопителе; путь - местоположение файла или относительный путь к файлу.

ЗАДАЧА ИсправитьИмя(имя+:ЦЕПЬ);
(* Исправляет "/" на "\" и убирает повторы "\". *)

ЗАДАЧА ИсправитьМесто(имя+:ЦЕПЬ);
(* Убирает по возможности ".." в местоположении файла. *)

ЗАДАЧА НайтиМесто(отместа-,путь-,место+:ЦЕПЬ);
(* Находит местоположение файла <место>, зная путь <путь> из точки <отместа>. *)

ЗАДАЧА РазобратьИмя(пимя-,путь+,имя+,тип+:ЦЕПЬ);
(* Переписывает из цепочки с полным именем файла <пимя> в <путь> путь к файлу,
 * в <имя> имя файла без его типа, в <тип> тип файла. *)

ЗАДАЧА СобратьИмя(пимя+,путь-,имя-,тип-:ЦЕПЬ);
(* Собирает полное имя файла <пимя> из пути к файлу <путь>,
 * имени файла без его типа <имя> и типа файла <тип>. *)

ЗАДАЧА ПутьИзПолного(пимя-,путь+:ЦЕПЬ);
(* Переписывает из цепочки с полным именем файла <пимя> в цепочку <путь>
 * путь к файлу (включая указание диска и "\" перед именем файла). *)

ЗАДАЧА ИмяИзПолного(пимя-,имя+:ЦЕПЬ);
(* Переписывает из цепочки с полным именем файла <пимя> в цепочку <имя>
 * имя файла. *)

ЗАДАЧА ИмяТипИзПолного(пимя-,имятип+:ЦЕПЬ);
(* Переписывает из цепочки с полным именем файла <пимя> в цепочку <имятип>
 * имя и тип (расширение) файла. *)

ЗАДАЧА ТипИзПолного(пимя-,тип+:ЦЕПЬ);
(* Переписывает из цепочки с полным именем файла <пимя> в цепочку <тип>
 * тип (расширение) файла. *)

ЗАДАЧА ИзменитьТип(пимя+,тип-:ЦЕПЬ);
(* Изменяет тип (расширение) в полном имени файла <пимя> на <тип>. *)

ЗАДАЧА Существует(имя-:ЦЕПЬ):КЛЮЧ;
(* Возвращает ВКЛ, если существует файл с именем <имя>. *)

ЗАДАЧА ВремяИзменения(имя-:ЦЕПЬ; время+:Время);
(* Возвращает <время> изменения файла <имя> или -1. *)

ЗАДАЧА Размер(имя-:ЦЕПЬ):ЦЕЛ;
(* Возвращает размер файла <имя> или -1. *)

ЗАДАЧА Найти(имя-,тип-,пути-,пимя+:ЦЕПЬ):КЛЮЧ;
(* Ищет файл с именем <имя> и типом <тип> в списке путей нахождения файла
 * <пути>. Пути нахождения файла перечислены в цепочке <пути> через точку
 * с запятой. Если файл найден, то в цепочку <пимя> задача записывает полный
 * путь к этому файлу и возвращает ВКЛ, в противном случае возвращает ОТКЛ. *)


ОТДЕЛ ОС;

Взаимодействие с ОС.

ЗАДАЧА УдалитьФ(имя-:ЦЕПЬ):КЛЮЧ;
(* Удаляет файл с именем <имя>, возвращая ВКЛ в случае успеха. *)

ЗАДАЧА ПереименоватьФ(староеимя-,новоеимя-:ЦЕПЬ):КЛЮЧ;
(* Переименовывает файл со <староеимя> на <новоеимя>.
 * При успешном выполнении возвращает ВКЛ. *)

ЗАДАЧА ФДляЧтения(имя-:ЦЕПЬ):ЦЕЛ;
(* Открывает файл <имя> для чтения. При неудаче возвращает 0. *)

ЗАДАЧА ФДляЗаписи(имя-:ЦЕПЬ):ЦЕЛ;
(* Создаёт файл <имя> для записи. При неудаче возвращает 0. *)

ЗАДАЧА ФДляПополнения(имя-:ЦЕПЬ):ЦЕЛ;
(* Открывает (или создаёт, если не существует) файл с именем <имя> для записи данных
 * в его конец. При неудаче возвращает 0. *)

ЗАДАЧА ЗакрытьФ(файл:ЦЕЛ);
(* Закрывает файл <файл>. *)

ЗАДАЧА ЧитатьФ(файл:ЦЕЛ; память+:Ячейки; размер:ЦЕЛ):ЦЕЛ;
(* Читает из <файл> в <память> данные размером <размер> ячеек.
 * Возвращает число прочитанных ячеек. *)

ЗАДАЧА ПисатьФ(файл:ЦЕЛ; память-:Ячейки; размер:ЦЕЛ);
(* Записывает в <файл> из <память> данные размером <размер> ячеек. *)

ЗАДАЧА СвойстваФ(имя-:ЦЕПЬ):МНОЖ;
(* Возвращает свойства файла <имя>. *)

ЗАДАЧА СменаСвойствФ(имя-:ЦЕПЬ; свойства:МНОЖ);
(* Меняет свойства файла <имя> на <свойства>. Свойства можно
 * формировать, объединяя постоянные <сф_>. *)

ЗАДАЧА ПозицияФ(файл:ЦЕЛ):ЦЕЛ;
(* Возвращает позицию, отсчитываемую от начала открытого <файл>. *)

ЗАДАЧА СменаПозицииФ(файл:ЦЕЛ; позиция:ЦЕЛ);
(* Меняет позицию в открытом <файл> на <позиция>,
 * отсчитываемую от начала файла. *)

ЗАДАЧА ПервыйПоискФ(путь-:ЦЕПЬ; поиск+:ПоискФ):КЛЮЧ;
(* Начинает поиск файлов в каталоге по образцу <путь>.
 * Например, "C:\ГЛАГОЛ\*.ОТД". При успешном завершении возвращает
 * ВКЛ, а результаты поиска заносятся в поисковый набор <поиск>. *)

ЗАДАЧА СледующийПоискФ(поиск+:ПоискФ):КЛЮЧ;
(* Продолжает поиск начатый действием <ПервыйПоискФ>. При успешном завершении
 * возвращает ВКЛ и результаты поиска заносятся в поисковый набор <поиск>. *)

ЗАДАЧА ИмяИзПоискаФ(поиск+:ПоискФ; имя+:ЦЕПЬ);
(* Извлекает <имя> файла из системных данных <поиск>. *)

ЗАДАЧА СвойстваИзПоискаФ(поиск+:ПоискФ):МНОЖ;
(* Извлекает свойства файла из системных данных <поиск>. *)

ЗАДАЧА РазмерИзПоискаФ(поиск+:ПоискФ):ЦЕЛ;
(* Извлекает размер файла из системных данных <поиск>. *)

ЗАДАЧА ВремяИзПоискаФ(поиск+:ПоискФ; время+:ВремяФ);
(* Извлекает <время> последней записи в файл из системных данных <поиск>. *)

ЗАДАЧА ОкончитьПоискФ(поиск+:ПоискФ);
(* Оканчивает поиск начатый <ПервыйПоискФ>. *)

ЗАДАЧА ТекущийПутьФ(дискпуть+:ЦЕПЬ);
(* Записывает в <дискпуть> текущий путь. *)

ЗАДАЧА МестоФ(имя-,место+:ЦЕПЬ);
(* Переводит имя файла <имя> в местоположение файла <место>. Относительное
 * имя <имя> может содержать ".\" и "..". Если <имя> не содержит название
 * диска, то подставляется название текущего диска. *)

ЗАДАЧА ПолучитьКомСтроку(куда+:ЦЕПЬ);

ЗАДАЧА ВзятьПамять(размер,адрес+,ссылка+:ЦЕЛ);
(* Берёт у ОС кусок памяти в <размер> ячеек и обнуляет его.
 * Возвращает <адрес> этого куска и ссылку ОС на него.
 * <ссылка> равная 0 означает, что ОС не выделила память. *)

ЗАДАЧА ОтдатьПамять(ссылка:ЦЕЛ);
(* Отдаёт ОС кусок памяти, взятый до этого с помощью ВзятьПамять. *)

ЗАДАЧА ВстроенныйФ(вид:ЦЕЛ):ЦЕЛ;
(* Возвращает встроенный файл. При неудаче возвращает 0. *)

ЗАДАЧА ПисатьЗнак(x,y:ЦЕЛ; знак:ЗНАК);
ЗАДАЧА ПисатьЦвет(x,y,цвет:ЦЕЛ);
ЗАДАЧА ЧитатьЗнак(x,y:ЦЕЛ):ЗНАК;
ЗАДАЧА ЧитатьЦвет(x,y:ЦЕЛ):ЗНАК;
ЗАДАЧА Опрос():ЦЕЛ;

ЗАДАЧА Время():ЦЕЛ;
(* Возвращает время в мс, прошедшее от запуска ОС. *)

ЗАДАЧА Спать(мс:ЦЕЛ);
(* Приостановить работу приложения на <мс> миллисекунд. *)

ЗАДАЧА КоторыйЧас(сейчас+:Сейчас);

ЗАДАЧА Гудок(частота,длительность:ЦЕЛ);
(* системный гудок, <частота>, <длительность> используется в WinXP *)


\Глагол\Отделы\Числа\


ОТДЕЛ Вект;

Вектора.

ЗАДАЧА мин(в-:Вид):Матем.Вещ;
ЗАДАЧА макс(в-:Вид):Матем.Вещ;


ОТДЕЛ Компл;

Функции комплексной переменной. Примечания: после вызова задачи переменная <Матем.код> может стать # 0, это означает, что ответ задачи содержит не результат вычислений, а особое значение.

(**************************************************
 * Тригонометрические функции
 **************************************************)
ЗАДАЧА sin(z-,к+:Вид);      
ЗАДАЧА arcsin(z-,к+:Вид);
ЗАДАЧА cos(z-,к+:Вид);      
ЗАДАЧА arccos(z-,к+:Вид);
ЗАДАЧА tg(z-,к+:Вид);
ЗАДАЧА arctg(z-,к+:Вид);   
(**************************************************
 * Логарифмические, показательные и степенные функции
 **************************************************)
ЗАДАЧА exp(z-,к+:Вид);
ЗАДАЧА ln(z-,к+:Вид);
ЗАДАЧА lnГ(z-,к+:Вид);                (* к:=ln Г(z) *)
ЗАДАЧА степКЦ(z-:Вид; n:ЦЕЛ; к+:Вид); (* к:=z^n *)
ЗАДАЧА степКВ(z-:Вид; x:Вещ; к+:Вид); (* к:=z^x *)
ЗАДАЧА степКК(a-,b-,к+:Вид);          (* к:=a^b *)
ЗАДАЧА квкор(z-,к+:Вид);              (* к:=квкор(z) *)
ЗАДАЧА кор(z-:Вид; m,n:ЦЕЛ; к+:Вид);  (* к:=z^(1/n), m=0..n-1 *)
(**************************************************
 * Гиперболические функции (вещественного и комплексного аргумента)
 **************************************************)
ЗАДАЧА sh(z-,к+:Вид);
ЗАДАЧА ch(z-,к+:Вид);
ЗАДАЧА th(z-,к+:Вид);
ЗАДАЧА Arsh(z-,к+:Вид);
ЗАДАЧА Arch(z-,к+:Вид);
ЗАДАЧА Arth(z-,к+:Вид);
(**************************************************)
ЗАДАЧА алгВид(x,y:Вещ; к+:Вид);     (* к:=x+i*y         *)
ЗАДАЧА тригВид(r,тета:Вещ; к+:Вид); (* к:=r*exp(i*тета) *)
ЗАДАЧА мод(z-:Вид):Вещ;             (* |z|              *)
ЗАДАЧА arg(z-:Вид):Вещ;             (* arg(z)           *)
ЗАДАЧА знак(z-:Вид):ЦЕЛ;  
ЗАДАЧА обмен(к1+,к2+:Вид); 
ЗАДАЧА отр(z-,к+:Вид);              (* к:=-z  *)
ЗАДАЧА сопр(z-,к+:Вид);             (* к:=z*  *)
ЗАДАЧА доб(a-,b-,к+:Вид);           (* к:=a+b *)
ЗАДАЧА выч(a-,b-,к+:Вид);           (* к:=a-b *)
ЗАДАЧА умн(a-,b-,к+:Вид);           (* к:=a*b *)
ЗАДАЧА умнВ(a-:Вид; b:Вещ; к+:Вид); (* к:=a*b *)
ЗАДАЧА дел(a-,b-,к+:Вид);           (* к:=a/b *)
ЗАДАЧА делВ(a-:Вид; b:Вещ; к+:Вид); (* к:=a/b *)


ОТДЕЛ КомплВект;

Определение векторов (рядов) комплексных чисел и разложение в комплексный ряд Фурье.

ЗАДАЧА БПФ(вход-,выход+:Вид);
(* Цель:  Прямое Быстрое Преобразование Фурье
 **************************************************
 * До:    <вход>  - временная последовательность
 * После: <выход> - частотный спектр *)

ЗАДАЧА ОБПФ(вход-,выход+:Вид);
(* Цель:  Обратное Быстрое Преобразование Фурье
 **************************************************
 * До:    <вход>  - частотный спектр
 * После: <выход> - временная последовательность *)

ЗАДАЧА ПФ(гармоника:ЦЕЛ; вход-:Вид; выход+:Компл.Вид);
(* Цель:  Преобразование Фурье для заданной гармоники
 **************************************************
 * До:    <гармоника> - номер гармоники
 *        <вход>      - временная последовательность
 * После: <выход> - коэффициенты разложения на заданной гармонике *)


ОТДЕЛ КомплМатр;

Матрицы с комплексными числами.

ЗАДАЧА РазложитьНаLU(A+:Вид; строки+:Матр.Перестановки):ЦЕЛ;
(* Цель:  LU-разложение (A=L*U) квадратной матрицы A на два сомножителя L и U,
 *        где L - это нижняя треугольная матрица с единичной главной диагональю,
 *        а U - верхняя треугольная матрица. Эта задача используется
 *        совместно с РешитьИзLU для решения систем уравнений.
 * До:    <A>      - исходная матрица
 * После: <A>      - содержит элементы и L, и U
 *        <строки> - вновь созданные записи о перестановках строк
 * Ответ: 0 или ВЫРОЖДЕНА *)

ЗАДАЧА РешитьИзLU(A-:Вид; b-:КомплВект.Вид; строки:Матр.Перестановки; x+:КомплВект.Вид);
(* Цель:  решение системы уравнений после преобразования исходной матрицы
 *        с помощью РазложитьНаLU
 * До:    <A>      - матрица после РазложитьНаLU
 *        <b>      - вектор свободных членов
 *        <строки> - записи о перестановках строк из РазложитьНаLU
 * После: <x>      - вектор решения *)


ОТДЕЛ Матем;

Основные математические функции. Иногда полученный результат имеет особый смысл, в этом случае переменная <код> будет содержать # 0 значение.

(**************************************************
 * Тригонометрические функции
 **************************************************)
ЗАДАЧА sin(x:Вещ):Вещ;
ЗАДАЧА arcsin(x:Вещ):Вещ;       
ЗАДАЧА cos(x:Вещ):Вещ;
ЗАДАЧА arccos(x:Вещ):Вещ;       
ЗАДАЧА sincos(x,sinX+,cosX+:Вещ);
ЗАДАЧА tg(x:Вещ):Вещ;          
ЗАДАЧА arctg(x:Вещ):Вещ;
ЗАДАЧА arctg2(y,x:Вещ):Вещ;    (* угол (Ox,OM) для m(x,y) *)
ЗАДАЧА Пифагор(x,y:Вещ):Вещ;   (* квкор(x^2+y^2) *)
ЗАДАЧА уголВПи(тета:Вещ):Вещ;  (* угол в -ПИ..ПИ *)
(**************************************************
 * Логарифмические, показательные и степенные функции
 **************************************************)
ЗАДАЧА exp(x:Вещ):Вещ;           
ЗАДАЧА exp2(x:Вещ):Вещ;  (* 2^x *)
ЗАДАЧА exp10(x:Вещ):Вещ; (* 10^x *)
ЗАДАЧА ln(x:Вещ):Вещ;                   
ЗАДАЧА log2(x:Вещ):Вещ;  (* ln по основанию 2 *)
ЗАДАЧА log10(x:Вещ):Вещ; (* десятичный логарифм *)
ЗАДАЧА loga(x,a:Вещ):Вещ;(* ln по основанию a *)
ЗАДАЧА степВЦ(x:Вещ; n:ЦЕЛ):Вещ;       (* x^n *)
ЗАДАЧА степВВ(x,y:Вещ):Вещ;            (* x^y, x >= 0 *)
ЗАДАЧА кв(x:Вещ):Вещ;                  (* x*x *)
ЗАДАЧА квкор(x:Вещ):Вещ;               (* x^0,5 *)
(**************************************************
 * Гиперболические функции
 **************************************************)
ЗАДАЧА sh(x:Вещ):Вещ; 
ЗАДАЧА ch(x:Вещ):Вещ; 
ЗАДАЧА shch(x:Вещ; shX+,chX+:Вещ);  
ЗАДАЧА th(x:Вещ):Вещ;       
ЗАДАЧА Arsh(x:Вещ):Вещ;    
ЗАДАЧА Arch(x:Вещ):Вещ;    
ЗАДАЧА Arth(x:Вещ):Вещ;    
(**************************************************
 * Мин, макс, знак числа и обмен 2-х чисел
 **************************************************)
ЗАДАЧА мин(x,y:Вещ):Вещ;          
ЗАДАЧА макс(x,y:Вещ):Вещ;          
ЗАДАЧА минЦ(x,y:ЦЕЛ):ЦЕЛ;
ЗАДАЧА максЦ(x,y:ЦЕЛ):ЦЕЛ;          
ЗАДАЧА знак(x:Вещ):ЦЕЛ;     
ЗАДАЧА знак2(x,y:Вещ):Вещ;  (* x*знак(y) *)
ЗАДАЧА обмен(x+,y+:Вещ);   
ЗАДАЧА обменЦ(x+,y+:ЦЕЛ);
(**************************************************
 * Источники случайных чисел
 **************************************************)
ЗАДАЧА случ0(случ:ЦЕЛ); (* выставка начального состояния *)
ЗАДАЧА случЦ():ЦЕЛ;     (* целые от -2147483648 до 2147483647 *)
ЗАДАЧА случ():Вещ;      (* вещественные от 0 до 1 (не включая 1) *)
ЗАДАЧА случГ(мю,сигма:Вещ):Вещ; (* вещественные, распределённые по Гауссу *)
ЗАДАЧА случСГ():Вещ;    (* вещественные, распределённые по стандартному
                           Гауссу (мю=0,сигма=1) *)


ОТДЕЛ Матр;

Матрицы.

(**************************************************
 * Переписывание матриц и векторов
 **************************************************)
ЗАДАЧА ОбменСтрок(A+:Вид; i,k:ЦЕЛ);
ЗАДАЧА ОбменСтолбцов(A+:Вид; j,k:ЦЕЛ);
ЗАДАЧА СписатьВектор(из-,в+:Вект.Вид);
ЗАДАЧА Списать(из-,в+:Вид);
ЗАДАЧА СписатьСтолбецИзВектора(из-:Вект.Вид; в+:Вид; стлб:ЦЕЛ);
ЗАДАЧА СписатьВекторИзСтолбеца(из-:Вид; в+:Вект.Вид; стлб:ЦЕЛ);
(**************************************************)

ЗАДАЧА МетодГаусса(A-:Вид; b-:Вект.Вид; Ao+:Вид; x+:Вект.Вид):ЦЕЛ;
(* Цель:  решение системы линейных алгебраических уравнений методом
 *        исключения Гаусса
 **************************************************
 * До:    <A>  - матрица системы
 *        <b>  - вектор свободных членов
 * После: <Ao> - обратная матрица
 *        <x>  - вектор решения
 * Ответ: 0 или ВЫРОЖДЕНА *)

ЗАДАЧА Обратить(A-,Ao+:Вид):ЦЕЛ;
(* Цель:  обращение квадратной матрицы методом Гаусса
 **************************************************
 * До:    <A>  - исходная матрица
 * После: <Ao> - обратная матрица
 * Ответ: 0 или ВЫРОЖДЕНА *)

ЗАДАЧА Определитель(A+:Вид):Вещ;
(* Цель:  вычисление определителя квадратной матрицы
 **************************************************
 * До:    <A> - исходная матрица
 * После: <A> - разрушенная матрица
 * Ответ: значение определителя *)

ЗАДАЧА РазложитьНаLL(A-,L+:Вид):ЦЕЛ;
(* Цель:  Разложение Холецкого (A=L*L') симметрической положительно
 *        определённой матрицы A на две треугольные матрицы L и L', где L - это
 *        нижняя треугольная матрица, а L' - матрица, транспонированная к L.
 **************************************************
 * Прим:  Эту задачу можно использовать для испытания на положительно
 *        определённость.
 * До:    <A>    - исходная матрица A
 * После: <L>    - матрица L
 * Ответ: 0 или НЕ_П_О *)

ЗАДАЧА РазложитьНаLU(A+:Вид; строки+:Перестановки):ЦЕЛ;
(* Цель:  LU-разложение (A=L*U) квадратной матрицы A на два сомножителя L и U,
 *        где L - это нижняя треугольная матрица с единичной главной диагональю,
 *        а U - верхняя треугольная матрица. Эта задача используется
 *        совместно с РешитьИзLU для решения систем уравнений.
 **************************************************
 * До:    <A>      - исходная матрица
 * После: <A>      - содержит элементы и L, и U
 *        <строки> - вновь созданные записи о перестановках строк
 * Ответ: 0 или ВЫРОЖДЕНА *)

ЗАДАЧА РешитьИзLU(A-:Вид; b-:Вект.Вид; строки:Перестановки; x+:Вект.Вид);
(* Цель:  решение системы уравнений после преобразования исходной матрицы
 *        с помощью РазложитьНаLU
 * До:    <A>      - матрицы L и U после РазложитьНаLU
 *        <b>      - вектор свободных членов
 *        <строки> - записи о перестановках строк из РазложитьНаLU
 * После: <x>      - вектор решения *)

ЗАДАЧА РазложитьНаSV(A+:Вид; s+:Вект.Вид; V+:Вид):ЦЕЛ;
(* Цель:  SV разложение прямоугольной матрицы A (N x M, с N >= M) на три
 *        сомножителя (A=U*S*V'), где U (N x M) состоит из столбцов - собственных
 *        векторов, S (M x M) - диагональная матрица с элементами >= 0 (собственные
 *        значения) и V (M x M) - ортогональная матрица. Эта задача используется
 *        совместно с РешитьИзSV для решения систем уравнений.
 **************************************************
 * До:    <A>      - исходная матрица
 * После: <A>      - содержит элементы U
 *        <s>      - вектор собственных значений
 *        <V>      - ортогональная матрица       
 * Ответ: 0 или НЕТ_СХОДИМОСТИ *)

ЗАДАЧА ОбнулитьS(s+:Вект.Вид; откл:Вещ);
(* Цель:  обнуляет наименьшие собственные значения по заданной границе
 **************************************************
 * До:    <s>    - вектор собственных значений S
 *        <откл> - относительное отклонение (граница будет равна откл*макс(S) )
 * После: <s>    - изменённый вектор собственных значений *)

ЗАДАЧА РешитьИзSV(U-:Вид; s-:Вект.Вид; V-:Вид; b-,x+:Вект.Вид);
(* Цель:  решение системы уравнений после преобразования исходной матрицы
 *        с помощью РазложитьНаSV и обнуления наименьших собственных значений
 *        с помощью ОбнулитьS
 **************************************************
 * До:    <U> - матрица U после РазложитьНаSV
 *        <s> - вектор  S после РазложитьНаSV
 *        <V> - матрица V после РазложитьНаSV
 *        <b> - вектор свободных членов
 * После: <x> - вектор решения (V*Diag(1/S(i))*U'*B, для S(i) # 0) *)

ЗАДАЧА ВосстановитьИзSV(U-:Вид; s-:Вект.Вид; V-,A+:Вид);
(* Цель:  восстанавливает матрицу A перемножая U, S и V' после
 *        обнуления наименьших собственных значений задачей ОбнулитьS 
 **************************************************
 * До:    <U> - матрица U после РазложитьНаSV
 *        <s> - вектор  S после РазложитьНаSV
 *        <V> - матрица V после РазложитьНаSV
 * После: <A> - восстановленная матрица *)

ЗАДАЧА РазложитьНаQR(A+,R+:Вид):ЦЕЛ;
(* Цель:  QR разложение прямоугольной матрицы <A> (N x M, с N >= M) на два
 *        сомножителя (A=Q*R), где Q (N x M) - ортогональная матрица, а
 *        R (M x M) - верхняя треугольная матрица. Эта задача используется
 *        совместно с РешитьИзQR для решения систем уравнений.
 **************************************************
 * До:    <A> - исходная матрица
 * После: <A> - содержит элементы Q
 *        <R> - верхняя треугольная матрица
 * Ответ: 0 или ВЫРОЖДЕНА *)

ЗАДАЧА РешитьИзQR(q-,R-:Вид; b-,x+:Вект.Вид);
(* Цель:  решение системы уравнений после преобразования исходной матрицы
 *        с помощью РазложитьНаQR
 **************************************************
 * До:    <q> - матрица Q после РазложитьНаQR
 *        <R> - матрица R после РазложитьНаQR
 *        <b> - вектор свободных членов
 * После: <x> - вектор решения *)


ОТДЕЛ МатрВВ;

Ввод/вывод матриц и векторов.

ЗАДАЧА ОткрытьПоток(имяФайла-:ЦЕПЬ):Читать.Поток;
(* Цель:  если возможно, то открыть поток на чтение, иначе АВОСТ
 **************************************************
 * До:    <имяФайла> - имя считываемого файла
 * Ответ: открытый на чтение поток *)

ЗАДАЧА ЧитатьМатр(п:Читать.Поток):Матр.Доступ;
(* Цель:  прочитать из потока размер матрицы (строк, столбцов)
 *        создать матрицу и заполнить её данными из этого потока
 **************************************************
 * До:    <п> - открытый на чтение поток
 * Ответ: созданная матрица *)

ЗАДАЧА ЧитатьКомплМатр(п:Читать.Поток):КомплМатр.Доступ;
(* Цель:  прочитать из потока размер матрицы (строк, столбцов)
 *        создать матрицу и заполнить её данными из этого потока
 **************************************************
 * До:    <п> - открытый на чтение поток
 * Ответ: созданная матрица *)

ЗАДАЧА ВыводМатр(описание-:ЦЕПЬ; М-:Матр.Вид);
(* Цель:  вывести на экран содержимое матрицы <М> 
 **************************************************
 * До:    <описание> - описатель представления элемента матрицы (см. Текст.отд)
 *        <М>        - прямоугольная матрица *)

ЗАДАЧА ВыводКомплМатр(описание-:ЦЕПЬ; М-:КомплМатр.Вид);
(* Цель:  вывести на экран содержимое матрицы <М> 
 **************************************************
 * До:    <описание> - описатель представления элемента матрицы (см. Текст.отд)
 *        <М>        - прямоугольная матрица *)

ЗАДАЧА ВыводВект(описание-:ЦЕПЬ; в-:Вект.Вид);
(* Цель:  вывести на экран содержимое вектора <в> 
 **************************************************
 * До:    <описание> - описатель представления элемента матрицы (см. Текст.отд)
 *        <в>        - исходный вектор *)

ЗАДАЧА ВыводКомплВект(описание-:ЦЕПЬ; в-:КомплВект.Вид);
(* Цель:  вывести на экран содержимое вектора <в> 
 **************************************************
 * До:    <описание> - описатель представления элемента матрицы (см. Текст.отд)
 *        <в>        - исходный вектор *)


ОТДЕЛ Собств;

Собственные значения и вектора.

ЗАДАЧА Якоби(A+:Матр.Вид; проходов:ЦЕЛ; точность:Вещ; СВ+:Матр.Вид; сз+:Вект.Вид):ЦЕЛ;
(* Цель:  вычисление с. значений и с. векторов методом Якоби
 **************************************************
 * До:    <A>        - исходная матрица
 *        <проходов> - максимальное число проходов
 *        <точность> - требуемая точность
 * После: <СВ> - матрица нормированных с. векторов (по строкам), 
 *               у которых первый элемент > 0
 *        <сз> - с. значения
 *        <A>  - разрушенная исходная матрица
 * Ответ: 0 или НЕТ_СХОДИМОСТИ *)

ЗАДАЧА Значения(A+:Матр.Вид; сзВещ+,сзМнм+:Вект.Вид):ЦЕЛ;
(* Цель:  вычисление с. значений квадратной матрицы
 **************************************************
 * До:    <A>     - исходная матрица
 * После: <сзВещ> - вещественная часть с. значений
 *        <сзМнм> - мнимая часть с. значений
 *        <A>     - разрушенная исходная матрица
 * Ответ: 0 или НЕТ_СХОДИМОСТИ *)

ЗАДАЧА Вектор(A-:Матр.Вид; сз,точность:Вещ; св+:Вект.Вид):ЦЕЛ;
(* Цель:  вычисление одного с. вектора для соответствующего
 *        вещественного (кратного) с. значения
 **************************************************
 * До:    <A>        - исходная матрица
 *        <сз>       - с. значение
 *        <точность> - требуемая точность
 * После: <св> - нормированный с. вектор, 
 *               у которого первый элемент > 0
 * Ответ: 0 или НЕТ_СХОДИМОСТИ *)

ЗАДАЧА КорниПолинома(Coef-:Вект.Вид; Deg:ЦЕЛ; X_Re+,X_Im+:Вект.Вид):ЦЕЛ;
(* Цель:  вычисление действительных и комплексных корней действительного
 *        полинома методом companion матрицы
 **************************************************
 * До:    <Coef> - коэффициенты полинома
 *        <Deg>  - степень полинома
 * После: <X_Re> - действительные части корней (в порядке возрастания)
 *        <X_Im> - мнимые части корней
 * Ответ: 0 или НЕТ_СХОДИМОСТИ *)


ОТДЕЛ Текст;

Преобразования чисел в (из) текст(а). В задачах <ИзЧЦел> и <ИзЧВещ> входное <описание> - это цепочка знаков, содержащая и обычные знаки, которые просто переписываются в <текст> и описатели представлений чисел, которые имеют следующее строение:

   %[<номарг>:,-,<ширина>,.<точность>]<вид>

      Описатель представления начинается со знака '%'. Затем без
   пробелов следует ряд [необязательных] параметров:

   [<номарг>:]   - определяет номер аргумента, к которому относится
                   данный описатель
   [-]           - признак выравнивания влево
   [<ширина>]    - ширина поля вывода
   [.<точность>] - параметр точности
   <вид>         - знак, определяющий вид текущего аргумента

      Знаки, определяющие вид аргумента:

   'd'-Десятичное целое. Значение аргумента преобразуется в цепочку
       десятичных цифр. Если описатель представления содержит параметр
       точности, то текст должен содержать количество цифр, не
       менее указанного значения. Если значение содержит меньше
       цифр, то оно дополняется слева нулями.

   'x'-Шестнадцатеричное целое. Значение аргумента преобразуется в цепочку
       шестнадцатеричных цифр. Если описатель представления содержит
       параметр точности, то текст должен содержать количество цифр, не
       менее указанного значения. Если значение содержит меньше
       цифр, то оно дополняется слева нулями.

   'e'-Вещественное число в научном представлении.
       Значение преобразуется в цепочку вида "-ц,цц...E+ццц", где ц
       обозначает цифру. Отрицательные числа начинаются со знака минус.
       Перед десятичной запятой всегда имеется одна цифра. Общее
       число цифр (включая цифру до запятой) задаётся параметром точности.
       По умолчанию точность равна 15.
       После знака порядка "E" всегда присутствует знак плюс или
       минус и 3 цифры порядка.

   'f'-Вещественное число с неподвижной запятой.
       Значение преобразуется в цепочку вида "-ццц,ццц...".
       Отрицательные числа начинаются со знака минус.
       Параметр точности показывает, сколько цифр будет после запятой.
       По умолчанию точность равна 2.

   'g'-Вещественное число в общем виде.
       Значение преобразуется в кратчайшее десятичное представление
       (научное или неподвижное). По умолчанию число цифр, которое задаётся
       параметром точности, равно 15. Лишние нули удаляются, а запятая
       появляется только при необходимости. Результирующая цепочка
       представляется с неподвижной запятой, если число цифр левее запятой
       меньше или равно указанной точности и если значение больше
       или равно 0,00001. Иначе цепочка будет представлена в научном
       представлении.

   'c'-Знак. Значение аргумента преобразуется в знак с порядковым
       номером, равным значению аргумента.

      Если <вид> не принадлежит {'d','x','c','e','f','g'}, то параметры
   применяются не к аргументу, а к знаку <вид>.
      Числовые параметры могут извлекаться из текущего аргумента,
   если в качестве параметра выступает знак '*'.

ЗАДАЧА ИзВещЕ(число:ШИРВЕЩ; точность:ЦЕЛ; текст+:Число; дл+:ЦЕЛ);
(* Вещественное число в научном представлении.
 **************************************************
 * До:    <число>    - преобразуемое число
 *        <точность> - цифр после запятой
 * После: <текст>    - текстовое представление числа
 *        <дл>       - его длина *)

ЗАДАЧА ИзВещФ(число:ШИРВЕЩ; точность:ЦЕЛ; текст+:Число; дл+:ЦЕЛ);
(* Вещественное число с неподвижной запятой.
 **************************************************
 * До:    <число>    - преобразуемое число
 *        <точность> - цифр после запятой
 * После: <текст>    - текстовое представление числа
 *        <дл>       - его длина *)

ЗАДАЧА ИзВещГ(число:ШИРВЕЩ; точность:ЦЕЛ; текст+:Число; дл+:ЦЕЛ);
(* Вещественное число в общем виде.
 **************************************************
 * До:    <число>    - преобразуемое число
 *        <точность> - цифр после запятой
 * После: <текст>    - текстовое представление числа
 *        <дл>       - его длина *)
(**************************************************)

ЗАДАЧА ИзЦел10(число:ШИРЦЕЛ; нужноцифр:ЦЕЛ; текст+:Число);
(* Преобразовать целое число в десятичное представление.
 **************************************************
 * До:    <число>     - преобразуемое число
 *        <нужноцифр> - нужное количество цифр результата
 * После: <текст>     - текстовое представление числа *)

ЗАДАЧА ИзЦел16(число:ШИРЦЕЛ; нужноцифр:ЦЕЛ; текст+:Число);
(* Преобразовать целое число в шестнадцатеричное представление.
 **************************************************
 * До:    <число>     - преобразуемое число
 *        <нужноцифр> - нужное количество цифр результата
 * После: <текст>     - текстовое представление числа *)

ЗАДАЧА ИзЧЦел(описание-:ЦЕПЬ; а0,а1,а2,а3:ШИРЦЕЛ; текст+:ЦЕПЬ);
(* Составить текст с 4-мя целыми числами, используя описание текста.
 **************************************************
 * До:    <описание> - см. ИзЧЦелВещ()
 *        <а0>,,<а4> - аргументы преобразования
 * После: <текст>    - выходной текст *)
(**************************************************)

ЗАДАЧА ИзЧВещ(описание-:ЦЕПЬ; а0,а1,а2,а3:ШИРВЕЩ; текст+:ЦЕПЬ);
(* Составить текст с 4-мя вещественными числами, используя описание текста.
 **************************************************
 * До:    <описание> - см. ИзЧЦелВещ()
 *        <а0>,,<а4> - аргументы преобразования
 * После: <текст>    - выходной текст *)

ЗАДАЧА ВЦел(цепь+:ЦЕПЬ):ШИРЦЕЛ;
(* Если в цепочке <цепь> правильно записано целое число в десятичном или
 * шестнадцатеричном формате (в конце знак "H"), то возвращает
 * соответствующее машинное представление этого числа, иначе возвращает 0.
 * Пробелы вокруг числа не учитываются. *)


ОТДЕЛ Функц;

Специальные функции. В особых случаях в <Матем.код> записывается # 0 значение.

ЗАДАЧА Факториал(x:Вещ):Вещ;   (* факториал                        *)
ЗАДАЧА БиномКоэф(x,y:Вещ):Вещ; (* биномиальные коэффициенты C(n,k) *)
ЗАДАЧА Г(x:Вещ):Вещ;           (* Гамма функция                    *)
ЗАДАЧА ЗнакГ(x:Вещ):ЦЕЛ;       (* Знак Г функции                   *)
ЗАДАЧА lnГ(x:Вещ):Вещ;         (* ln(|Г(x)|)                       *)
ЗАДАЧА НепГ(a,x:Вещ):Вещ;      (* неполная Г функция               *)
ЗАДАЧА ДопГ(a,x:Вещ):Вещ;      (* дололнение НепГ                  *)
ЗАДАЧА Бета(x,y:Вещ):Вещ;      (* Бета функция                     *)
ЗАДАЧА НепБета(a,b,x:Вещ):Вещ; (* неполная Бета функция            *)
ЗАДАЧА erf(x:Вещ):Вещ;         (* функция ошибок                   *)
ЗАДАЧА erfc(x:Вещ):Вещ;        (* дополнительная функция ошибок    *)
(**************************************************
 * Биномиальное распределение с вероятностью <p> и числом испытаний <n>
 **************************************************)
ЗАДАЧА БиномВ(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ; (* p(x  = k) *)
ЗАДАЧА БиномП(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ; (* p(x <= k) *)
(**************************************************
 * Распределение Пуассона со средним значением Mu
 **************************************************)
ЗАДАЧА ПуассонВ(Mu:Вещ; k:ЦЕЛ):Вещ;  (* p(x  = k) *)
ЗАДАЧА ПуассонП(Mu:Вещ; k:ЦЕЛ):Вещ;  (* p(x <= k) *)
(**************************************************
 * Стандартный нормальный закон распределения
 **************************************************)
ЗАДАЧА НормПл(x:Вещ):Вещ;   (* Плотность распределения *)
ЗАДАЧА НормП(x:Вещ):Вещ;    (* p(U <= x) *)
ЗАДАЧА НормВ(x:Вещ):Вещ;    (* p(|U| >= |x|) *)
ЗАДАЧА ОбрНорм(p:Вещ):Вещ;  (* Возвращает такое <x>, что p(U <= x) = <p> *)
(**************************************************
 * Распределение Стьюдента с Nu степенями свободы
 **************************************************)
ЗАДАЧА СтьюдентПл(Nu:ЦЕЛ; x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА СтьюдентП(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(t <= x) *)
ЗАДАЧА СтьюдентВ(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(|t| >= |x|) *)
(**************************************************
 * Распределение Хи квадрат с <Nu> степенями свободы
 **************************************************)
ЗАДАЧА Хи2Пл(Nu:ЦЕЛ; x:Вещ):Вещ;  (* Плотность распределения Хи2 *)
ЗАДАЧА Хи2П(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(Khi2 <= x) *)
ЗАДАЧА Хи2В(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(Khi2 >= x) *)
(**************************************************
 * Распределение Фишера с <Nu1> и <Nu2> степенями свободы
 **************************************************)
ЗАДАЧА ФишерПл(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА ФишерП(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;   (* p(f <= x) *)
ЗАДАЧА ФишерВ(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;   (* p(f >= x) *)
(**************************************************
 * Экспоненциальное распределение
 **************************************************)
ЗАДАЧА ЭкспПл(a,x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА ЭкспП(a,x:Вещ):Вещ;   (* p( <= x) *)
(**************************************************
 * Бета распределение
 **************************************************)
ЗАДАЧА БетаПл(a,b,x:Вещ):Вещ;   (* Плотность распределения *)
ЗАДАЧА БетаП(a,b,x:Вещ):Вещ;    (* p( <= x) *)
(**************************************************
 * Г распределение
 **************************************************)
ЗАДАЧА ГПл(a,b,x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА ГП(a,b,x:Вещ):Вещ;   (* p( <= x) *)


\Глагол\Отделы\Иное\


ОТДЕЛ Ряд;

Упорядочивание и поиск в рядах.

ЗАДАЧА Упоряд(ряд+:РЯД ИЗ Доступ; всего:ЦЕЛ; сравнить:ЗАДАЧА(с1-,с2-:Вид):ЦЕЛ);
(* Быстрое упорядочивание с помощью разделения на участки (Ч.Хоар) *)

ЗАДАЧА Поиск(слаг-:Вид; ряд+:РЯД ИЗ Доступ; дл:ЦЕЛ; сравнить:ЗАДАЧА(с1-,с2-:Вид):ЦЕЛ):Доступ;

ЗАДАЧА Вставка(слаг:Доступ; ряд+:РЯД ИЗ Доступ; дл+:ЦЕЛ; сравнить:ЗАДАЧА(с1-,с2-:Вид):ЦЕЛ);


ОТДЕЛ Знак;

Распознавание и преобразование знаков.

ЗАДАЧА Буква(зн:ЗНАК):КЛЮЧ;
(* ВКЛ, если "зн" является буквой. *)

ЗАДАЧА Цифра(зн:ЗНАК):КЛЮЧ;
(* ВКЛ, если "зн" является цифрой. *)

ЗАДАЧА БукваЦифра(зн:ЗНАК):КЛЮЧ;
(* ВКЛ, если "зн" является буквой или цифрой. *)

ЗАДАЧА Загл(зн:ЗНАК):КЛЮЧ;
(* ВКЛ, если "зн" является заглавной буквой. *)

ЗАДАЧА ВЗагл(зн:ЗНАК):ЗНАК;
(* Переводит в заглавную букву. *)

ЗАДАЧА ВСтрочн(зн:ЗНАК):ЗНАК;
(* Переводит в строчную букву. *)

ЗАДАЧА ВДос(зн:ЗНАК):ЗНАК;
(* Переводит в Дос знак. *)

ЗАДАЧА ВВин(зн:ЗНАК):ЗНАК;
(* Переводит в Вин знак. *)

ЗАДАЧА ПараВШир(ст,мл:ЗНАК):Шир;
(* Объединяет пару знаков в Шир знак. *)

ЗАДАЧА ДосВШир(зн:ЗНАК):Шир;
(* Переводит Дос знак в Шир знак. *)

ЗАДАЧА ВинВШир(зн:ЗНАК):Шир;
(* Переводит Вин знак в Шир знак. *)

ЗАДАЧА ШирВДос(шз:Шир):ЗНАК;
(* Переводит Шир знак в Дос знак. *)

ЗАДАЧА ШирВВин(шз:Шир):ЗНАК;
(* Переводит Шир знак в Вин знак. *)


ОТДЕЛ Цепь;

Обработка цепочек знаков (РЯД ИЗ ЗНАК или ЦЕПЬ). Цепочки обычно заканчиваются знаком "0X". Их длина не может быть больше МАКС(ЦЕЛ). Если выходная цепочка не помещается в ряд, предназначенный для ответа, то она укорачивается до длины этого ряда.

ЗАДАЧА Сравнить(ц1-,ц2-:ЦЕПЬ):ЦЕЛ;
(* Возвращает результат алфавитного сравнения цепочек <ц1> и <ц2>. *)

ЗАДАЧА ПозицияЗнака(зн:ЗНАК; цепь-:ЦЕПЬ; поз:ЦЕЛ):ЦЕЛ;
(* Возвращает позицию первого знака <зн> в цепочке <цепь>. Поиск начинается
 * с позиции <поз>. Если <зн> нет в <цепь>, то возвращает -1. *)

ЗАДАЧА Позиция(обр-,цепь-:ЦЕПЬ; поз:ЦЕЛ):ЦЕЛ;
(* Возвращает позицию первого включения образца <обр> в цепочке <цепь>. Поиск
 * начинается с позиции <поз>. Если <обр> нет в <цепь>, то возвращает -1. *)

ЗАДАЧА Часть(откуда-,куда+:ЦЕПЬ; откудап,дл:ЦЕЛ);
(* Переписывает часть цепочки <откуда>, начиная с позиции <откудап>, и
 * длиной <дл> знаков в цепочку <куда>. *)

ЗАДАЧА Добавить(куда+,откуда-:ЦЕПЬ);
(* Добавляет в конец цепочки <куда> цепочку <откуда>. *)

ЗАДАЧА ДобавитьЗнак(куда+:ЦЕПЬ; зн:ЗНАК);
(* Добавляет в конец цепочки <куда> знак <зн>. *)

ЗАДАЧА ДобавитьЧасть(откуда-,куда+:ЦЕПЬ; откудап,дл:ЦЕЛ);
(* Переписывает часть цепочки <откуда>, начиная с позиции <откудап>, и
 * длиной <дл> знаков в конец цепочки <куда>. *)

ЗАДАЧА ВЗагл(цепь+:ЦЕПЬ);
(* Переводит все буквы цепочки <цепь> в заглавные буквы. *)

ЗАДАЧА ВСтрочн(цепь+:ЦЕПЬ);
(* Переводит все буквы цепочки <цепь> в строчные буквы. *)

ЗАДАЧА ВДос(цепь+:ЦЕПЬ);
(* Переводит все буквы цепочки <цепь> в Дос кодировку. *)

ЗАДАЧА ВВин(цепь+:ЦЕПЬ);
(* Переводит все буквы цепочки <цепь> в Вин кодировку. *)

ЗАДАЧА ДосВШир(цепь-:ЦЕПЬ; шир+:Шир);
(* Переводит все знаки Дос цепочки <цепь> в юникод. *)

ЗАДАЧА ВинВШир(цепь-:ЦЕПЬ; шир+:Шир);
(* Переводит все знаки Вин цепочки <цепь> в юникод. *)

ЗАДАЧА ШирВДос(шир-:Шир; цепь+:ЦЕПЬ);
(* Переводит все знаки широкой цепочки <шир> в Дос <цепь>. *)

ЗАДАЧА ШирВВин(шир-:Шир; цепь+:ЦЕПЬ);
(* Переводит все знаки широкой цепочки <шир> в Вин <цепь>. *)

ЗАДАЧА Удалить(откуда+:ЦЕПЬ; удалп,удалдл:ЦЕЛ);
(* Удаляет <удалдл> знаков цепочки <откуда>, начиная с позиции <удалп>. *)

ЗАДАЧА УдалитьКонПробелы(цепь+:ЦЕПЬ);
(* Удаляет пробелы в конце цепочки <цепь>. *)

ЗАДАЧА УдалитьНачПробелы(цепь+:ЦЕПЬ);
(* Удаляет пробелы в начале цепочки <цепь>. *)

ЗАДАЧА УдалитьПробелы(цепь+:ЦЕПЬ);
(* Удаляет пробелы в начале и конце цепочки <цепь>. *)

ЗАДАЧА ВставитьЗнак(зн:ЗНАК; куда+:ЦЕПЬ; кудап:ЦЕЛ);
(* Вставляет знак <зн> в цепочку <куда> в позиции <кудап>,
 * если для этого есть место. *)

ЗАДАЧА Вставить(откуда-,куда+:ЦЕПЬ; кудап:ЦЕЛ);
(* Вставляет цепочку <откуда> в цепочку <куда> в позиции <кудап>.
 * Копирует знаков не больше, чем умещается в <куда>. *)

ЗАДАЧА ДобавитьКонПробелы(цепь+:ЦЕПЬ; дл:ЦЕЛ);
(* Увеличивает длину цепочки <цепь> до <дл> знаков, добавляя в конец пробелы.
 * Если <цепь> уже достаточной длины, то не производит никаких изменений. *)

ЗАДАЧА ДобавитьНачПробелы(цепь+:ЦЕПЬ; дл:ЦЕЛ);
(* Увеличивает длину цепочки <цепь> до <дл> знаков, добавляя в начало пробелы.
 * Если <цепь> уже достаточной длины, то не производит никаких изменений. *)


ОТДЕЛ Перевод;

Преобразование знаков и цепочек в латиницу и обратно.

ЗАДАЧА ВЛат(рус-,лат+:ЦЕПЬ);


ОТДЕЛ Набор;

Построение списков наборов (предок наборов).

ЗАДАЧА ОчиститьСписок(список+:Список);
ЗАДАЧА ВКонецСписка(список+:Список; данные:Доступ);
(* Цель:  присоединить новое звено с данными в конец списка *)

ЗАДАЧА ПервЗвено(список-:Список):Звено;
(* Цель:  выдать первое звено списка *)


ОТДЕЛ Асм;

Дополнительные задачи на ассемблере.

ЗАДАЧА Особенность(x:ШИРВЕЩ):ЦЕЛ; 
(* Определяет состояние <x>
 * Ответ: {Число,МинусБеск,ПлюсБеск,НеЧисло} *)

ЗАДАЧА СлучНач(x:ЦЕЛ);
ЗАДАЧА СлучЦел():ЦЕЛ;
ЗАДАЧА sin(x:ШИРВЕЩ):ШИРВЕЩ; 
ЗАДАЧА cos(x:ШИРВЕЩ):ШИРВЕЩ; 
ЗАДАЧА sincos(x:ШИРВЕЩ; sinX+,cosX+:ШИРВЕЩ);
ЗАДАЧА arctg(x:ШИРВЕЩ):ШИРВЕЩ; 
ЗАДАЧА ln(x:ШИРВЕЩ):ШИРВЕЩ; 
ЗАДАЧА exp(x:ШИРВЕЩ):ШИРВЕЩ; 
ЗАДАЧА квкор(x:ШИРВЕЩ):ШИРВЕЩ; 
(* квадратный корень *)

ЗАДАЧА Порядок(x+:ШИРВЕЩ):ЦЕЛ;
(* Выделить мантиссу и порядок у числа <x>
 **************************************************
 * До:    <x> - исходное число
 * После: <x> - мантисса <x>
 * Ответ: порядок <x> *)

ЗАДАЧА ВЦифры(x:ШИРВЕЩ; цифр:ЦЕЛ; цифры+:ЦЕПЬ);
(* Переводит <x> в десятичное представление
 **************************************************
 * До:    <x>     - исходное число (0 <= x < 10)
 *        <цифр>  - требуется цифр после запятой
 *        ДЛ(<цифры>) должна быть больше <цифр> и больше 18 !!
 * После: <цифры[0]> - десятки <x>
 *        <цифры[1]> - единицы <x>
 *        <цифры[2..цифр]> - цифры <x> после запятой *)

ЗАДАЧА Сдвиг(ч:ЦЕЛ; р:ЦЕЛ):ЦЕЛ;
(* Двоичный сдвиг целого числа (LSH)
 **************************************************
 * До:    <ч> - исходное число
 *        <р> - счётчик разрядов
 *              если <р> > 0, то в сторону старшего разряда
 *              если <р> < 0, то в сторону младшего разряда
 * Ответ: сдвинутое число *)

ЗАДАЧА ЗнаковыйСдвиг(ч:ЦЕЛ; р:ЦЕЛ):ЦЕЛ;
(* Двоичный сдвиг целого числа с сохранением знака
 **************************************************
 * До:    <ч> - исходное число (ASH)
 *        <р> - счётчик разрядов
 *              если <р> > 0, то в сторону старшего разряда
 *              если <р> < 0, то в сторону младшего разряда
 * Ответ: сдвинутое число *)

ЗАДАЧА Вращение(ч:ЦЕЛ; р:ЦЕЛ):ЦЕЛ;
(* Двоичное вращение целого числа
 **************************************************
 * До:    <ч> - исходное число
 *        <р> - счётчик разрядов
 *              если <р> > 0, то в сторону старшего разряда
 *              если <р> < 0, то в сторону младшего разряда
 * Ответ: перевёрнутое число *)

ЗАДАЧА ШирСдвиг(ч:ШИРЦЕЛ; р:ЦЕЛ):ШИРЦЕЛ;
(* Двоичный сдвиг целого числа
 **************************************************
 * До:    <ч> - исходное число
 *        <р> - счётчик разрядов
 *              если <р> > 0, то в сторону старшего разряда
 *              если <р> < 0, то в сторону младшего разряда
 * Ответ: сдвинутое число *)

ЗАДАЧА ШирЗнаковыйСдвиг(ч:ШИРЦЕЛ; р:ЦЕЛ):ШИРЦЕЛ;
(* Двоичный сдвиг целого числа с сохранением знака
 **************************************************
 * До:    <ч> - исходное число
 *        <р> - счётчик разрядов
 *              если <р> > 0, то в сторону старшего разряда
 *              если <р> < 0, то в сторону младшего разряда
 * Ответ: сдвинутое число *)

ЗАДАЧА ШирВращение(ч:ШИРЦЕЛ; р:ЦЕЛ):ШИРЦЕЛ;
(* Двоичное вращение целого числа
 **************************************************
 * До:    <ч> - исходное число
 *        <р> - счётчик разрядов
 *              если <р> > 0, то в сторону старшего разряда
 *              если <р> < 0, то в сторону младшего разряда
 * Ответ: перевёрнутое число *)

ЗАДАЧА ОбнулитьПамять(адрес,размер:ЦЕЛ);
(* размер в байтах *)


\Глагол\Отделы\Поле\


ОТДЕЛ Поле;

Экранное поле с наделами для ввода и вывода текстовых данных.

ЗАДАЧА Рисовать(поле:Доступ);
(* рисует поле со всеми наделами (потомками) *)

ЗАДАЧА СменаВвода(поле:Доступ; новый:Надел.Доступ);
ЗАДАЧА Выполнить(поле:Доступ);
ЗАДАЧА Подготовить(поле:Доступ; заглавие-:ЦЕПЬ; наделы:Надел.Доступ; x0,y0,x1,y1:ЦЕЛ; Получить:Задача);
ЗАДАЧА Создать(заглавие-:ЦЕПЬ; наделы:Надел.Доступ; x0,y0,x1,y1:ЦЕЛ; Получить:Задача):Доступ;


ОТДЕЛ Прямоуг;

Прямоугольная область на экране (предок для Поля и Надел).

ЗАДАЧА Сдвиг(прямоуг:Доступ; dx,dy:ЦЕЛ);
ЗАДАЧА Цвет(прямоуг:Доступ; цвет:ЦЕЛ);
ЗАДАЧА Текст(прямоуг:Доступ; цепь-:ЦЕПЬ);
ЗАДАЧА Рамка(прямоуг:Доступ);
ЗАДАЧА Пробел(прямоуг:Доступ);
ЗАДАЧА Изменить(прямоуг:Доступ; x0,y0,x1,y1:ЦЕЛ);
ЗАДАЧА Подготовить(прямоуг:Доступ; x0,y0,x1,y1:ЦЕЛ);


ОТДЕЛ Надел;

Область ввода и вывода (предок видимых наделов).

ЗАДАЧА Рисовать(надел:Доступ);
ЗАДАЧА Добавить(наделы+,надел:Доступ);
(* добавляем <надел> в конец двусвязанного списка <наделы> *)

ЗАДАЧА Подготовить(надел:Доступ; x0,y0,x1,y1:ЦЕЛ; свводом:КЛЮЧ; Получить:Задача);


ОТДЕЛ Метка;

Текстовая метка, потомок надела.

ЗАДАЧА Изменить(метка:Доступ; надпись-:ЦЕПЬ);
ЗАДАЧА ИзЧЦел(метка:Доступ; описание-:ЦЕПЬ; а0,а1,а2,а3:ШИРЦЕЛ);
ЗАДАЧА Подготовить(метка:Доступ; x0,y0:ЦЕЛ; надпись-:ЦЕПЬ);
ЗАДАЧА Создать(x0,y0:ЦЕЛ; надпись-:ЦЕПЬ):Доступ;


ОТДЕЛ Кнопка;

Кнопка, потомок надела.

ЗАДАЧА Подготовить(кнопка:Доступ; x0,y0:ЦЕЛ; надпись-:ЦЕПЬ; действие:ЦЕЛ);
ЗАДАЧА Создать(x0,y0:ЦЕЛ; надпись-:ЦЕПЬ; действие:ЦЕЛ):Доступ;