При проведении олимпиад по программированию возникает проблема проверки задач. Обычно используют простой способ запуска готовых программ с ручным вводом данных или с помощью тестовых файлов, а затем идет сравнение результатов с исходными.
Такой способ очень затруднителен. Можно написать bat-файл для быстрой проверки уже созданных exe-файлов (выполняемый код программы после компиляции) на готовых тестовых файлах типа inputNN.txt и outputNN.txt, при этом можно не использовать в программе чтение и вывод в файл. Для проверки совпадений используется стандартная программа ДОС для сравнения двух файлов fc.com.
Если в программе используются входные и выходные файлы, то предварительно исходные файлы для ввода данных нужно перекопировать:
После этого просматриваем файл test.txt и ищем, сколько раз нашлось сочетание "различия не найдены". Это и будет результатом - количество пройденных тестов.
Конечно это тоже "ручная проверка", но очень облегчает работу жюри. Но есть в этом и свои подводные камни, так например в программе на Паскале нельзя использовать модуль CRT и соответствующие вызовы процедур CLRSCR, ReadKey, а также нужно исключить пустые Readln, которые учащиеся оставляют для паузы. Кроме этого не все среды программирования создают exe-файл, например: PascalABC (можно воспользоваться компилятором FreePascal), QBasic (можно использовать Turbo Basic, но не очень помогает). При этом нужно проверять на время выполнения программы на каждом тесте. Как поступить в этом случае? Есть готовые системы проверки, которые можно заранее установить и провести проверку:
- contester (не учитывает проверки всех тестов)
- ejudje
- polygon (созданные туры и задачи размещаются на сайте informatics.mccme.ru)
- система проверки, разработанная Епанешниковым А. И.
Попробуйте и вы с помощью языка программирования создать свою программу проверки тестов (один студент в свое время так и сделал). Удачи!
Такой способ очень затруднителен. Можно написать bat-файл для быстрой проверки уже созданных exe-файлов (выполняемый код программы после компиляции) на готовых тестовых файлах типа inputNN.txt и outputNN.txt, при этом можно не использовать в программе чтение и вывод в файл. Для проверки совпадений используется стандартная программа ДОС для сравнения двух файлов fc.com.
rem taskb.bat name - вызов файла для программы name
echo %1 >test.txt
%1.exe <input01.txt >output.txt
fc.com output.txt output01.txt >>test.txt
%1.exe <input02.txt >output.txt
fc.com output.txt output02.txt >>test.txt
rem скопируйте две строчки столько раз, сколько нужно
rem проверить тестов, например до 10:
%1.exe <input10.txt >output.txt
fc.com output.txt output10.txt >>test.txt
Если в программе используются входные и выходные файлы, то предварительно исходные файлы для ввода данных нужно перекопировать:
rem taskb.bat name
echo %1 >test.txt
copy input01.txt input.txt
%1.ex
fc.com output.txt output01.txt >>test.txt
copy input02.txt input.txt
%1.ex
fc.com output.txt output02.txt >>test.txt
rem скопируйте три строчки столько раз, сколько нужно
rem проверить тестов, например до 10:
copy input10.txt input.txt
%1.ex
fc.com output.txt output10.txt >>test.txt
После этого просматриваем файл test.txt и ищем, сколько раз нашлось сочетание "различия не найдены". Это и будет результатом - количество пройденных тестов.
Конечно это тоже "ручная проверка", но очень облегчает работу жюри. Но есть в этом и свои подводные камни, так например в программе на Паскале нельзя использовать модуль CRT и соответствующие вызовы процедур CLRSCR, ReadKey, а также нужно исключить пустые Readln, которые учащиеся оставляют для паузы. Кроме этого не все среды программирования создают exe-файл, например: PascalABC (можно воспользоваться компилятором FreePascal), QBasic (можно использовать Turbo Basic, но не очень помогает). При этом нужно проверять на время выполнения программы на каждом тесте. Как поступить в этом случае? Есть готовые системы проверки, которые можно заранее установить и провести проверку:
- contester (не учитывает проверки всех тестов)
- ejudje
- polygon (созданные туры и задачи размещаются на сайте informatics.mccme.ru)
- система проверки, разработанная Епанешниковым А. И.
Попробуйте и вы с помощью языка программирования создать свою программу проверки тестов (один студент в свое время так и сделал). Удачи!
Комментариев нет:
Отправить комментарий