h1. Библиотека DL_I и стандартный чекер для интерактивных задач

*{_}Применение._* Библиотека {{DL_I}} реализует базовые функции player'а при тестировании интерактивных задач; другими словами, она подключается player'ом при компиляции и сокращает объём вводимого с нуля кода.

На данный момент библиотека реализована на Pascal и C++.

h2. Pascal

*{_}Подключение._* Подключение библиотек делается командой +Uses список_через_запятую;+ в начале текста программы:
{code}
Uses
DL_I;
{code}
После подключения библиотеку следует инициализировать (см. _Интерфейс_).

*{_}Интерфейс._* Библиотека предоставляет следующие строковые константы:
* {{Failed}} \- пометка о непринятом тесте (см. {{RageExit}});
* {{Success}} \- пометка о принятом тесте и выводимое чекером сообщение по умолчанию при принятом тесте (см. {{Succeed}});
* {{TesterFail}} \- сообщение, выводимое чекером при преждевременном завершении player'а (при ошибке);
* {{BadIO}} \- сообщение о некорректном вводе, предназначенное для использования с {{RageExit}};
* {{OutOfRange}} \- сообщение о некорректном значении введённой величины, предназначенное для использования с {{RageExit}}.

Также предоставлены следующие процедуры:
{code}
Procedure Init (OutFileName : AnsiString);
{code}
\- процедура инициализации библиотеки, должна быть запущена самой первой (параметр - имя выходного файла player'а).
{code}
Procedure RageExit (ErrMsg : AnsiString); OverLoad;
Procedure RageExit (ErrMsg1 : AnsiString; Number : LongWord; ErrMsg2 : AnsiString); OverLoad;
{code}
\- процедура, выводящая в выходной файл пометку о непройденном тесте и сообщение ErrMsg, которое чекер выводит в комментарии (туда можно поместить информацию о причине отрицательного результата). Для удобства процедура перегружена с параметрами строка-число-строка, на случай, если потребуется вывести число в середине строки; при необходимости более сложных выводов следует пользоваться процедурой +WriteStr+ стандартной библиотеки:
{code}
WriteStr(S, 'Немного текста ', (Pi*R*R):0:10, '/', R*R:10);
RageExit(S);
{code}
{code}
Procedure Succeed (Comment : AnsiString = Success); OverLoad;
Procedure Succeed (Comment1 : AnsiString; Number : LongWord; Comment2 : AnsiString); OverLoad;
{code}
\- процедура, выводящая в выходной файл пометку о пройденном тесте и сообщение Comment, по умолчанию равное Success, которое чекер выводит в комментарии (туда можно поместить дополнительную информацию о результате).

h2. C+\+

*{_}Подключение._* Подключение библиотеки делается командой +\# include <название>+ в начале текста программы:
{code}
# include <DL_I.h>
{code}
После подключения библиотеку следует инициализировать (см. _Интерфейс_).

*{_}Интерфейс._* Библиотека предоставляет следующие строковые константы:
* {{Failed}} \- пометка о непринятом тесте (см. {{RageExit}});
* {{Success}} \- пометка о принятом тесте и выводимое чекером сообщение по умолчанию при принятом тесте (см. {{Succeed}});
* {{TesterFail}} \- сообщение, выводимое чекером при преждевременном завершении player'а (при ошибке);
* {{BadIO}} \- сообщение о некорректном вводе, предназначенное для использования с {{RageExit}};
* {{OutOfRange}} \- сообщение о некорректном значении введённой величины, предназначенное для использования с {{RageExit}}.

Также предоставлены следующие функции:
{code}
void Init (const char* OutFileName);
{code}
\- процедура инициализации библиотеки, должна быть запущена самой первой (параметр - имя выходного файла player'а).
{code}
void RageExit (const char* ErrMsg, ...);
{code}
\- процедура, выводящая в выходной файл пометку о непройденном тесте и сообщение ErrMsg, которое чекер выводит в комментарии (туда можно поместить информацию о причине отрицательного результата). ErrMsg может быть шаблоном строки; можно добавлять любое число дополнительных параметров (параметры такие же, как и у +printf+):
{code}
RageExit("Немного текста %.10lf/%10ld", (double)Pi()*R*R, (long)R*R);
{code}
{code}
void Succeed ();
void Succeed (const char* Comment, ...);
{code}
\- процедура, выводящая в выходной файл пометку о пройденном тесте и сообщение Comment (по умолчанию = Success), которое чекер выводит в комментарии (туда можно поместить дополнительную информацию о результате).

h2. Дополнительно

*{_}Чекер._* Для обработки вывода DL_I существует [стандартный чекер|http://dl.gsu.by/images/agulenko/DL_I_checker.exe] ([исходный код|http://dl.gsu.by/images/agulenko/DL_I_checker.pas]).

*{_}Важные моменты._* Стандартный чекер для интерактивных задач не позволяет тестировать интерактивные задачи, в которых существует возможность
частичного принятия теста (качественная оценка результата). Также, чекер предназначен для player'ов, делающих вывод в формате {{DL_I}}; так что для
player'ов, не использующих эту библиотеку (в частности, сторонних) он неприменим. Поэтому в подобных случаях приходится реализовывать другой чекер
(впрочем, проще всего сделать модификацию этого); файл вывода player'а должен содержать информацию, на основе которой чекер сможет определить результат
тестирования (опять же, за основу можно взять функции из кода {{DL_I}}).

*{_}Исходный код{_}* библиотеки содержится [здесь|http://dl.gsu.by/images/agulenko/DL_I.rar].

*{_}Пример{_}* player'а, написанного с использованием библиотеки {{DL_I}}, содержится [здесь|http://dl.gsu.by/images/agulenko/DL_I_player.pas].

В этом примере тестируемая программа должна угадать натуральное число в заданных пределах; player выводит <{{H}}>, если искомое число больше предлагаемого, <{{L}}> - если меньше, <{{OK}}> - если программа угадала (в этом случае ей надлежит завершить работу).

Примеры установленных задач: [Pascal|], [C++|].