Просмотр источника
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++|]. |