Задачи на Глаголе
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

Главная     ◄рук.по Глаголу   ◄Азбука   2008/Задачи на Глаголе ►   Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   ООП по Вирту ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы

 

Задачница языка программирования Глагол

Библиотека общедоступных задач (подпрограмм)
Август 2014 г.
 
 glagol.png Программируем по-русски
 

…Мне стало потрясающе очевидным, что она, "чьё имя мы не называем", сюда заходит. Только в предчувствии её можно придумывать Маки, только занимаясь ею можно сделать TCPMP (медиа проигрыватель), только жертвенно — вопреки ей — можно рубить Глагол.

Автор: Фаниль Фаисханов "Чух-чух", Компьютерра, 14 марта 2009 года

 

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






 
 

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


▼ Читать.отд чтение из Потока
▼ Писать.отд запись в Поток
▼ Параметр.отд работа с параметрами запуска Приложения
▼ Вывод.отд вывод на Экран
▼ Ввод.отд ввод состояния Клавиатуры и Мышки
▼ Справка.отд работа с ".CHM"-справочниками средствами ОС
▼ Файл.отд работа с Файлами
▼ ЦвЗнак.отд определение цветного Знака
▼ Настройки.отд чтение и запись настроек Приложения
▼ Окно.отд ввод и вывод текста в Графическое или Консольное окно
▼ ОС.отд взаимодействие с Операционной Системой Win32
▼ КОС.отд взаимодействие с Консольной Оконной Системой (КОС)
▼ ГОС.отд взаимодействие с Графической Оконной Системой (ГОС)
▼ Заграница.отд взаимодействие с внешними ДПБ - Динамически Подключаемыми Библиотеками (DLL)



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

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

(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Открыть-(имяфайла-:ЦЕПЬ):Поток; 
(* Открывает новый поток. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Закрыть-(поток+:Поток); 
(* Закрывает поток. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Конец-(поток:Поток):КЛЮЧ; 
(* Возвращает ВКЛ, если в потоке уже окончились данные. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Позиция-(поток:Поток):ЦЕЛ; 
(* Возвращает позицию, отсчитываемую от начала файла. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СменаПозиции-(поток:Поток; поз:ЦЕЛ); 
(* Меняет позицию чтения на <поз>, отсчитываемую от начала файла. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Ячейки-(поток:Поток; память+:ОБХОД.Ячейки; размер:ЦЕЛ); 
(* Читает в <память> определенное число ячеек.
 * При невозможности чтения заполняет ячейки нулями. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА БудетЗнак-(поток:Поток):ЗНАК; 
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЗнакЦепи-(поток:Поток):ЗНАК; 
(* Считывает знак из потока. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Строка-(поток:Поток; цепь+:ЦЕПЬ); 
(* Считывает строку знаков из потока в цепочку знаков. При этом
 * конец строки "#000D#000A" не записывается в конец этой цепочки. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПропуститьСтроку-(поток:Поток); 
(* Пропускает в потоке строку знаков. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДлинаЦепь-(поток:Поток):ДЦепь; 
(* Читает длину цепочки и саму цепочку во вновь распределённую память *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НачалоСтроки-(поток:Поток):КЛЮЧ; 
(* Возвращает ВКЛ, если задача Строка или задача ПропуститьСтроку в прошлый раз
 * прочитали конец строки "#000D#000A". *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Целое-(поток:Поток; цОтвет+:ШИРЦЕЛ; вОтвет+:ШИРВЕЩ):КЛЮЧ; 
(* Считывает из потока знаковое представление числа.
 * Если это представление целого числа, то возвращает ВКЛ и записывает
 * значение числа в <цОтвет>, иначе возвращает ОТКЛ, а значение записывает
 * в <вОтвет>. 
 * Следующий за числом знак остаётся в потоке. *)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ШирВещ-(поток:Поток):ШИРВЕЩ; 
ЗАДАЧА Вещ-(поток:Поток):ВЕЩ; 
ЗАДАЧА ШирЦел-(поток:Поток):ШИРЦЕЛ; 


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

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

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


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

(******************************************************************************* 
 * НАЗНАЧЕНИЕ: работа с параметрами запуска Приложения                         * 
 ******************************************************************************* 
 * Этот отдел предлагает средства для доступа к командной строке, которая была * 
 * передана программе при запуске. Имеется возможность обращаться к ней как    * 
 * целиком, так и к каждому отдельному параметру.                              * 
 * Причем подразумевается, что параметры разделяются в командной строке        * 
 * пробелами, запятыми или и тем, и другим вместе. Параметры, которые должны   * 
 * содержать пробелы или запятые, должны заключаться в кавычки.                * 
 *******************************************************************************)

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


ОТДЕЛ Вывод;

(* НАЗНАЧЕНИЕ: вывод на экран *)

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


ОТДЕЛ Ввод;

(* НАЗНАЧЕНИЕ: ввод от Клавиатуры и Мышки *)

ВИД                 (* Абстрактный набор - предок других наборов *)
  Посылка- = НАБОР КОН; 

  ОтКлавиш- = НАБОР(Посылка)
    код+:ЦЕЛ;        (* рабочий код клавиши, код:=0 после отработки *)
    знак+:ЗНАК; 
    упрКнопки+:МНОЖ; 
    упрШифт+:КЛЮЧ;   (* есть управление от шифт *)  
    упрКонтр+:КЛЮЧ;  (* есть управление от контр *)
    упрАльт+:КЛЮЧ;   (* есть управление от альт *)
    мкод+:ЦЕЛ;       (* машинный код клавиши *)
  КОН; 

  ОтМышки- = НАБОР(Посылка)
    к+,с+:ЦЕЛ;     
    кнопки+:МНОЖ; 
    упрКнопки+:МНОЖ;  
    события+:МНОЖ; 
    прокрут+:ЦЕЛ;      (* щелчков колёсика *)
    отработана+:КЛЮЧ;  (* выставляет получатель *)
  КОН; 


ОТДЕЛ Справка;

(****************************************************************************** 
 * НАЗНАЧЕНИЕ: работа в Оболочке с ".CHM"-справочником средствами ОС Win32
 * ПРИМЕЧАНИЯ: вызов ОС происходит через Spravka.DLL
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Ключ-(ключ-:ЦЕПЬ); 
(* Цель: поиск разделов по ключевому слову *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Номер-(номер:ЦЕЛ); 
(* Цель: поиск раздела по его номеру *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Раздел-(раздел-:ЦЕПЬ); 
(* Цель: поиск раздела по его .htm имени *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Подготовить-(имяФ-:ЦЕПЬ); 
(* Цель: подготовить вызовы внешних задач
 * До:    <имяФ> - полное имя файла .CHM справочника *)


ОТДЕЛ Файл;

(****************************************************************************** 
 * НАЗНАЧЕНИЕ: работа с файлами                                               * 
 * ОБОЗНАЧЕНИЯ: место - местоположение файла на определенном накопителе       * 
 *              путь  - местоположение файла или относительный путь к файлу   * 
 ******************************************************************************)

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


ОТДЕЛ ЦвЗнак;

(* НАЗНАЧЕНИЕ: определение цветного Знака *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЗнакаИЦвета-(знак,цвет:ЗНАК;  цвЗнак+:Вид); 
(* Цель: запись знака и его цвета в ЦвЗнак *)


ОТДЕЛ Настройки;

(* НАЗНАЧЕНИЕ: Чтение и Запись настроек Приложения *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПропуститьПримечания-(поток:Читать.Поток); 
(* Пропускает в потоке строки, начинающиеся с ";". *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЧитатьСтроку-(поток:Читать.Поток;  строка+:ЦЕПЬ); 
ЗАДАЧА ЧитатьКлюч-(поток:Читать.Поток):КЛЮЧ; 
ЗАДАЧА ЧитатьЦел-(поток:Читать.Поток):ЦЕЛ; 
ЗАДАЧА ПисатьПримечания-(поток:Писать.Поток;  примечания-:ЦЕПЬ); 
ЗАДАЧА ПисатьСтроку-(поток:Писать.Поток;  примечания-,строка-:ЦЕПЬ); 
ЗАДАЧА ПисатьКлюч-(поток:Писать.Поток;  примечания-:ЦЕПЬ;  ключ:КЛЮЧ); 
ЗАДАЧА ПисатьЦел-(поток:Писать.Поток;  примечания-:ЦЕПЬ;  число:ЦЕЛ); 


ОТДЕЛ Окно;

(* НАЗНАЧЕНИЕ: ввод и вывод текста на Графическое или Консольное окно *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Графическое-(имяПриложения-,имяШрифта-:ЦЕПЬ; 
                               размерШрифта:ЦЕЛ;  задачаЧасы:ГОС.ВидЗадачиЧасы); 
(* Цель: подготовка к работе графического окна *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Текстовое-(задачаЧасы:КОС.ВидЗадачиЧасы); 
(* Цель: подготовка к работе консольного окна *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Пробел-(вс,лк,нс,пк:ЦЕЛ); 
(* Заполняет прямоугольник пробелом. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Цвет-(вс,лк,нс,пк:ЦЕЛ;  цвет:ЗНАК); 
(* Устанавливает цвет прямоугольника. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЦветнойПробел-(вс,лк,нс,пк:ЦЕЛ;  цвет:ЗНАК); 
(* Заполняет прямоугольник пробелом заданного цвета. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Тень-(вс,лк,нс,пк:ЦЕЛ); 
(* Снаружи прямоугольника рисует тень. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Рамка1-(вс,лк,нс,пк:ЦЕЛ); 
(* Обрамляет прямоугольник одинарной линией. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Рамка2-(вс,лк,нс,пк:ЦЕЛ); 
(* Обрамляет прямоугольник двойной линией. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Черта-(вс,лк,нс,пк:ЦЕЛ); 
(* Рисует горизонтальную или вертикальную черту, учитывая пересечения. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Цепь-(вс,лк,нс,пк:ЦЕЛ;  цепь-:ЦЕПЬ); 
(* Записывает цепочку знаков в прямоугольную область. *)

 
 
ОТДЕЛ ОС;

(* НАЗНАЧЕНИЕ: взаимодействие с ОС - операционной системой Win32 *)


(* используемые Win задачи *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetProcAddress(hModule,lpProcName:ЦЕЛ):ЦЕЛ;        ВЫЗОВ "GetProcAddress"             ИЗ "kernel32.dll"; 
ЗАДАЧА GetProcessHeap():ЦЕЛ;                              ВЫЗОВ "GetProcessHeap"             ИЗ "kernel32.dll"; 
ЗАДАЧА HeapAlloc(hHeap,dwFlags,dwBytes:ЦЕЛ):ЦЕЛ;          ВЫЗОВ "HeapAlloc"                  ИЗ "kernel32.dll"; 
ЗАДАЧА HeapFree(hHeap,dwFlags,lpMem:ЦЕЛ);                 ВЫЗОВ "HeapFree"                   ИЗ "kernel32.dll"; 
ЗАДАЧА CloseHandle(hObject:ЦЕЛ);                          ВЫЗОВ "CloseHandle"                ИЗ "kernel32.dll"; 
ЗАДАЧА FindClose(hFindFile:ЦЕЛ);                          ВЫЗОВ "FindClose"                  ИЗ "kernel32.dll"; 
ЗАДАЧА GlobalAlloc(uFlags,dwBytes:ЦЕЛ):ЦЕЛ;               ВЫЗОВ "GlobalAlloc"                ИЗ "kernel32.dll"; 
ЗАДАЧА GlobalLock(hMem:ЦЕЛ):ЦЕЛ;                          ВЫЗОВ "GlobalLock"                 ИЗ "kernel32.dll"; 
ЗАДАЧА GlobalUnlock(hMem:ЦЕЛ);                            ВЫЗОВ "GlobalUnlock"               ИЗ "kernel32.dll"; 
ЗАДАЧА GlobalFree(hMem:ЦЕЛ);                              ВЫЗОВ "GlobalFree"                 ИЗ "kernel32.dll"; 
ЗАДАЧА LocalAlloc(uFlags,uBytes:ЦЕЛ):ЦЕЛ;                 ВЫЗОВ "LocalAlloc"                 ИЗ "kernel32.dll"; 
ЗАДАЧА LocalFree(hMem:ЦЕЛ):ЦЕЛ;                           ВЫЗОВ "LocalFree"                  ИЗ "kernel32.dll"; 
ЗАДАЧА GetStdHandle(nStdHandle:ЦЕЛ):ЦЕЛ;                  ВЫЗОВ "GetStdHandle"               ИЗ "kernel32.dll"; 
ЗАДАЧА WaitForSingleObject(hHandle,dwMilliseconds:ЦЕЛ);   ВЫЗОВ "WaitForSingleObject"        ИЗ "kernel32.dll"; 
ЗАДАЧА SetEnvironmentVariable(lpName-,lpValue-:ЦЕПЬ);     ВЫЗОВ "SetEnvironmentVariableW"    ИЗ "kernel32.dll"; 
ЗАДАЧА GetFileAttributes(lpFileName-:ЦЕПЬ):ЦЕЛ;           ВЫЗОВ "GetFileAttributesW"         ИЗ "kernel32.dll"; 
ЗАДАЧА GetCommandLine():ЦЕЛ;                              ВЫЗОВ "GetCommandLineW"            ИЗ "kernel32.dll"; 
ЗАДАЧА CreateDirectory(lpPathName-:ЦЕПЬ;  lpSecurityAttributes:ЦЕЛ):КЛЮЧ;                        ВЫЗОВ "CreateDirectoryW" ИЗ "kernel32.dll"; 
ЗАДАЧА ReadFile(hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead+,lpOverlapped:ЦЕЛ):ЦЕЛ;   ВЫЗОВ "ReadFile"       ИЗ "kernel32.dll"; 
ЗАДАЧА WriteFile(hFile,lpBuffer,nNumberOfBytesToWrite,lpNumberOfBytesWritten+,lpOverlapped:ЦЕЛ);  ВЫЗОВ "WriteFile"      ИЗ "kernel32.dll"; 
ЗАДАЧА SetFilePointer(hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod:ЦЕЛ):ЦЕЛ;           ВЫЗОВ "SetFilePointer" ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА CreateProcess(lpApplicationName:ЦЕЛ; 
 lpCommandLine-:ЦЕПЬ; 
 lpProcessAttributes,ThreadAttributes,bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDirectory:ЦЕЛ; 
 lpStartupInfo+:STARTUPINFO; 
 lpProcessInformation+:PROCESS_INFORMATION):ЦЕЛ;                      ВЫЗОВ "CreateProcessW"          ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetEnvironmentVariable(lpName-,lpBuffer+:ЦЕПЬ;  nSize:ЦЕЛ):ЦЕЛ;  ВЫЗОВ "GetEnvironmentVariableW" ИЗ "kernel32.dll"; 
ЗАДАЧА SetFileAttributes(lpFileName-:ЦЕПЬ;  dwFileAttributes:МНОЖ);     ВЫЗОВ "SetFileAttributesW"      ИЗ "kernel32.dll"; 
ЗАДАЧА FindFirstFile(lpFileName-:ЦЕПЬ;  lpFindFileData+:ПоискФ):ЦЕЛ;    ВЫЗОВ "FindFirstFileW"          ИЗ "kernel32.dll"; 
ЗАДАЧА FindNextFile(hFindFile:ЦЕЛ;  lpFindFileData+:ПоискФ):ЦЕЛ;        ВЫЗОВ "FindNextFileW"           ИЗ "kernel32.dll"; 
ЗАДАЧА GetCurrentDirectory(nBufferLength:ЦЕЛ;  lpBuffer-:ЦЕПЬ):ЦЕЛ;     ВЫЗОВ "GetCurrentDirectoryW"    ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetFullPathName(lpFileName-:ЦЕПЬ; 
 nBufferLength:ЦЕЛ; 
 lpBuffer-:ЦЕПЬ; 
 lpFilePart+:ЦЕЛ):ЦЕЛ;                                     ВЫЗОВ "GetFullPathNameW" ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА CreateFile(lpFileName-:ЦЕПЬ; 
 dwDesiredAccess,
 dwShareMode,
 lpSecurityAttributes,
 dwCreationDisposition,
 dwFlagsAndAttributes,
 hTemplateFile:ЦЕЛ):ЦЕЛ;                                  ВЫЗОВ "CreateFileW"                ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА LoadKeyboardLayout(pwszKLID-:ЦЕПЬ; Flags:ЦЕЛ):ЦЕЛ;  ВЫЗОВ "LoadKeyboardLayoutW"        ИЗ "user32.dll"; 
ЗАДАЧА VkKeyScanEx(ch:ЗНАК; dwhkl:ЦЕЛ):ЦЕЛ;                ВЫЗОВ "VkKeyScanExW"               ИЗ "user32.dll"; 
ЗАДАЧА OpenClipboard(hWndNewOwner:ЦЕЛ):КЛЮЧ;               ВЫЗОВ "OpenClipboard"              ИЗ "user32.dll"; 
ЗАДАЧА CloseClipboard();                                   ВЫЗОВ "CloseClipboard"             ИЗ "user32.dll"; 
ЗАДАЧА EmptyClipboard();                                   ВЫЗОВ "EmptyClipboard"             ИЗ "user32.dll"; 
ЗАДАЧА SetClipboardData(uFormat,hMem:ЦЕЛ);                 ВЫЗОВ "SetClipboardData"           ИЗ "user32.dll"; 
ЗАДАЧА GetClipboardData(uFormat:ЦЕЛ):ЦЕЛ;                  ВЫЗОВ "GetClipboardData"           ИЗ "user32.dll"; 
ЗАДАЧА IsClipboardFormatAvailable(format:ЦЕЛ):КЛЮЧ;        ВЫЗОВ "IsClipboardFormatAvailable" ИЗ "user32.dll"; 

 
 

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Связаться-(имя-:ЦЕПЬ):ЦЕЛ;                        ВЫЗОВ "LoadLibraryW"  ИЗ "kernel32.dll"; 
(* Связывание с ДПБ, имя которой <имя>. Возвращает ссылку на ДПБ или 0. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Отвязаться-(ссылка:ЦЕЛ);                          ВЫЗОВ "FreeLibrary"   ИЗ "kernel32.dll"; 
(* Отказ от использования ДПБ. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьФ-(имя-:ЦЕПЬ):КЛЮЧ;                        ВЫЗОВ "DeleteFileW"   ИЗ "kernel32.dll"; 
(* Удаляет файл с именем <имя>, возвращая ВКЛ в случае успеха. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПереименоватьФ-(староеимя-,новоеимя-:ЦЕПЬ):КЛЮЧ;  ВЫЗОВ "MoveFileW"     ИЗ "kernel32.dll"; 
(* Переименовывает файл со <староеимя> на <новоеимя>.
 * При успешном выполнении возвращает ВКЛ. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Время-():ЦЕЛ;                                     ВЫЗОВ "GetTickCount"  ИЗ "kernel32.dll"; 
(* Возвращает время в мс, прошедшее от запуска Win. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Спать-(мс:ЦЕЛ);                                   ВЫЗОВ "Sleep"         ИЗ "kernel32.dll"; 
(* Приостановить работу приложения на <мс> миллисекунд. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА КоторыйЧас-(сейчас+:Сейчас);                      ВЫЗОВ "GetSystemTime" ИЗ "kernel32.dll"; 
ЗАДАЧА Гудок-(частота,длительность:ЦЕЛ);                 ВЫЗОВ "Beep"          ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СоздатьП-(имя-:ЦЕПЬ):КЛЮЧ; 
(* Создаёт папку с именем <имя>, возвращая ВКЛ в случае успеха. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЗакрытьФ-(фссылка:ЦЕЛ); 
(* Закрывает файл по ссылке <фссылка>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ФДляЧтения-(имя-:ЦЕПЬ):ЦЕЛ; 
(* Открывает файл <имя> для чтения. При неудаче возвращает 0. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ФДляЗаписи-(имя-:ЦЕПЬ):ЦЕЛ; 
(* Создает файл <имя> для записи. При неудаче возвращает 0. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ФДляПополнения-(имя-:ЦЕПЬ):ЦЕЛ; 
(* Открывает (или создает, если не существует) файл с именем <имя> для записи
 * данных в его конец. При неудаче возвращает 0. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЧитатьФ-(фссылка:ЦЕЛ; память+:ОБХОД.Ячейки; размер:ЦЕЛ):ЦЕЛ; 
(* Читает из файла по ссылке <фссылка> в <память> данные размером <размер> ячеек.
 * Возвращает число прочитанных ячеек. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПисатьФ-(фссылка:ЦЕЛ; память-:ОБХОД.Ячейки; размер:ЦЕЛ); 
(* Записывает в <фссылка> из <память> данные размером <размер> ячеек. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СвойстваФ-(имя-:ЦЕПЬ):МНОЖ; 
(* Возвращает свойства файла <имя>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СменаСвойствФ-(имя-:ЦЕПЬ; свойства:МНОЖ); 
(* Меняет свойства файла <имя> на <свойства>. Свойства можно
 * получать, объединяя постоянные <сф_>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПозицияФ-(фссылка:ЦЕЛ):ЦЕЛ; 
(* Возвращает позицию, отсчитываемую от начала открытого файла с ссылкой <фссылка>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СменаПозицииФ-(фссылка,позиция:ЦЕЛ); 
(* Меняет позицию в открытом файле с сылкой <фссылка> на <позиция>,
 * отсчитываемую от начала файла. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПервыйПоискФ-(путь-:ЦЕПЬ; поиск+:ПоискФ):КЛЮЧ; 
(* Начинает поиск файлов в каталоге по образцу <путь>.
 * Например, "C:\Глагол\*.отд". При успешном завершении возвращает
 * ВКЛ, а результаты поиска заносятся в поисковый набор <поиск>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СледующийПоискФ-(поиск+:ПоискФ):КЛЮЧ; 
(* Продолжает поиск начатый действием <ПервыйПоискФ>. При успешном завершении
 * возвращает ВКЛ и результаты поиска заносятся в поисковый набор <поиск>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОкончитьПоискФ-(поиск+:ПоискФ); 
(* Оканчивает поиск начатый <ПервыйПоискФ>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ТекущийПутьФ-(дискпуть+:ЦЕПЬ); 
(* Записывает в <дискпуть> текущий путь. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА МестоФ-(имя-,место+:ЦЕПЬ); 
(* Переводит имя файла <имя> в местоположение файла <место>. Относительное
 * имя <имя> может содержать ".\" и "..". Если <имя> не содержит название
 * диска, то подставляется название текущего диска. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПолучитьКомСтроку-(куда+:ЦЕПЬ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВзятьПамять-(размер:ЦЕЛ):ЦЕЛ; 
(* Берёт у ОС кусок памяти в <размер> ячеек и обнуляет его.
 * Возвращает <адрес> этого куска и ссылку Win на него.
 * <ссылка> равная 0 означает, что Win не выделила память. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтдатьПамять-(адрес:ЦЕЛ); 
(* Отдаёт в ОС кусок памяти, взятый до этого с помощью ВзятьПамять. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЦепочкуВОбменник-(цепь-:ЦЕПЬ); 
ЗАДАЧА РазмерЦепочкиОбменника-():ЦЕЛ; 
ЗАДАЧА ЦепочкуИзОбменника-(цепь+:ЦЕПЬ); 
ЗАДАЧА ЧитатьИзПерОкружения-(имя-,значение+:ЦЕПЬ); 
ЗАДАЧА ПисатьВПерОкружения-(имя-,значение-:ЦЕПЬ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Вызов-(комСтрока-:ЦЕПЬ); 
(* Цель: отработка команды ОС без завершения оболочки ОС
 * До:    <комСтрока> - отрабатываемая командная строка *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВызовВФайл-(комСтрока-,имяФ-:ЦЕПЬ); 
(* Цель: отработка команды ОС с сохранением вывода в текстовый файл 
 *        и завершением оболочки ОС
 * До:    <комСтрока> - отрабатываемая командная строка
 *        <имяФ>      - имя выходного текстового файла *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВинЗнакВКодКлавиши-(знак:ЗНАК):ЦЕЛ; 
(* Цель: перевод знака в код соответствующей клавиши *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА АдресЗадачи-(ссылка:ЦЕЛ; имя-:ЦЕПЬ):ЦЕЛ; 
(* Возвращает адрес задачи из связанной по ссылке <ссылка> ДПБ,
 * имя которой <имя>. *)
 
 

ОТДЕЛ КОС;

(* НАЗНАЧЕНИЕ: взаимодействие с КОС - Консольной Оконной Системой *)

(* используемые Win задачи *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetConsoleMode(
 hConsoleHandle,
 dwMode:ЦЕЛ);                           ВЫЗОВ "SetConsoleMode"                 ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetNumberOfConsoleInputEvents(
 hConsoleInput,
 lpNumberOfEvents+:ЦЕЛ);                ВЫЗОВ "GetNumberOfConsoleInputEvents" ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ReadConsoleInput(
 hConsoleInput:ЦЕЛ; 
 lpBuffer+:ОтМышки; 
 nLength,
 lpNumberOfEventsRead+:ЦЕЛ);            ВЫЗОВ "ReadConsoleInputW"             ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА WaitForSingleObject(
 hHandle,
 dwMilliseconds:ЦЕЛ);                   ВЫЗОВ "WaitForSingleObject"           ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ReadConsoleOutputCharacter(
 hConsoleOutput:ЦЕЛ; 
 lpCharacter+:ЗНАК; 
 nLength,
 dwReadCoord,
 lpNumberOfCharsRead+:ЦЕЛ);             ВЫЗОВ "ReadConsoleOutputCharacterW"   ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА WriteConsoleOutputCharacter(
 hConsoleOutput:ЦЕЛ; 
 lpCharacter+:ЗНАК; 
 nLength,
 dwWriteCoord,
 lpNumberOfCharsWritten+:ЦЕЛ);          ВЫЗОВ "WriteConsoleOutputCharacterW"  ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ReadConsoleOutputAttribute(
 hConsoleOutput:ЦЕЛ; 
 lpAttribute+:ЗНАК; 
 nLength,
 dwReadCoord,
 lpNumberOfAttrsRead+:ЦЕЛ);             ВЫЗОВ "ReadConsoleOutputAttribute"    ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА WriteConsoleOutputAttribute(
 hConsoleOutput:ЦЕЛ; 
 lpAttribute+:ЗНАК; 
 nLength,
 dwWriteCoord,
 lpNumberOfAttrsWritten+:ЦЕЛ);          ВЫЗОВ "WriteConsoleOutputAttribute"   ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА WriteConsoleOutput(
 hConsoleOutput:ЦЕЛ; 
 lpBuffer-:ЦвЗнак.Строка; 
 dwBufferSize,
 dwBufferCoord:ЦЕЛ; 
 lpWriteRegion-:Область);               ВЫЗОВ "WriteConsoleOutputW"           ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetConsoleCursorPosition(
 hConsoleOutput,
 dwCursorPosition:ЦЕЛ);                 ВЫЗОВ "SetConsoleCursorPosition"      ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetConsoleCursorInfo(
 hConsoleOutput:ЦЕЛ; 
 lpConsoleCursorInfo+:СостояниеУказки); ВЫЗОВ "SetConsoleCursorInfo"          ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ScrollConsoleScreenBuffer(
 hConsoleOutput:ЦЕЛ; 
 lpScrollRectangle+,
 lpClipRectangle+:Область; 
 dwDestinationOrigin:ЦЕЛ; 
 lpFill-:ЦвЗнак.Вид);                   ВЫЗОВ "ScrollConsoleScreenBufferW"    ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetLargestConsoleWindowSize(
 hConsoleOutput:ЦЕЛ):ЦЕЛ;               ВЫЗОВ "GetLargestConsoleWindowSize"   ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetConsoleScreenBufferSize(
 hConsoleOutput,dwSize:ЦЕЛ);            ВЫЗОВ "SetConsoleScreenBufferSize"    ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetConsoleWindowInfo(
 hConsoleOutput,
 bAbsolute:ЦЕЛ; 
 lpConsoleWindow-:Область);             ВЫЗОВ "SetConsoleWindowInfo"          ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА timeSetEvent(
 uDelay,
 uResolution:ЦЕЛ; 
 lpTimerProc:TIMERPROC; 
 dwUser,
 fuEvent:ЦЕЛ):ЦЕЛ;                      ВЫЗОВ "timeSetEvent"                  ИЗ "winmm.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА timeKillEvent(uTimerID:ЦЕЛ);     ВЫЗОВ "timeKillEvent"                 ИЗ "winmm.dll"; 

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА* Часы(uID,uMsg,dwUser,dw1,dw2:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Подготовить-(задачаЧасы:ВидЗадачиЧасы); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Отработать-; 
(* заглушка для совместимости с ГОС *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПоказатьОкно-; 
(* заглушка для совместимости с ГОС *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СоздатьЧасы-(номер,время:ЦЕЛ):ЦЕЛ; 
(* Цель: добавляет новые, или заменяет старые часы
 * До:   <номер> - опознавательный номер часов
 *       <время> - время повторения срабатывания данных часов в мс *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьЧасы-(часы:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РазмерЭкрана-(строк+,колонок+:ЦЕЛ); 
(* Цель: возвращает размер экрана *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзменитьРазмерОкна-(строк,колонок:ЦЕЛ); 
(* Цель: изменить размер окна приложения *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Опрос-(отКлавиш+:Ввод.ОтКлавиш;  отМышки+:Ввод.ОтМышки):ЦЕЛ; 
ЗАДАЧА ПереместитьУказку-(с,к:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РазмерУказки-(размер:ЦЕЛ); 
(* <размер> указывается в процентах,
 * при <размер> = 0 указка убирается с экрана *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПисатьЗнак-(с,к:ЦЕЛ; зн:ЗНАК); 
ЗАДАЧА ЧитатьЗнак-(с,к:ЦЕЛ):ЗНАК; 
ЗАДАЧА ПисатьЦвет-(с,к:ЦЕЛ; цв:ЗНАК); 
ЗАДАЧА ЧитатьЦвет-(с,к:ЦЕЛ):ЗНАК; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Вверх-(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид); 
(* Цель: сдвиг содержимого заданной области вверх
 * До:    <вс>,<лк>,<нс>,<пк> - границы области на окне
 *        <новЗнак>           - знак для заполнения освободившегося места *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Вниз-(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид); 
(* Цель: сдвиг содержимого данной области вниз
 * До:    <вс>,<лк>,<нс>,<пк> - границы области на окне
 *        <новЗнак>           - знак для заполнения освободившегося места *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПисатьСтроку-(цвСтрока-:ЦвЗнак.Строка; с,к,длина:ЦЕЛ); 
(* Цель: отрисовка содержимого строки 
 * До:    <с>,<к> - начало строки на экране
 *        <длина> - длина строки *)


ОТДЕЛ ГОС;

(* НАЗНАЧЕНИЕ: взаимодействие с ГОС - Графической Оконной Системой *)

(******************************************************************************
 * Взаимодействие с ОС Win32
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetModuleHandle(lpModuleName:ЦЕЛ):ЦЕЛ;        ВЫЗОВ "GetModuleHandleW" ИЗ "kernel32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА CreateWindowEx(
 dwExStyle:ЦЕЛ; 
 lpClassName-,
 lpWindowName-:ЦЕПЬ; 
 dwStyle,
 X,Y,
 nWidth,nHeight,
 hWndParent,
 hMenu,
 hInstance,
 lpParam:ЦЕЛ):ЦЕЛ;    ВЫЗОВ "CreateWindowExW" ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetMessage(
 lpMsg+:MSG; 
 hWnd,
 wMsgFilterMin,
 wMsgFilterMax:ЦЕЛ);  ВЫЗОВ "GetMessageW" ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА PeekMessage(
 lpMsg+:MSG; 
 hWnd,
 wMsgFilterMin,
 wMsgFilterMax,
 wRemoveMsg:ЦЕЛ):ЦЕЛ; ВЫЗОВ "PeekMessageW" ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА DispatchMessage(lpMsg+:MSG);                    ВЫЗОВ "DispatchMessageW" ИЗ "user32.dll"; 
ЗАДАЧА BeginPaint(hWnd:ЦЕЛ; lpPaint+:PAINTSTRUCT):ЦЕЛ; ВЫЗОВ "BeginPaint"       ИЗ "user32.dll"; 
ЗАДАЧА EndPaint(hWnd:ЦЕЛ; lpPaint+:PAINTSTRUCT);       ВЫЗОВ "EndPaint"         ИЗ "user32.dll"; 
ЗАДАЧА GetClientRect(hWnd:ЦЕЛ; lpRect+:RECT);          ВЫЗОВ "GetClientRect"    ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА InvalidateRect(hWnd:ЦЕЛ; 
                     lpRect-:RECT; 
                     bErase:ЦЕЛ);                     ВЫЗОВ "InvalidateRect"   ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА DefWindowProc(hWnd,Msg,wParam,lParam:ЦЕЛ):ЦЕЛ;  ВЫЗОВ "DefWindowProcW"   ИЗ "user32.dll"; 
ЗАДАЧА LoadIcon(hInstance,lpIconName:ЦЕЛ):ЦЕЛ;         ВЫЗОВ "LoadIconW"        ИЗ "user32.dll"; 
ЗАДАЧА LoadCursor(hInstance:ЦЕЛ; lpCursorName:ЦЕЛ):ЦЕЛ; ВЫЗОВ "LoadCursorW"      ИЗ "user32.dll"; 
ЗАДАЧА RegisterClass(lpWndClass+:WNDCLASS);            ВЫЗОВ "RegisterClassW"   ИЗ "user32.dll"; 
ЗАДАЧА ShowWindow(hWnd,nCmdShow:ЦЕЛ);                  ВЫЗОВ "ShowWindow"       ИЗ "user32.dll"; 
ЗАДАЧА GetDC(hWnd:ЦЕЛ):ЦЕЛ;                            ВЫЗОВ "GetDC"            ИЗ "user32.dll"; 
ЗАДАЧА ReleaseDC(hWnd,hdc:ЦЕЛ);                        ВЫЗОВ "ReleaseDC"        ИЗ "user32.dll"; 
ЗАДАЧА CreateCaret(hWnd,hBitmap,nWidth,nHeight:ЦЕЛ);   ВЫЗОВ "CreateCaret"      ИЗ "user32.dll"; 
ЗАДАЧА SetCaretPos(X,Y:ЦЕЛ);                           ВЫЗОВ "SetCaretPos"      ИЗ "user32.dll"; 
ЗАДАЧА ShowCaret(hWnd:ЦЕЛ);                            ВЫЗОВ "ShowCaret"        ИЗ "user32.dll"; 
ЗАДАЧА DestroyCaret();                                 ВЫЗОВ "DestroyCaret"     ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА AdjustWindowRect(lpRect+:RECT; 
                     dwStyle,
                     bMenu:ЦЕЛ);                      ВЫЗОВ "AdjustWindowRect" ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetWindowPos(hWnd,hWndIA,X,Y,cx,cy,uFlags:ЦЕЛ); ВЫЗОВ "SetWindowPos"     ИЗ "user32.dll"; 
ЗАДАЧА GetKeyboardState(состояние+:СостояниеКлавиш);   ВЫЗОВ "GetKeyboardState" ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ToUnicode(
 wVirtKey,
 wScanCode:ЦЕЛ; 
 состояние+:СостояниеКлавиш; 
 знак+:ЗНАК; 
 cchBuff,wFlags:ЦЕЛ);                                 ВЫЗОВ "ToUnicode"        ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SetTimer(окно,номер,время:ЦЕЛ; задача:TIMERPROC):ЦЕЛ; ВЫЗОВ "SetTimer"   ИЗ "user32.dll"; 
ЗАДАЧА KillTimer(окно,номер:ЦЕЛ);                      ВЫЗОВ "KillTimer"        ИЗ "user32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ExtTextOut(
 hdc,
 x,y,
 fuOptions:ЦЕЛ; 
 lprc+:RECT; 
 lpString+:ЗНАК; 
 cbCount,lpDx:ЦЕЛ);                              ВЫЗОВ "ExtTextOutW"           ИЗ "gdi32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetTextExtentPoint32(
 hdc:ЦЕЛ; 
 lpString-:ЦЕПЬ; 
 chars:ЦЕЛ; 
 lpSize+:SIZE);                                  ВЫЗОВ "GetTextExtentPoint32W" ИЗ "gdi32.dll"; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА SelectObject(hdc,hgdiobj:ЦЕЛ);             ВЫЗОВ "SelectObject"          ИЗ "gdi32.dll"; 
ЗАДАЧА CreateFontIndirect(lplf-:LOGFONT):ЦЕЛ;     ВЫЗОВ "CreateFontIndirectW"   ИЗ "gdi32.dll"; 
ЗАДАЧА DeleteObject(hObject:ЦЕЛ);                 ВЫЗОВ "DeleteObject"          ИЗ "gdi32.dll"; 
ЗАДАЧА GetDeviceCaps(hdc,nIndex:ЦЕЛ):ЦЕЛ;         ВЫЗОВ "GetDeviceCaps"         ИЗ "gdi32.dll"; 
ЗАДАЧА SetTextColor(hdc,crColor:ЦЕЛ);             ВЫЗОВ "SetTextColor"          ИЗ "gdi32.dll"; 
ЗАДАЧА SetBkColor(hdc,crColor:ЦЕЛ);               ВЫЗОВ "SetBkColor"            ИЗ "gdi32.dll"; 
ЗАДАЧА SetTextAlign(_para1,para2:ЦЕЛ);            ВЫЗОВ "SetTextAlign"          ИЗ "gdi32.dll"; 
 
 

(******************************************************************************
 * Знаки на экране
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СоздатьУказку; 
ЗАДАЧА УдалитьУказку; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Запятнать(вс,лк,нс,пк:ЦЕЛ); 
(* Цель: пометить данную область, как требующую перирисовки
 * До:    <вс>,<лк>,<нс>,<пк> - границы области *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Отрисовка; 
ЗАДАЧА Клавиши(код,мкод:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА* ОконнаяЗадача(hWnd,message,wParam,lParam:ЦЕЛ):ЦЕЛ; 
(* Вызывается из ОС *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Подготовить-(имяПриложения-, имяШрифта-:ЦЕПЬ; 
 размерШрифта:ЦЕЛ; 
 задачаЧасы:ВидЗадачиЧасы); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Отработать-; 
(* Цель: внутренняя отработка ОС накопившихся посылок *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПоказатьОкно-; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СоздатьЧасы-(номер,время:ЦЕЛ):ЦЕЛ; 
(* Цель: добавляет новые, или заменяет старые часы
 * До:    <номер> - опознавательный номер часов
 *        <время> - время повторения срабатывания данных часов в мс
 * Ответ: номер для удаления часов *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьЧасы-(часы:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РазмерЭкрана-(строк+,колонок+:ЦЕЛ); 
(* Цель: возвращает размер экрана *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзменитьРазмерОкна-(строк,колонок:ЦЕЛ); 
(* Цель: изменить размер окна *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Опрос-(отКлавиш+:Ввод.ОтКлавиш; отМышки+:Ввод.ОтМышки):ЦЕЛ; 
(* Цель: опрос ОС на наличие посылок от пользователя *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПереместитьУказку-(с,к:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РазмерУказки-(размер:ЦЕЛ); 
(* <размер> указывается в процентах,
 * при <размер> = 0 указка убирается с экрана *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПисатьЦвет-(с,к:ЦЕЛ; цвет:ЗНАК); 
ЗАДАЧА ПисатьЗнак-(с,к:ЦЕЛ; знак:ЗНАК); 
ЗАДАЧА ЧитатьЗнак-(с,к:ЦЕЛ):ЗНАК; 
ЗАДАЧА ЧитатьЦвет-(с,к:ЦЕЛ):ЗНАК; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПисатьСтроку-(цвСтрока-:ЦвЗнак.Строка; с,к,длина:ЦЕЛ); 
(* Цель: отрисовка содержимого строки 
 * До:    <с>,<к> - начало строки на экране
 *        <длина> - длина строки *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Вверх-(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид); 
(* Цель: сдвиг содержимого заданной области окна вверх
 * До:    <вс>,<лк>,<нс>,<пк> - границы области
 *        <новЗнак>           - знак для заполнения освободившегося места *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Вниз-(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид); 
(* Цель: сдвиг содержимого данной области окна вниз
 * До:    <вс>,<лк>,<нс>,<пк> - границы области
 *        <новЗнак>           - знак для заполнения освободившегося места *)


ОТДЕЛ Заграница;

(****************************************************************************** 
 * НАЗНАЧЕНИЕ:
 *         взаимодействие с внешними ДПБ - Динамически Подключаемые Библиотеки
 *                                 ( DLL - Dinamic Link Library )
 ******************************************************************************)

(* Вызов задач по их адресу *)
ЗАДАЧА Вызов0- (адр:ЦЕЛ):ЦЕЛ; КОН Вызов0; 
ЗАДАЧА Вызов1- (адр,п1:ЦЕЛ):ЦЕЛ; КОН Вызов1; 
ЗАДАЧА Вызов2- (адр,п1,п2:ЦЕЛ):ЦЕЛ; КОН Вызов2; 
ЗАДАЧА Вызов3- (адр,п1,п2,п3:ЦЕЛ):ЦЕЛ; КОН Вызов3; 
ЗАДАЧА Вызов4- (адр,п1,п2,п3,п4:ЦЕЛ):ЦЕЛ; КОН Вызов4; 
ЗАДАЧА Вызов5- (адр,п1,п2,п3,п4,п5:ЦЕЛ):ЦЕЛ; КОН Вызов5; 
ЗАДАЧА Вызов6- (адр,п1,п2,п3,п4,п5,п6:ЦЕЛ):ЦЕЛ; КОН Вызов6; 
ЗАДАЧА Вызов7- (адр,п1,п2,п3,п4,п5,п6,п7:ЦЕЛ):ЦЕЛ; КОН Вызов7; 
ЗАДАЧА Вызов8- (адр,п1,п2,п3,п4,п5,п6,п7,п8:ЦЕЛ):ЦЕЛ; КОН Вызов8; 
ЗАДАЧА Вызов9- (адр,п1,п2,п3,п4,п5,п6,п7,п8,п9:ЦЕЛ):ЦЕЛ; КОН Вызов9; 
ЗАДАЧА Вызов10-(адр,п1,п2,п3,п4,п5,п6,п7,п8,п9,п10:ЦЕЛ):ЦЕЛ; КОН Вызов10; 
 
 

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


▼ Вект.отд Вектора
▼ Матр.отд Матрицы
▼ Компл.отд Функции комплексной переменной
▼ КомплВект.отд Вектора комплексных чисел
▼ КомплМатр.отд Матрицы с комплексными числами
▼ Матем.отд основные математические функции
▼ МатрВВ.отд ввод/вывод Матриц и Векторов
▼ Собств.отд собственные Значения и Вектора
▼ Текст.отд преобразование чисел в (из) текст(а)
▼ Функц.отд специальные Функции



ОТДЕЛ Вект;

(* НАЗНАЧЕНИЕ: Вектора (РЯДы) *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА мин-(в-:Вид):Матем.Вещ;  (* наименьший элемент вектора *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА макс-(в-:Вид):Матем.Вещ; (* наибольший элемент вектора *)


ОТДЕЛ Матр;

(* НАЗНАЧЕНИЕ: Матрицы *)

(******************************************************************************
 * Переписывание Матриц и Векторов
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОбменСтрок-(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 >    - матрица после РазложитьНа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 для решения систем уравнений;
 ******************************************************************************
 * Прим:  текст этой задачи переписан из подпрограммы SVD пакета EISPACK
 * До:    < 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 разложение прямоугольной матрицы  (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 > - вектор решения *)


ОТДЕЛ Компл;

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

(******************************************************************************
 * Основные математические функции                                  
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА кор-(z-:Вид; m,n:ЦЕЛ; к+:Вид); 
(* Задача кор должна вычислить все 'n' корней 'a' изменяя 'm' от 0 до n-1 *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА квкор-(z-,к+:Вид); 

(******************************************************************************
 * Логарифмические, показательные и степенные функции
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ln-(z-,к+:Вид); 
ЗАДАЧА lnГ-(z-,к+:Вид); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА lnГприбл(z-,к+:Вид); 
(* Это NBS приближение Г функции в области (9 < Re(z) < 10; 0 < Im(z) < 10). 
 * Другие значения можно получить из: ln Г(z+1) = ln z + ln Г(z) *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА exp-(z-,к+:Вид); 

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА степКЦ-(z-:Вид; n:ЦЕЛ; к+:Вид); 
ЗАДАЧА степКВ-(z-:Вид; x:Вещ; к+:Вид); 
ЗАДАЧА степКК-(a-,b-,к+:Вид); 

(******************************************************************************
 * Тригонометрические функции
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА sin-(z-,к+:Вид); 
ЗАДАЧА arcsin-(z-,к+:Вид); 
ЗАДАЧА cos-(z-,к+:Вид); 
ЗАДАЧА arccos-(z-,к+:Вид); 
ЗАДАЧА tg-(z-,к+:Вид); 
ЗАДАЧА arctg-(z-,к+:Вид); 

(******************************************************************************
 * Гиперболические функции (вещественного и комплексного аргумента)
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА sh-(z-,к+:Вид); 
ЗАДАЧА ch-(z-,к+:Вид); 
ЗАДАЧА th-(z-,к+:Вид); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Arsh-(z-,к+:Вид); 
(* arsh(z) = -i*arcsin(i*z) *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Arch-(z-,к+:Вид); 
(* arch(z) = знак(y+i(1-x))*i*arccos(z) где z = x+iY *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Arth-(z-,к+:Вид); 
(* arth(z) = -i*arctg(i*z) *)

(******************************************************************************
 * шаблоны операций, знак числа и обмен 2-х чисел
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА алгВид-(x,y:Вещ; к+:Вид); 
ЗАДАЧА тригВид-(r,тета:Вещ; к+:Вид); 
ЗАДАЧА мод-(z-:Вид):Вещ; 
ЗАДАЧА arg-(z-:Вид):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА знак-(z-:Вид):ЦЕЛ; 
ЗАДАЧА обмен-(к1+,к2+:Вид); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА отр-(z-,к+:Вид); 
ЗАДАЧА сопр-(z-,к+:Вид); 
ЗАДАЧА доб-(a-,b-,к+:Вид); 
ЗАДАЧА выч-(a-,b-,к+:Вид); 
ЗАДАЧА умн-(a-,b-,к+:Вид); 
ЗАДАЧА умнВ-(a-:Вид; b:Вещ; к+:Вид); 
ЗАДАЧА дел-(a-,b-,к+:Вид); 
ЗАДАЧА делВ-(a-:Вид; b:Вещ; к+:Вид); 


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

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

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА степень2-(x:ЦЕЛ):ЦЕЛ; 
(* Цель: найти такую <степень>, что 2<степень> = < x >
 ******************************************************************************
 * Ответ: <степень> или -1, если её не существует *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА БитыНаоборот-(биты,всегоБит:ЦЕЛ):ЦЕЛ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Преобразовать-(угол:Вещ; вход-,выход+:Вид); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА БПФ-(вход-,выход+:Вид); 
(* Цель: прямое Быстрое Преобразование Фурье (БПФ)
 ******************************************************************************
 * До:    <вход>  - временная последовательность
 * После: <выход> - частотный спектр *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОБПФ-(вход-,выход+:Вид); 
(* Цель: обратное Быстрое Преобразование Фурье (оБПФ)
 ******************************************************************************
 * До:    <вход>  - частотный спектр
 * После: <выход> - временная последовательность *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПФ-(гармоника:ЦЕЛ; вход-:Вид; выход+:Компл.Вид); 
(* Цель: Преобразование Фурье для одной заданной гармоники
 ******************************************************************************
 * До:    <гармоника> - номер гармоники
 *        <вход>      - временная последовательность
 * После: <выход> - коэффициенты разложения на заданной гармонике *)


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

(* НАЗНАЧЕНИЕ: Матрицы с комплексными числами *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РазложитьНа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.

(******************************************************************************
 * Основные математические функции                                  
 ******************************************************************************)

ЗАДАЧА кв-(x:Вещ):Вещ;                  (* x*x = x2 *)
ЗАДАЧА квкор-(x:Вещ):Вещ;               (* x0,5 *)

(******************************************************************************
 * Логарифмические и показательные функции
 ******************************************************************************)

ЗАДАЧА ln-(x:Вещ):Вещ;                   
ЗАДАЧА log2-(x:Вещ):Вещ;  (* ln по основанию 2 *)
ЗАДАЧА log10-(x:Вещ):Вещ; (* десятичный логарифм *)
ЗАДАЧА loga-(x,a:Вещ):Вещ; (* ln по основанию a *)

ЗАДАЧА exp-(x:Вещ):Вещ;           
ЗАДАЧА exp2-(x:Вещ):Вещ;  (* 2x *)
ЗАДАЧА exp10-(x:Вещ):Вещ; (* 10x *)

(******************************************************************************
 * Степенные функции
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА степВЦ-(x:Вещ; n:ЦЕЛ):Вещ; 
(* Вычисление xn с помощью умножений *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА степВВ-(x,y:Вещ):Вещ; 
(* Вычисление xy = exp(y*ln(x)), для x > 0. Если  целый, то степВЦ() *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Пифагор-(x,y:Вещ):Вещ; 
(* Вычисление квкор(x2+y2) без разрушения при переполнении и недополнении *)

(******************************************************************************
 * Тригонометрические функции
 ******************************************************************************)

ЗАДАЧА sin-(x:Вещ):Вещ; 
ЗАДАЧА arcsin-(x:Вещ):Вещ;       
ЗАДАЧА cos-(x:Вещ):Вещ; 
ЗАДАЧА arccos-(x:Вещ):Вещ;       
ЗАДАЧА sincos-(x,sinX+,cosX+:Вещ); 
ЗАДАЧА tg-(x:Вещ):Вещ;          
ЗАДАЧА arctg-(x:Вещ):Вещ; 
ЗАДАЧА arctg2-(y,x:Вещ):Вещ;    (* угол (Ox,OM) для m(x,y) *)
ЗАДАЧА уголВПи-(тета:Вещ):Вещ;  (* угол в -ПИ..ПИ *)

(******************************************************************************
 * Гиперболические функции
 ******************************************************************************)

ЗАДАЧА 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+:Матр.Вид; проходов:ЦЕЛ; точность:Вещ;
             СВ+:Матр.Вид; сз+:Вект.Вид):ЦЕЛ; 
(* Цель: вычисление с. значений и с. векторов методом Якоби
 ******************************************************************************
 * До:    < 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'}, то параметры
 *   применяются не к аргументу, а к знаку <вид>.
 *      Числовые параметры могут извлекаться из текущего аргумента,
 *   если в качестве параметра выступает знак '*'.
 *      Знак 't' обозначает отсуп заданной ширины. По умолчанию ширина = 8.
 ******************************************************************************)

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

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЗадомНаПеред(цепь+:ЦЕПЬ; дл:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЦел(число:ШИРЦЕЛ; основание,нужноцифр:ЦЕЛ; текст+:Число; дл+:ЦЕЛ); 
(* Преобразовать целое число в текстовое представление.
 ******************************************************************************
 * До:    <число>     - преобразуемое число
 *        <основание> - основание системы счисления
 *        <нужноцифр> - нужное количество цифр результата
 * После: <текст>     - текстовое представление числа
 *        <дл>        - его длина *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЦел10-(число:ШИРЦЕЛ; нужноцифр:ЦЕЛ; текст+:Число); 
(* Преобразовать целое число в десятичное представление.
 ******************************************************************************
 * До:    <число>     - преобразуемое число
 *        <нужноцифр> - нужное количество цифр результата
 * После: <текст>     - текстовое представление числа *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЦел16-(число:ШИРЦЕЛ; нужноцифр:ЦЕЛ; текст+:Число); 
(* Преобразовать целое число в шестнадцатеричное представление.
 ******************************************************************************
 * До:    <число>     - преобразуемое число
 *        <нужноцифр> - нужное количество цифр результата
 * После: <текст>     - текстовое представление числа *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЧЦелВещ(описание-:ЦЕПЬ; царги-:РядЧЦел; варги-:РядЧВещ; текст+:ЦЕПЬ); 
(* Составить текст с 4-мя числами, используя описание текста.
 ******************************************************************************
 * До:    <описание> - цепочка знаков, которая содержит обычные знаки,
 *                     которые просто переписываются в <текст> и описатели
 *                     представлений чисел (см. их описание выше)
 *        <царги>    - аргументы преобразования целого вида
 *        <варги>    - аргументы преобразования вещественного вида
 * После: <текст>    - выходной текст *)
  ЗАДАЧА СледАрг(); 
  (* увеличить, если возможно, <номарг> *)
  ЗАДАЧА ЗнакО(описание-:ЦЕПЬ); 
  (* читать следующий знак из <описание> *)
  ЗАДАЧА ЧислоО(описание-:ЦЕПЬ; царги-:РядЧЦел); 
  (* читать <число> для параметра из <описание> или из текущего аргумена *)
  ЗАДАЧА ПараметрыО(описание-:ЦЕПЬ; царги-:РядЧЦел); 
  (* читать параметры <ширина>, <точность>, <налево> и <номарг> из <описание> *)
  ЗАДАЧА ЗнакТ(зн:ЗНАК; текст+:ЦЕПЬ); 
  (* писать <зн> в <текст> *)
  ЗАДАЧА ЗнакиТ(знаки-:ЦЕПЬ; дл:ЦЕЛ; текст+:ЦЕПЬ); 
  (* писать <дл> знаков <знаки> в <текст> *)
  ЗАДАЧА ПробелыТ(кво:ЦЕЛ; текст+:ЦЕПЬ); 
  (* писать <кво> пробелов в <текст> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЧЦел-(описание-:ЦЕПЬ; а0,а1,а2,а3:ШИРЦЕЛ; текст+:ЦЕПЬ); 
(* Составить текст с 4-мя целыми числами, используя описание текста.
 ******************************************************************************
 * До:    <описание> - см. ИзЧЦелВещ()
 *        < а0 >, ... ,< а4 > - аргументы преобразования
 * После: <текст>    - выходной текст *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЧВещ-(описание-:ЦЕПЬ; а0,а1,а2,а3:ШИРВЕЩ; текст+:ЦЕПЬ); 
(* Составить текст с 4-мя вещественными числами, используя описание текста.
 ******************************************************************************
 * До:    <описание> - см. ИзЧЦелВещ()
 *        < а0 >, ... ,< а4 > - аргументы преобразования
 * После: <текст>    - выходной текст *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВЦелое-(цепь-:ЦЕПЬ; поз+:ЦЕЛ; цОтвет+:ШИРЦЕЛ; вОтвет+:ШИРВЕЩ):КЛЮЧ; 
(* Считывает из <цепь> начиная с позиции <поз> знаковое представление числа.
 * Если это представление целого числа, то возвращает ВКЛ и записывает
 * значение числа в <цОтвет>, иначе возвращает ОТКЛ, а значение записывает
 * в <вОтвет>. 
 * По окончании <поз> указывает на следующий за числом знак. *)
  ЗАДАЧА ЧитатьЗнак; 
  (* Читает следующий <знак> из <цепь> *)
  ЗАДАЧА ДесятьВ(x:ЦЕЛ):ШИРВЕЩ; 
  (* 10 в степени  *)
  ЗАДАЧА ЗнакВЦел(знак:ЗНАК; система16:КЛЮЧ):ЦЕЛ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВШирВещ-(цепь-:ЦЕПЬ; поз+:ЦЕЛ):ШИРВЕЩ; 
(* Считывает из <цепь> начиная с позиции <поз> знаковое представление числа
 * и переводит его в ШИРВЕЩ вид. По окончании <поз> указывает на следующий
 * за числом знак *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВВещ-(цепь-:ЦЕПЬ; поз+:ЦЕЛ):ВЕЩ; 
(* Считывает из <цепь> начиная с позиции <поз> знаковое представление числа
 * и переводит его в ВЕЩ вид. По окончании <поз> указывает на следующий
 * за числом знак *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВШирЦел-(цепь-:ЦЕПЬ; поз+:ЦЕЛ):ШИРЦЕЛ; 
(* Считывает из <цепь> начиная с позиции <поз> знаковое представление числа
 * и переводит его в ШИРЦЕЛ вид. По окончании <поз> указывает на следующий
 * за числом знак *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВЦел-(цепь-:ЦЕПЬ; поз+:ЦЕЛ):ЦЕЛ; 
(* Считывает из <цепь> начиная с позиции <поз> знаковое представление числа
 * и переводит его в ЦЕЛ вид. По окончании <поз> указывает
 * на следующий за числом знак *)


ОТДЕЛ Функц;

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

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЗнакГ-(x:Вещ):ЦЕЛ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Stirf(x:Вещ):Вещ; 
(* Формула Стирлинга для Гамма функции:
 * Г(x) = Sqrt(2*Pi) x^(x-.5) exp(-x) (1+1/x p(1/x))
 * где p(x) является многочленом *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GamSmall(x1,z:Вещ):Вещ; 
(* Гамма функция для малых аргументов *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА StirfL(x:Вещ):Вещ; 
(* Приближение ln(Г) формулой Стирлинга при x >= 13 *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Г-(x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА lnГ-(x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НепГ-(a,x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДопГ-(a,x:Вещ):Вещ; 

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Факториал-(x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА БиномКоэф-(x,y:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Бета-(x,y:Вещ):Вещ; 
(* Бета(x,y) = Г(x)*Г(y)/Г(x+y) *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА PSeries(a,b,x:Вещ):Вещ; 
(* Степенной ряд для неполного бета интеграла.
 * Используется когда b*x мало. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА CFrac1(a,b,x:Вещ):Вещ; 
(* Цепная дробь для расширения # 1 в неполном бета интеграле. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА CFrac2(a,b,x:Вещ):Вещ; 
(* Цепная дробь для расширения # 2 в неполном бета интеграле. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НепБета-(a,b,x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА erf-(x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА erfc-(x:Вещ):Вещ; 

(******************************************************************************
 * Распределение вероятностей
 ******************************************************************************)

(******************************************************************************
 * Биномиальное распределение с вероятностью < p > и числом испытаний < n >
 ******************************************************************************)

ЗАДАЧА БиномВ-(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ; 
ЗАДАЧА БиномП-(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ; 

(******************************************************************************
 * Распределение Пуассона со средним значением Mu
 ******************************************************************************)

ЗАДАЧА ПуассонВ-(Mu:Вещ; k:ЦЕЛ):Вещ; 
ЗАДАЧА ПуассонП-(Mu:Вещ; k:ЦЕЛ):Вещ; 

(******************************************************************************
 * Стандартный нормальный закон распределения
 ******************************************************************************)

ЗАДАЧА НормПл-(x:Вещ):Вещ; 
ЗАДАЧА НормП-(x:Вещ):Вещ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОбрНорм-(p:Вещ):Вещ; 
(* Обратная функция нормального распределения
 * Возвращает такое , при котором площадь под графиком функции плотности
 * вероятности Гауссова распределения (от -БСК до < x >) равна < p >. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НормВ-(x:Вещ):Вещ; 

(******************************************************************************
 * Распределение Стьюдента с < Nu > степенями свободы
 ******************************************************************************)

ЗАДАЧА СтьюдентПл-(Nu:ЦЕЛ; x:Вещ):Вещ; 
ЗАДАЧА СтьюдентП-(Nu:ЦЕЛ; x:Вещ):Вещ; 
ЗАДАЧА СтьюдентВ-(Nu:ЦЕЛ; x:Вещ):Вещ; 

(******************************************************************************
 * Распределение Хи квадрат с < Nu > степенями свободы
 ******************************************************************************)

ЗАДАЧА Хи2Пл-(Nu:ЦЕЛ; x:Вещ):Вещ; 
ЗАДАЧА Хи2П-(Nu:ЦЕЛ; x:Вещ):Вещ; 
ЗАДАЧА Хи2В-(Nu:ЦЕЛ; x:Вещ):Вещ; 

(******************************************************************************
 * Распределение Фишера с < Nu1 > и < Nu2 > степенями свободы
 ******************************************************************************)

ЗАДАЧА ФишерПл-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ; 
ЗАДАЧА ФишерП-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ; 
ЗАДАЧА ФишерВ-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ; 

(******************************************************************************
 * Экспоненциальное распределение
 ******************************************************************************)

ЗАДАЧА ЭкспПл-(a,x:Вещ):Вещ; 
ЗАДАЧА ЭкспП-(a,x:Вещ):Вещ; 

(******************************************************************************
 * Бета распределение
 ******************************************************************************)

ЗАДАЧА БетаПл-(a,b,x:Вещ):Вещ; 
ЗАДАЧА БетаП-(a,b,x:Вещ):Вещ; 

(******************************************************************************
 * Гамма распределение
 ******************************************************************************)

ЗАДАЧА ГПл-(a,b,x:Вещ):Вещ; 
ЗАДАЧА ГП-(a,b,x:Вещ):Вещ; 
 
 

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


▼ Ряд.отд упорядочивание и поиск в Рядах
▼ Знак.отд распознавание и преобразование Знаков
▼ Цепь.отд обработка цепочек Знаков (ЦЕПЬ)
▼ Набор.отд построение списков Наборов (предок наборов)
▼ Перевод.отд преобразование Знаков и Цепочек в латиницу и обратно
▼ Асм.отд дополнительные задачи на ассемблере



ОТДЕЛ Ряд;

(* НАЗНАЧЕНИЕ: упорядочивание и поиск в Рядах *)

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


ОТДЕЛ Знак;

(* НАЗНАЧЕНИЕ: распознавание и преобразование Знаков *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Цифра-(знак:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <знак> является цифрой. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА БукваЦифра-(знак:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <знак> является буквой или цифрой. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВСлове-(знак:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <знак> является знаком слова. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВДос-(знак:ЗНАК):ЯЧЦЕЛ; 
(* Переводит <знак> в Дос-код знака. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВВин-(знак:ЗНАК):ЯЧЦЕЛ; 
(* Переводит <знак> в Вин-код знака. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзДос-(код:ЯЧЦЕЛ):ЗНАК; 
(* Переводит Дос-<код> знака в знак. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзВин-(код:ЯЧЦЕЛ):ЗНАК; 
(* Переводит Вин-<код> знака в знак. *)


ОТДЕЛ Цепь;

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

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Сравнить-(ц1-,ц2-:ЦЕПЬ):ЦЕЛ; 
(* Возвращает результат алфавитного сравнения цепочек <ц1> и <ц2>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПозицияЗнака-(зн:ЗНАК; цепь-:ЦЕПЬ; поз:ЦЕЛ):ЦЕЛ; 
(* Возвращает позицию первого знака <зн> в цепочке <цепь>. Поиск начинается
 * с позиции <поз>. Если <зн> нет в <цепь>, то возвращает -1. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Позиция-(обр-,цепь-:ЦЕПЬ; поз:ЦЕЛ):ЦЕЛ; 
(* Возвращает позицию первого включения образца <обр> в цепочке <цепь>. Поиск
 * начинается с позиции <поз>. Если <обр> нет в <цепь>, то возвращает -1. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Начало-(обр-,цепь-:ЦЕПЬ):КЛЮЧ; 
(* Возвращает ВКЛ если образец <обр> является началом цепочки <цепь>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПохожееНачало-(обр-,цепь-:ЦЕПЬ):КЛЮЧ; 
(* Возвращает ВКЛ если образец <обр> похож на начало цепочки <цепь>
 * (сравнение идёт без учёта заглавных и строчных букв). *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Часть-(откуда-,куда+:ЦЕПЬ; откудап,дл:ЦЕЛ); 
(* Переписывает часть цепочки <откуда>, начиная с позиции <откудап>, и
 * длиной <дл> знаков в цепочку <куда>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Добавить-(куда+,откуда-:ЦЕПЬ); 
(* Добавляет в конец цепочки <куда> цепочку <откуда>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьЗнак-(куда+:ЦЕПЬ; зн:ЗНАК); 
(* Добавляет в конец цепочки <куда> знак <зн>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьЧасть-(откуда-,куда+:ЦЕПЬ; откудап,дл:ЦЕЛ); 
(* Переписывает часть цепочки <откуда>, начиная с позиции <откудап>, и
 * длиной <дл> знаков в конец цепочки <куда>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВЗаглавные-(цепь+:ЦЕПЬ); 
(* Переводит все буквы цепочки <цепь> в заглавные буквы. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВСтрочные-(цепь+:ЦЕПЬ); 
(* Переводит все буквы цепочки <цепь> в строчные буквы. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВДос-(цепь-:ЦЕПЬ; дос+:РЯД ИЗ ЯЧЦЕЛ); 
(* Переводит все знаки цепочки <цепь> в Дос знаки ряда <дос>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВВин-(цепь-:ЦЕПЬ; вин+:РЯД ИЗ ЯЧЦЕЛ); 
(* Переводит все знаки цепочки <цепь> в Вин знаки ряда <вин>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзВин-(вин-:РЯД ИЗ ЯЧЦЕЛ; цепь+:ЦЕПЬ); 
(* Переводит все Вин знаки ряда <вин> в цепочку знаков. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзДос-(дос-:РЯД ИЗ ЯЧЦЕЛ; цепь+:ЦЕПЬ); 
(* Переводит все Дос знаки ряда <дос> в цепочку знаков. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Удалить-(откуда+:ЦЕПЬ; удалп,удалдл:ЦЕЛ); 
(* Удаляет <удалдл> знаков цепочки <откуда>, начиная с позиции <удалп>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьКонПробелы-(цепь+:ЦЕПЬ); 
(* Удаляет пробелы в конце цепочки <цепь>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьНачПробелы-(цепь+:ЦЕПЬ); 
(* Удаляет пробелы в начале цепочки <цепь>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьПробелы-(цепь+:ЦЕПЬ); 
(* Удаляет пробелы в начале и конце цепочки <цепь>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВставитьЗнак-(зн:ЗНАК; куда+:ЦЕПЬ; кудап:ЦЕЛ); 
(* Вставляет знак <зн> в цепочку <куда> в позиции <кудап>,
 * если для этого есть место. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Вставить-(откуда-,куда+:ЦЕПЬ; кудап:ЦЕЛ); 
(* Вставляет цепочку <откуда> в цепочку <куда> в позиции <кудап>.
 * Копирует знаков не больше, чем умещается в <куда>. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьКонПробелы-(цепь+:ЦЕПЬ; дл:ЦЕЛ); 
(* Увеличивает длину цепочки <цепь> до <дл> знаков, добавляя в конец пробелы.
 * Если <цепь> уже достаточной длины, то не производит никаких изменений. *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьНачПробелы-(цепь+:ЦЕПЬ; дл:ЦЕЛ); 
(* Увеличивает длину цепочки <цепь> до <дл> знаков, добавляя в начало пробелы.
 * Если <цепь> уже достаточной длины, то не производит никаких изменений. *)


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

(* НАЗНАЧЕНИЕ: преобразование Знаков и Цепочек в латиницу и обратно *)

(* Соответствие русских букв и латинских буквосочетаний:
А - A    К - K    Х - H
Б - B    Л - L    Ц - C 
В - V    М - M    Ч - CH
Г - G    Н - N    Ш - SH
Д - D    О - O    Щ - SC
Е - JE   П - P    Ъ - O
Ё - JO   Р - R    Ы - Y
Ж - X    С - S    Ь - E
З - Z    Т - T    Э - E
И - I    У - U    Ю - JU
Й - J    Ф - F    Я - JA *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВЛат-(рус-,лат+:ЦЕПЬ); 


ОТДЕЛ Набор;

(* НАЗНАЧЕНИЕ: построение списков Наборов (предок наборов) *)

ВИД
  Вид-     = НАБОР КОН;   (* опорный вид (абстрактный предок) других НАБОРов *)
  Доступ-  = ДОСТУП К Вид; 

  Звено-   = ДОСТУП К ВидЗвено; 
  ВидЗвено- = НАБОР
    данные-:Доступ; 
    след-  :Звено 
  КОН; 

  Список- = НАБОР         (* ДвуКонцевая Очередь из односвязных звеньев *)
    звеньев-:ЦЕЛ; 
    первоеЗвено:Звено; 
    последнееЗвено:Звено
  КОН; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОчиститьСписок-(список+:Список); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВКонецСписка-(список+:Список; данные:Доступ); 
(* Цель: создать и присоединить новое звено вместе с данными в конец списка *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПервоеЗвено-(список-:Список):Звено; 
(* Цель: выдать первое звено списка *)


ОТДЕЛ Асм;

(* НАЗНАЧЕНИЕ: дополнительные задачи на Ассемблере *)

(*======================= Математические функции =============================*)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Особенность-(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 >   - исходное число (0 <= x < 10)
 *        <цифр>  - требуется цифр после запятой
 *        ДЛ(<цифры>) должна быть больше <цифр> и больше 18!
 * После: <цифры[0]> - десятки < x >
 *        <цифры[1]> - единицы < x >
 *        <цифры[2..цифр]> - цифры < x > после запятой *)

(*======================= Работа с битами ====================================*)

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

(*======================= Разное =============================================*)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОбнулитьПамять-(адрес,размер:ЦЕЛ);            (* размер в байтах *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПриёмникиДПБ-(hInstance+,reason+,param+:ЦЕЛ); 
 
 

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


▼ Закладки.отд закладки на Холсты в главном окне
▼ Записка.отд изменяемый многострочный Текст
▼ Кнопка.отд Кнопка, потомок Надела
▼ Крестик.отд Крестик, потомок Надела
▼ Метка.отд метка к Наделу (потомок надела)
▼ Надел.отд область на экране для ввода/вывода текстовых данных (предок видимых наделов)
▼ Памятка.отд хранилище для ПолеПамятки
▼ Подложка.отд подложка под Поле
▼ Поле.отд экранное Поле с наделами для ввода и вывода текстовых данных
▼ ПолеВвода.отд ввод строки Текста
▼ ПолеЗамена.отд вывод Вопроса о замене
▼ ПолеПамятки.отд поле для Памятки
▼ ПолеСВопросом.отд вывод Вопроса
▼ ПолеСВосклицанием.отд вывод Записки
▼ Рамка.отд размеры и местоположение для Поле и Надел
▼ Строки.отд строки для Памятки
▼ СтрокиПамятки.отд строки для Памятки
▼ Точка.отд Точка
▼ Холст.отд Холст - надел для работы с текстом (подобие консольного ФАР-редактора)
▼ Черта.отд горизонтальная или вертикальная Черта (чёрта)



ОТДЕЛ Закладки;

(* НАЗНАЧЕНИЕ: закладки на Холсты в главном окне *)

ЗАДАЧА ПодготовитьПостоянные; 
ЗАДАЧА ОтрисовкаЗаголовка(закладки:Доступ); 
ЗАДАЧА ОтрисовкаОткрытой(закладки:Доступ); 
ЗАДАЧА ВыровнятьПервую(закладки:Доступ); 
ЗАДАЧА НажатаМышка(закладки:Доступ; км:ЦЕЛ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Открыть-(закладки:Доступ; оИмяФ-:Файл.ВПолного); 
(* открывает закладку на холст с заданным именем файла *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Удалить-(закладки:Доступ); 
(* удаляет открытую закладку *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Следующая-(закладки:Доступ); 
(* выбор следующей закладки *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СИзменениями-(закладки:Доступ):КЛЮЧ; 
(* Есть изменённые холсты? *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СохранитьИзменённые-(закладки:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ):Доступ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВыводОшибки-(закладки:Доступ; имяФ-:Файл.ВПолного; с,к:ЦЕЛ; текст-:ЦЕПЬ); 


ОТДЕЛ Записка;

(* НАЗНАЧЕНИЕ: изменяемый многострочный Текст *)

ЗАДАЧА Отрисовка(записка:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Изменить-(записка:Доступ; текст-:ЦЕПЬ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИзЧЦел-(записка:Доступ; описание-:ЦЕПЬ; ц1,ц2,ц3,ц4:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ; текст-:ЦЕПЬ):Доступ; 


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

(* НАЗНАЧЕНИЕ: Кнопка, потомок надела *)

ЗАДАЧА Работа(кнопка:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево:ЦЕЛ; надпись-:ЦЕПЬ; действие:ЦЕЛ; выбираемая:КЛЮЧ):Доступ; 


ОТДЕЛ Крестик;

(* НАЗНАЧЕНИЕ: Крестик, потомок надела *)

ЗАДАЧА Отрисовка(крестик:Доступ); 
ЗАДАЧА Работа(крестик:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево:ЦЕЛ; цепь-:ЦЕПЬ):Доступ; 


ОТДЕЛ Метка;

(* НАЗНАЧЕНИЕ: метка к Наделу (потомок надела) *)

ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево:ЦЕЛ; надпись-:ЦЕПЬ; надел:Надел.Доступ):Доступ; 


ОТДЕЛ Надел;

(*=============================================================================* 
 * НАЗНАЧЕНИЕ: надел это область на экранном поле для ввода/вывода текстовых
 * данных. Вид Надел является основой для видимых наделов. Также в данном отделе
 * содержатся вспомогательные задачи для вывода надписей с выделяемыми
 * особым цветом буквами - буквицами. При нажатии Альт-кода буквицы
 * происходит переключение клавиатурного ввода на надел, в надписи которого
 * содержится данная буквица.
 *=============================================================================*)
ВИД
  Доступ- = ДОСТУП К Вид; 
  Задача = ЗАДАЧА(надел:Доступ; посылка+:Ввод.Посылка); 
  Вид- = НАБОР(Рамка.Вид) 
    следующий-  :Доступ; (* следующий надел на поле *)
    предыдущий- :Доступ; (* предыдущий надел на поле *)
    Приём-      :Задача; (* приём и обработка посылок *)
    признаки-   :МНОЖ;   (* признаки (множество из признаков) *)
    состояние+  :ЦЕЛ;    (* текущее состояние (одно из с...) *)
    поле+       :Рамка.Доступ;    (* поле, содержащее надел *)
    цветНадписи+:ЦЕПЬ[Состояний]; (* цвет надписи в определённом состоянии *)
    цветБуквицы+:ЦЕПЬ[Состояний]; (* цвет буквицы в определённом состоянии *)
  КОН; 

  Надпись-=ЦЕПЬ[64]; (* перед буквицей ставится знак "~" *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Очистить-(надел:Доступ); 
(* Заполняет надел пробелом с цветом надписи текущего состояния *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВыводНадписи-(надел:Доступ; надпись-:Надпись; с:ЦЕЛ); 
(* Цель: отобразить надпись на заданной строке надела
 * До:    <надел>    - данный надел
 *        <надпись>  - цепочка отображаемых знаков
 *        <с>        - строка надела, на которую необходимо вывести надпись *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СчитатьНадпись-(цепь-:ЦЕПЬ; надпись+:Надпись; длина+,буквица+:ЦЕЛ); 
(* Цель: переписать <цепь> в <надпись> и найти её длину и последнюю буквицу
 * До:    <цепь>    - исходная цепочка
 *        <надпись> - переписанная <цепь>
 * После: <длина>   - длина отображаемых знаков
 *        <буквица> - код для последней подсвеченной буквы *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Добавить-(наделы+,надел:Доступ); 
(* Добавить <надел> в конец двусвязанного списка <наделы> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Подготовить-(надел:Доступ; 
                   верх,лево,строк,колонок:ЦЕЛ; 
                   признаки:МНОЖ; 
                   Приём:Задача); 


ОТДЕЛ Памятка;

(* НАЗНАЧЕНИЕ: хранилище для ПолеПамятки *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьСтроку-(памятка:Доступ; цепь-:ЦЕПЬ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПохожаяСтрока-(памятка:Доступ; цепь-:ЦЕПЬ):ЦЕЛ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Найти-(имя-:ЦЕПЬ):Доступ; 
(* Поиск памятки *)

(******************************************************************************)
(* ******* чтение и запись в поток ******* *)
(******************************************************************************)

ЗАДАЧА ПисатьПамятку(поток:Писать.Поток; памятка:Доступ); 
ЗАДАЧА ЧитатьПамятку(поток:Читать.Поток):Доступ; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЧитатьНастройки-(поток:Читать.Поток); 
ЗАДАЧА ПисатьНастройки-(поток:Писать.Поток); 


ОТДЕЛ Подложка;

(* НАЗНАЧЕНИЕ: подложка под Поле *)

ЗАДАЧА Отрисовка(подложка:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(* приём посылок извне *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ; заголовок-:ЦЕПЬ):Доступ; 


ОТДЕЛ Поле;

(*=============================================================================*
 * НАЗНАЧЕНИЕ: на Поле располагаются Наделы ввода/вывода текстовых данных
 * Поле следит за передачей посылок от Клавиатуры и Мышки к выбранному Наделу.
 *=============================================================================*)
ВИД
  Доступ- = ДОСТУП К Вид; 
  Задача = ЗАДАЧА(поле:Доступ; посылка+:Ввод.Посылка); 
  Вид- = НАБОР(Рамка.Вид)
    наделы        :Надел.Доступ; (* связка наделов поля           *)
    выбранныйНадел:Надел.Доступ; (* надел, выбранный человеком    *)
    Приём         :Задача;       (* оставшийся ввод и управление  *)
    состояние+    :ЦЕЛ;          (* м.б. как выше, так и др.      *)
  КОН; 
                                 (* посылки к наделам *)
  Отрисовка- = НАБОР(Ввод.Посылка) КОН; 
  Буквица-   = НАБОР(Ввод.Посылка)
               буквица+:ЦЕЛ
             КОН; 

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Рисовать-(поле:Доступ); 
(* Перерисовывает все наделы поля *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОкноНаВсёПоле-(поле:Доступ); 
(* Выравнивает окно по границе поля *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СостояниеНаделу-(надел:Надел.Доступ; состояние:ЦЕЛ); 
(* изменить состояние надела *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПереместитьВвод(поле:Доступ; дальше:КЛЮЧ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Проверить-(поле:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьНадел-(поле:Доступ; надел:Надел.Доступ); 
(* Добавляет <надел> в <поле> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ; 
                               окружение:Доступ; 
                                середина:КЛЮЧ; 
                                   Приём:Задача):Доступ; 


ОТДЕЛ ПолеВвода;

(* НАЗНАЧЕНИЕ: ввод строки Текста *)

ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); 
(* получить и обработать управляющие послания *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Выполнить-(
(* Цель: осуществить ввод строки текста *)
(* До: *)   
    заголовок-:ЦЕПЬ;       (* заголовок подложки             *)
    колонок:ЦЕЛ;           (* желаемая ширина строки ввода   *)
    окружение:Поле.Доступ; (* окружающее поле                *)
    номерСправки:ЦЕЛ;      (* номер справки или 0            *)
    примечание-:ЦЕПЬ;      (* дополнительное примечание      *)
(* Примечение: если <цепь> = "", то начальное значение берётся из Памятки *)
(* После: *)                                                
    цепь+:ЦЕПЬ             (* полученный текст               *)
(* Ответ: *)
):ЦЕЛ;                     (* состояние поля после отработки *)


(* НАЗНАЧЕНИЕ: вывод Вопроса о замене *)

ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); 
(* получить и обработать управляющие послания *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Выполнить-():ЦЕЛ;                    (* состояние поля после отработки *)
(* Цель: осуществить вывод вопроса *)
(* До: *)   
    окружение:Поле.Доступ; (* окружающее поле *)
    образец-:ЦЕПЬ;         (* искомая цепочка *)
    замена-:ЦЕПЬ           (* новая цепочка   *)
(* Ответ: *)


(* НАЗНАЧЕНИЕ: поле для Памятки *)

ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); 
(* получить и обработать управляющие послания *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Выполнить-(холст:Надел.Доступ; 
                 памятка:Памятка.Доступ; 
                 окружение:Поле.Доступ):ЦЕЛ; 
(* Выбрать строку памятки *)


(* НАЗНАЧЕНИЕ: вывод Вопроса *)

ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); 
(* получить и обработать управляющие послания *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Выполнить-(
(* Цель: осуществить вывод вопроса *)
(* До: *)   
    заголовок-:ЦЕПЬ;       (* заголовок подложки             *)
    строк:ЦЕЛ;             (* желаемая высота текста         *)
    колонок:ЦЕЛ;           (* желаемая ширина текста         *)
    окружение:Поле.Доступ; (* окружающее поле                *)
    номерСправки:ЦЕЛ;      (* номер справки или 0            *)
    текст-:ЦЕПЬ            (* текст вопроса                  *)
(* Ответ: *)
):ЦЕЛ;                     (* состояние поля после отработки *)


(* НАЗНАЧЕНИЕ: вывод Записки *)

ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); 
(* получить и обработать управляющие послания *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Выполнить-(
(* Цель: осуществить вывод текста *)
(* До: *)   
    заголовок-:ЦЕПЬ;       (* заголовок подложки     *)
    строк:ЦЕЛ;             (* желаемая высота текста *)
    колонок:ЦЕЛ;           (* желаемая ширина текста *)
    окружение:Поле.Доступ; (* окружающее поле        *)
    текст-:ЦЕПЬ            (* выводимый текст        *)
); 


ОТДЕЛ Рамка;

(* НАЗНАЧЕНИЕ: размеры и местоположение для Поле и Надел *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Выставить-(рамка,поле:Доступ); 
(* выставляет границы <рамка> на экране, учитывая положение окружающего <поле> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Подготовить-(рамка:Доступ; верх,лево,строк,колонок:ЦЕЛ); 


ОТДЕЛ Строки;

(* НАЗНАЧЕНИЕ: строки для Памятки *)

ЗАДАЧА Отрисовка(строки:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ; памятка:Памятка.Доступ):Доступ; 


(* НАЗНАЧЕНИЕ: строки для Памятки *)

ЗАДАЧА Отрисовка(строки:Доступ); 
ЗАДАЧА СтрокуВыше(строки:Доступ); 
ЗАДАЧА СтрокуНиже(строки:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ; памятка:Памятка.Доступ):Доступ; 


ОТДЕЛ Точка;

(* НАЗНАЧЕНИЕ: Точка *)

ЗАДАЧА Отрисовка(точка:Доступ); 
ЗАДАЧА Работа(точка:Доступ); 
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево:ЦЕЛ; надписи-:РЯД ИЗ Надел.Надпись):Доступ; 


ОТДЕЛ Холст;

(*=============================================================================* 
 * НАЗНАЧЕНИЕ: надел для работы с текстом (подобие консольного ФАР-редактора).
 *   Часть холста, которая ограничена рамкой, выводится на экран.
 * Текст хранится построчно в виде связки строк. Строка состоит из ряда
 * знаков <цепь>. Местоположение на холсте
 * определяется точкой с порядковым номером строки <с> и колонки <к>.
 * При изменении текста все связанные с холстом точки соответственно сдвигаются.
 * Такими точками являются вешки, границы выделенного куска текста и указка
 * ввода.
 * 
 * Разделители строк в запоминаемых кусках текста:
 *   0DX - для простого куска
 *   0AX - для вертикального куска
 *=============================================================================*)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОграничитьЦел(ц+,от,до:ЦЕЛ); 

(****************************************************************************** 
 * работа со строками
 ******************************************************************************)

ЗАДАЧА ПредыдущаяСтрока(строка:Строка; смещение:ЦЕЛ):Строка; 
ЗАДАЧА СледующаяСтрока(строка:Строка; смещение:ЦЕЛ):Строка; 
ЗАДАЧА СоседняяСтрока(строка:Строка; смещение:ЦЕЛ):Строка; 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УбратьПробелы(строка:Строка); 
(* Цель: удалить конечные пробелы на строке *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДобавитьПробелы(строка:Строка; к:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РаскраситьСтроку(строка:Строка; цвета+:ЗнакиСтроки):ЦЕЛ; 
(* Цель: раскрашивает строку в соответствии с правилами Глагола
 * До:    <строка> - данная строка
 * После: <цвета>  - цвет каждого знака из <строка.цепь>
 * Ответ: уровень пояснений в конце строки *)
  ЗАДАЧА ЧитатьЗнак;  (* Цель: читать из строки следующий знак *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УровеньКонцаСтроки(строка:Строка):ЦЕЛ; 
(* Цель: вычислить уровень пояснений в конце данной строки *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВыставитьУровеньСтрок(строка:Строка; уровень:ЦЕЛ); 
(* Цель: исправить уровень пояснений данной и всех последующих строк 
 * До:    <уровень> - новый уровень *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НовыйУровеньСтрок(строка:Строка); 
(* Цель: исправить уровень пояснений всех последующих строк *)

(****************************************************************************** 
 * работа с памятью удаляемых знаков
 ******************************************************************************)

ЗАДАЧА ОчиститьЗнаки(знаки+:Знаки); 
ЗАДАЧА ЗнакВЗнаки(знаки+:Знаки; знак:ЗНАК); 
ЗАДАЧА ЗнакИзЗнаков(знаки+:Знаки):ЗНАК; 

(****************************************************************************** 
 * разное
 ******************************************************************************)

ЗАДАЧА РамкаПоУказке(холст:Доступ); 
ЗАДАЧА ПоставитьУказку(холст:Доступ; с,к:ЦЕЛ); 
ЗАДАЧА ПереместитьУказку(холст:Доступ); 
ЗАДАЧА РазмерУказки(холст:Доступ); 

(****************************************************************************** 
 * изменение указанного текста
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьЗнак(холст:Доступ); 
  ЗАДАЧА ПравуюТочкуВлево(точка+,опора-:Точка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВставитьЗнак(холст:Доступ; знак:ЗНАК); 
  ЗАДАЧА ПравуюТочкуВправо(точка+,опора-:Точка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьСтроку(холст:Доступ); 
  ЗАДАЧА НижнююТочкуВверх(точка+,опора-:Точка); 
  ЗАДАЧА НижнююТочкуВверхВерт(точка+,опора-:Точка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ВставитьСтроку(холст:Доступ; строка:Строка); 
(* Вставляет строку перед тек. строкой *)
  ЗАДАЧА НижнююТочкуВниз(точка+,опора-:Точка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СклеитьСтроку(холст:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА РазделитьСтроку(холст:Доступ); 
  ЗАДАЧА НижнююТочкуВниз(точка+,опора-:Точка); 
  ЗАДАЧА НижнююТочкуВнизВерт(точка+,опора-:Точка); 

(****************************************************************************** 
 * отметка куска
 ******************************************************************************)

ЗАДАЧА ВнутриОтметки(отметка-:Отметка; точка-:Точка):КЛЮЧ; 
ЗАДАЧА ИзменитьОтметку(отметка+:Отметка; с,к:ЦЕЛ); 
ЗАДАЧА ОчиститьОтметку(отметка+:Отметка); 
ЗАДАЧА НачалоОтметки(отметка+:Отметка; вертикальная:КЛЮЧ; с,к:ЦЕЛ); 

(****************************************************************************** 
 * работа с отмеченным куском
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтметкуВЗнаки(холст:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЗнакиВОтметку(холст:Доступ); 
(* записывает знаки в текущее положение указки *)
(* приходится явно исправлять уровень пояснений, т.к. при отмене указка
 * может находится и в невидимой области холста *)
  ЗАДАЧА ПравуюТочкуВправо(точка+:Точка; с,к,длина:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СтеретьОтметку(холст:Доступ); 
(* приходится явно исправлять уровень пояснений, т.к. отметка
 * может находится и в невидимой области холста *)
  ЗАДАЧА СтеретьКолонки(строка:Строка; первк,послк:ЦЕЛ); 
  ЗАДАЧА ПравуюТочкуВлево(точка+:Точка); 
  ЗАДАЧА НижнююТочкуВверх(точка+:Точка); 

(****************************************************************************** 
 * отрисовка на экране
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтрисовкаСтроки(холст:Доступ; строка:Строка; с,лк,вс:ЦЕЛ); 
(* Цель: отрисовка части строки
 * До:    
 *        <с>       - номер строки на холсте
 *        <лк>,<вс> - начало отображения строки на экране *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтрисовкаТекущейСтроки(холст:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтрисовкаНизаРамки(холст:Доступ; строка:Строка; с,ср:ЦЕЛ); 
(* Цель: отрисовка содержимого низа рамки *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтрисовкаРамки(холст:Доступ); 
(* Цель: отрисовка содержимого рамки *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Отрисовка(холст:Доступ); 
(* Цель: отрисовка холста и указки *)

(****************************************************************************** 
 * отработка действий человека
 ******************************************************************************)

ЗАДАЧА ДСтрокуВверх(холст:Доступ); 
ЗАДАЧА ДПрокруткаВверх(холст:Доступ); 
ЗАДАЧА ДСтраницуВверх(холст:Доступ); 
ЗАДАЧА ДСтраницуВниз(холст:Доступ); 
ЗАДАЧА ДСтрокуВниз(холст:Доступ); 
ЗАДАЧА ДПрокруткаВниз(холст:Доступ); 
ЗАДАЧА ДЗнакВлевоСУпором(холст:Доступ); 
ЗАДАЧА ДЗнакВлево(холст:Доступ); 
ЗАДАЧА ДЗнакВправо(холст:Доступ); 
ЗАДАЧА ДСловоВлево(холст:Доступ); 
ЗАДАЧА ДСловоВправо(холст:Доступ); 
ЗАДАЧА ДВНачалоСтроки(холст:Доступ); 
ЗАДАЧА ДВКонецСтроки(холст:Доступ); 
ЗАДАЧА ДВНачалоХолста(холст:Доступ); 
ЗАДАЧА ДВКонецХолста(холст:Доступ); 
ЗАДАЧА ДВНачалоРамки(холст:Доступ); 
ЗАДАЧА ДВКонецРамки(холст:Доступ); 
ЗАДАЧА ДСменаЗамены(холст:Доступ); 
ЗАДАЧА ДЗаменитьЗнак(холст:Доступ; знак:ЗНАК); 
ЗАДАЧА ОДЗаменитьЗнак(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДВставитьЗнак(холст:Доступ; знак:ЗНАК); 
ЗАДАЧА ОДВставитьЗнак(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДУдалитьЗнак(холст:Доступ); 
ЗАДАЧА ОДУдалитьЗнак(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДУдалитьЗнакСлева(холст:Доступ); 
ЗАДАЧА ОДУдалитьЗнакСлева(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДУдалитьДоКонцаСтроки(холст:Доступ); 
ЗАДАЧА ОДУдалитьДоКонцаСтроки(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДУдалитьСтроку(холст:Доступ); 
ЗАДАЧА ОДУдалитьСтроку(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДУдалитьСловоСлева(холст:Доступ); 
ЗАДАЧА ДУдалитьСловоСправа(холст:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДНоваяСтрока(холст:Доступ); 
(* Создать новую строку (разделить старую) и сделать отступ в начале *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОДНоваяСтрока(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДПереместитьУказку(холст:Доступ; кр,ср:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДВешка(холст:Доступ; вешка:ЦЕЛ; поставить:КЛЮЧ); 
  ЗАДАЧА Ограничить(с+,к+,пс:ЦЕЛ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ДСнятьОтметку(холст:Доступ); 
ЗАДАЧА ДОтметитьВсё(холст:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьОтметку(холст:Доступ); 
(* неявное действие *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОУдалитьОтметку(холст:Доступ; отмена-:Отмена); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПереписатьЗнакиВОтметку(холст:Доступ); 
(* невидимое действие *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОПереписатьЗнакиВОтметку(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДПеренестиОтметку(холст:Доступ); 
ЗАДАЧА ДПереписатьОтметку(холст:Доступ); 
ЗАДАЧА ДУдалитьОтметку(холст:Доступ); 

(****************************************************************************** 
 * работа с памяткой (для однострочного холста)
 ******************************************************************************)

ЗАДАЧА ДНайтиСтрокуВПамятке(холст:Доступ); 
ЗАДАЧА ДВыбратьСтрокуВПамятке(холст:Доступ); 

(******************************************************************************)
(* ******* работа с обменником ******* *)
(******************************************************************************)

ЗАДАЧА ЗнакиВОбменник(холст:Доступ); 
ЗАДАЧА ОбменникВЗнаки(холст:Доступ); 
ЗАДАЧА ДПереписатьВОбменник(холст:Доступ); 
ЗАДАЧА ДПеренестиВОбменник(холст:Доступ); 
ЗАДАЧА ДПереписатьИзОбменника(холст:Доступ); 

(****************************************************************************** 
 * сдвиг отметки или строки
 ******************************************************************************)

ЗАДАЧА ВставляемПервыйПробел(строка:Строка):КЛЮЧ; 
ЗАДАЧА УбираемПервыйПробел(строка:Строка):КЛЮЧ; 
ЗАДАЧА ТочкуВправо(точка+:Точка; с:ЦЕЛ); 
ЗАДАЧА ТочкуВлево(точка+:Точка; с:ЦЕЛ); 
ЗАДАЧА ДСдвинутьВправо(холст:Доступ); 
ЗАДАЧА ОДСдвинутьВправо(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДСдвинутьВлево(холст:Доступ); 
ЗАДАЧА ОДСдвинутьВлево(холст:Доступ; отмена-:Отмена); 

(****************************************************************************** 
 * работа с отменами
 ******************************************************************************)

ЗАДАЧА ОчиститьОтмены(отмены+:Отмены); 
ЗАДАЧА ПрочитатьОтмену(холст:Доступ; отмена+:Отмена); 
ЗАДАЧА ЗаписатьОтмену(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДобавитьОтмену(холст:Доступ; отмена-:Отмена); 
ЗАДАЧА ДОтменить(холст:Доступ); 
ЗАДАЧА ДОтметкаПеремещение(холст:Доступ; код:ЦЕЛ; упрШифт,упрКонтр,упрАльт:КЛЮЧ); 

(****************************************************************************** 
 * ввод действий
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(* обработка посланий от человека *)

(****************************************************************************** 
 * взаимодействие с холстом
 ******************************************************************************)

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

(******************************************************************************
 * поиск образца
 ******************************************************************************)

ЗАДАЧА ИскатьВСтрокеВперёд(строка:Строка); 
(* Цель: поиск образца из <поиск> в строке <строка>
 *        начиная с колонки <поиск.точка.к> по алгоритму Боуера-Мура *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИскатьВСтрокеНазад(строка:Строка); 
(* Цель: поиск образца из <поиск> в строке <строка>
 *        начиная с колонки <поиск.точка.к> по алгоритму Боуера-Мура *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Искать(холст:Доступ); 
(* Цель: поиск образца из <поиск> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтрисовкаДляЗамены(холст:Доступ); 
(* Цель: выставить рамку в соответствии с точкой поиска
 *       и перерисовать рамку с выделением найденной подстроки *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ЗнакиВставить(холст:Доступ; строка:Строка; начало-:Точка); 
(* Цель: вставить цепочку из <холст.знаки> в <начало> строки <строка> *)
  ЗАДАЧА ПравуюТочкуВправо(точка+:Точка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьЧасть(холст:Доступ; строка:Строка; начало-:Точка; длина:ЦЕЛ); 
  ЗАДАЧА ПравуюТочкуВлево(точка+:Точка); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Заменить(холст:Доступ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОЗаменить(холст:Доступ; отмена-:Отмена); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИскатьЗаменить-(холст:Доступ; далее:КЛЮЧ); 
  ЗАДАЧА ЗаменитьВсё(); 


ОТДЕЛ Черта;

(* НАЗНАЧЕНИЕ: горизонтальная или вертикальная Черта *)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка); 
(* приём посылок извне *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ):Доступ; 


 
 

\Глагол\Отделы\Среда\


▼ СРЕДА.отд   среда для выполнения Глагол-приложений



ОТДЕЛ СРЕДА;

(*============================================================================*
 * НАЗНАЧЕНИЕ: среда для выполнения Глагол-приложений. Распределяет память под* 
 *   создаваемые переменные и выполняет уборку памяти (УП) от неиспользуемых. * 
 *   В исключительных состояниях сохраняет в файл срез значений переменных    * 
 *   запущенных задач.                                                        * 
 *                                                                            * 
 * ПРИМЕЧАНИЯ:                                                                * 
 *   Свободная память запрашивается у ОС кусками. Для создаваемой             * 
 *   переменной из куска памяти выбирается свободный (или нарезается новый)   * 
 *   участок памяти необходимого размера. Свойства участка хранятся в         * 
 *   описателе участка (ОУ), расположенном до значения переменной.            * 
 *   Для уборки памяти используются данные о видах времени выполнения (ДВ),   * 
 *   которые создаются преобразователем Глагола.                              * 
 *   Куски памяти организованны в кольцевой список.                           * 
 *                                                                            * 
 * Размещение ДВ набора в области постоянных:                                 * 
 * ДВ->  вид:4;  |                                                            * 
 *       имя:...; } размерДВ ячеек                                            * 
 *       ...     |                                                            * 
 *       размерДВ     :4;                                                     * 
 *       адр(ДВ.имя)  :4;                                                     * 
 *       размер набора:4;                                                     * 
 * ОВ->  ОВ1:4;  |                                                            * 
 *       ОВ2:4;  |                                                            * 
 *       ...      } ВсегоРасширений шт.                                       * 
 *       0  :4;  |                                                            * 
 *       ...     |                                                            * 
 *       0  :4;  |                                                            * 
 *============================================================================*)

(***************************************************************************
 * Задачи-помощники для работы с видами и переменными Приложения
 ***************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИмяИзОВ-(ов:ЦЕЛ; имя+:ЦЕПЬ); 
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОВИзПер-(пер:ЦЕЛ; ов+:ЦЕЛ); 
   (*
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ИмяВИзПер-(пер:ЦЕЛ; имя+:ЦЕПЬ); 
    *)

(***************************************************************************
 * Задачи для чтения ДВ
 ***************************************************************************)

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

(******************************************************************************
 * Шаги по Уборке Памяти (УП):
 * а) все ранее распределённые участки памяти переводим в разряд
 *    неиспользуемых (выставляем их размеры отрицательными); 
 * б) отмечаем участки памяти всех размещённых переменных доступных на
 *    данный момент как на уровне отдела так и через стек (в том числе и
 *    через переменные доступа), как используемые (выставляем их размеры
 *    положительными); 
 * в) считаем, что оставшиеся участки с отрицательными размерами больше не
 *    используются приложением, и их можно использовать для новых переменных; 
 * г) смежные свободные участки памяти объединяем; 
 * д) целиком свободные куски памяти возвращаем ОС.
 ******************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтметитьВРяду-(нпс,тч+,чслаг,рслаг:ЦЕЛ); 
(* Цель: отметить слагаемые ряда
 * До:    <нпс>   - адрес начала переменной слагаемого
 *        <тч>    - текущий адрес чтения ДВ
 *        <чслаг> - число слагаемых ряда
 *        <рслаг> - размер одного слагаемого *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтмечаемУчПер(пер:ЦЕЛ):КЛЮЧ; 
(* Цель: искать в куче и отметить участок памяти переменной с адресом <пер>
 * Ответ: ВКЛ, если участок ещё не был отмечен *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтметитьВПер(нп,тч+:ЦЕЛ); 
(* Цель: разбирая ДВ, найти размещённые переменные и отметить их участки памяти
 * До:   <нп> - адрес начала области переменных
 *       <тч> - текущий адрес чтения ДВ *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НаборИзД-(нп,ов:ЦЕЛ; Обработка:ЗАДАЧА(нп,тч+:ЦЕЛ)); 
(* Цель: найти размещённые переменные набора и обработать их
 * До:    <нп> - адрес начала области переменных *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтметитьВЗадаче(нп,тч:ЦЕЛ); 
(* Цель: разбирает ДВ задачи, находит размещённые переменные и отмечает их
 *       участки памяти как занятые
 * До:   <нп> - адрес начала переменных задачи (регистр EBP при работе задачи)
 *       <тч> - текущий адрес чтения ДВ *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ОтметитьВОтделе(адрОО:ЦЕЛ); 
(* Цель: разбирает ДВ отдела, находит размещённые переменные и отмечает их
 *       участки памяти как занятые *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА УдалитьСвКуски(); 
(* Цель: найти полностью свободные куски памяти и возвратить их в ОС
 * Прим:  из кольцевого списка удобно удалять последующий кусок
 * После: <теккус>  - адрес начального куска в кольцевом списке кусков
 *        <тексвуч> - адрес первого свободного участка <теккус> *)
   (*
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА ПроверитьКучу-(); 
(* Цель: проверить строение всей кучи *)
    *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА GetEBP-():ЦЕЛ; 
(* Цель: возвратить значение регистра EBP вызвавшей задаче *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НайтиДВЗадачи-(адр,но+,нч+:ЦЕЛ); 
(* Цель: найти задачу и её ДВ по внутреннему адресу задачи <адр>
 * После: <тч> - начальный адрес чтения ДВ
 *        <но> - номер отдела, в котором находится задача или 0 *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Уборка-(); 
(* Цель: найти и объединить неиспользуемые участки памяти
 * После: <теккус>  - адрес начального куска в кольцевом списке кусков
 *        <тексвуч> - адрес первого свободного участка <теккус> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА НаходимСвобУч(размер:ЦЕЛ):КЛЮЧ; 
(* Цель: искать по всем кускам участок памяти не меньше <размер> ячеек
 * Прим:  если находит такой участок, то возвращает ВКЛ и
 * После: <теккус>  - адрес куска из кольцевого списка
 *        <тексвуч> - адрес свободного участка <теккус> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СоздатьКусок(размер:ЦЕЛ); 
(* Цель: запрос у ОС нового куска памяти с полезным размером <размер>
 * После: <теккус>  - адрес нового текущего куска в кольцевом списке кусков
 *        <тексвуч> - адрес первого (и единственного) участка <теккус> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА СоздатьУч(размер:ЦЕЛ):ЦЕЛ; 
(* Цель: создать участок с размером <размер> (в конце <тексвуч>
 *        или весь <тексвуч>) и возвратить его адрес
 * До:    <теккус>  - адрес текущего куска в кольцевом списке кусков
 *        <тексвуч> - адрес достаточно большого свободного участка в <теккус>
 * После: <тексвуч> - бывший или следующий адрес свободного участка *)

(***************************************************************************
 * Задачи, вызываемые из Приложения неявным образом
 ***************************************************************************)

(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Создать-(ов,размер,адрес+:ЦЕЛ); 
(* Цель: поддержка встроенных в Глагол задач:
 *        СОЗДАТЬ(<пер>+:вид)                      - для наборов и рядов
 *        СОЗДАТЬ(<пер>+:вид; <ДЛ1>,...,<ДЛn>:ЦЕЛ) - для открытых рядов
 * До:    <ов>     - описатель вида переменной <пер>
 *                   для рядов и открытых рядов <ов> = 0
 *        <размер> - размер данных у <пер>
 *                   для открытых рядов <размер> = 4+n*4+<ДЛ1>*...*<ДЛn>
 * После: <адрес>  - адрес выделенной памяти заполненной 0-ми,
 *                   четыре ячейки перед <адрес> всегда содержат <ов> *)
(*─────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Присоединить-(адрОО:ЦЕЛ); 
(* Цель: присоединить к среде отдел, где <адрОО> адрес описателя отдела,
 *        расположенного в постоянной области кода
 * Прим:  вызывается однократно для каждого отдела при запуске приложения *)

(***************************************************************************
 * Запись среза значений переменных работающих задач в исключительном состоянии
 ***************************************************************************)

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

 

Главная     ◄рук.по Глаголу   ◄Азбука   2008/Задачи на Глаголе ►   Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   ООП по Вирту ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы

 
Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com