Роботландский Университет 00/01
Азы программирования
Турнир Корректора
Инструкции по перекрестной проверке
Критерии оценок. 16/04/01
---------------------------------

Рациональное оборудование рабочего места проверяющего
-----------------------------------------------------
Для проверки полученных работ создайте отдельный каталог на своем
диске со следующей структурой:

PROVERKA
|
|--05
|  |--kor.bat    командный файл для запуска Кукарачи
|  |--0511.kor  |
|  |--0511.srd  |  решения задач
|  |  ....      |  команды 3105 (распакованный  файл 05.arj)
|  |--0591.kor  |
|  |--0591.srd  |
|  |  ....      |
|  |--05.txt    |  файл с описанием алгоритмов
|
|--08
|  |--kor.bat    командный файл для запуска Кукарачи
|  |--0811.kor  |
|  |--0811.srd  |  решения задач
|  |  ....      |  команды 3108 (распакованный  файл 08.arj)
|  |--0891.kor  |
|  |--0891.srd  |
|  |  ....      |
|  |--08.txt    |  файл с описанием алгоритмов
| ...
|
|--kor.exe      файлы, необходимые для запуска Кукарачи
|--kor.ini      (эти файлы копируются из среды
|--kor.pcl       программного пакета Курсов)
|--kor.pcx

Во все каталоги, содержащие решения задач команд, надо поместить файл
kor.bat. Это обычный текстовый файл. Он может быть создан в любом
ASCII-редакторе и должен содержать единственную строку:

..\kor

Теперь для проверки, например, решений команды 3105 нужно в Нортоне
(Far'е) открыть каталог 05 и запустить файл kor.bat. Программа
Кукарача-97 запустится и при открытии дискового меню вы увидите список
задач команды 3105.

Проверив команду 3105, можно открыть следующий каталог, например, 08 и
проверить решения команды 3108. И так далее.

Тестирование программ - важная часть обучения
---------------------------------------------
Перекрестная проверка работ продолжает этап обучения на наших Курсах.
Она позволяет:

-- Провести практические занятия с детьми по очень важному и
ответственному этапу создания программного продукта -- его
тестированию на предмет выявления ошибок. Ни одна компьютерная фирма
не выпустит свой программный продукт в свет без тщательной и
всесторонней проверки. Время, затраченное на тестирование готового
продукта, заранее предусматривается, включается в план разработки и по
количеству человеко-часов часто сравнимо со временем создания самого
продукта. Тестируют программы специальные работники фирмы и
обязательно не авторы программы. Как показывает опыт, автор программы
не способен выявить в своем продукте большинство из допущенных им
ошибок. Объясняется это очень просто. Работая над своей программой,
автор оказывается в "плену" собственных представлений и алгоритмов. Он
заставляет программу работать правильно и на это направляет свои
усилия. Человек-тестер, наоборот, прилагает все усилия для того, чтобы
заставить программу работать неверно, "подсовывает" ей такие входные
данные, на которых она начинает "хромать" - выдавать неверные
результаты. Иными словами, у автора программы и проверяющего разные
психологические установки: у одного -- заставить программу работать, у
другого -- "сломать" ее.

-- Перекрестная проверка позволит научить детей читать чужую программу
и понимать по ее исходному тексту мысль автора.

-- Проверка работ позволит детям познакомиться с решением других ребят
и сравнить их со своими.

Общие рекомендации по проверке
------------------------------

1) Тестирование программы. Первой, обязательной частью контроля,
является проверка работоспособности программы на компьютере.
Тестирование не должно сводиться к одному запуску программы с тем
состоянием среды, которое предложено автором. Запускайте программу с
различными допустимыми (по условию задачи) состояниями среды
исполнителя. Обязательно рассмотрите критические (крайние) случаи и
убедитесь, что программа обрабатывает их правильно.

2) Проверка качества алгоритма. Нужно внимательно прочитать объяснение
алгоритма, приведенное автором, и проверить его соответствие программе
при помощи запуска "по шагам".

Если Вы заметите в алгоритме погрешность, которая может привести к
неверной работе программы, то придумайте тест (допустимое состояние
среды), который обрабатывается программой неверно. Этот тест послужит
доказательством наличия в программе ошибки.

3) Оценка эффективности алгоритма и программы. Оценивайте
эффективность по трем признакам:

-- Универсальность алгоритма (алгоритмы, которые работают не для всех
возможных начальных состояний среды -- ошибочные). Например, алгоритм
решения задачи Ханойской башни, который решает задачу только для числа
колец от 1 до 7 -- неверный. Алгоритм неверный, если даже решает
задачу для 64 колец, но не способен ее решить (в принципе) для 65.
Надо отчетливо понимать, что несмотря на ограничения среды (длина
ленты, глубина стека, время исполнения), которые не позволят решить
Ханойскую башню и для 30 колец, алгоритм должен быть таким, чтобы мог
позволять (в принципе) решить задачу для любого числа колец, в тысячу,
например. То есть, алгоритм не должен быть устроен как переключатель
на столько позиций, сколько состояний среды он намерен обслужить. В
этом и есть универсальность. Она означает не перебор вариантов, а
вывод программистской формулы, которая сродни математической функции

y = F(x)

Здесь x -- начальное состояние среды, а y -- конечное, являющееся
решением задачи, а F -- алгоритм (программа).

-- Число строк программы с кодом (чем меньше, тем лучше).

-- Время работы программы (чем меньше движений выполняется в среде,
тем лучше).

Следует отметить, что обычно оптимальность по коду (памяти) вступает в
противоречие с оптимальностью по "телодвижениям" (времени).

В наших задачах мы обычно стараемся оптимизировать "телодвижения"
(память). Если при этом получается короткий код -- радостям нет
предела! Если в среде анализируется (преобразуется) некоторая запись,
то говорят о числе ее проходов. Идеально, когда задача решается за
один проход (просмотр) записи.

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

4) Качество описаний алгоритма и внешний вид (рисунок) программы.
Изучая алгоритм автора, обратите внимание на качество описания,
доступность и точность изложения (грамматика в последнюю очередь).
Рассматривая текст программы, обращайте внимание на правильное
форматирование и оформление: комментарии, смысловые имена процедур,
верно расставленные отступы и пустые строки улучшают внешний вид и
способствуют лучшему пониманию программы.


Критерий оценок
---------------

1. Если задача не решалась командой, то за нее выставляется 0 баллов.

2. Если задача имеет несколько вариантов решения, то выставляется
единственная оценка (балл) по лучшему варианту.

3. Программа не работает: выдается синтаксическая ошибка или сообщение
"Не могу". Может это недоразумение? Попробуйте обнаружить и исправить,
допущенную автором описку.

  3.1. Описка. Если исправление помогло и программа заработала, снизьте
  оценку по приведенным ниже рекомендациям для каждой отдельной задачи.

  3.2. Неверное решение. Если ошибки серьезные и связаны с неверным
  алгоритмом или неверной программой, выставляйте за задачу 1 балл.

4. Программа работает, но в ней обнаружены грубые ошибки. (программа
работает только для того состояния среды, которое предложил автор) -
выставляйте 2 балла.

5. Программа работает, но в ней есть ошибки (обнаружены состояния
среды, в которых программа работает неправильно). Ставьте оценку в
соответствии с приведенными ниже рекомендациями для каждой отдельной
задачи.

6. В тех случаях, когда приведенные рекомендации оставляют
неоднозначность, проверяющий принимает самостоятельное решение по
выставлению оценки.


Рекомендации по задачам
-----------------------

Замечание. При необходимости можно использовать в качестве оценки
десятичную дробь (с точкой, а не запятой в качестве разделителя) из
диапазона 0 - максимальный бал. Например, за задачу 1 можно выставить
оценку 1.5. Не надо использовать более одной цифры после десятичной
точки.

Задача 1.   2   - верное решение
            1   - неверное решение
            0   - не решали


Задача 2.   3   - верное решение
            2   - неоптимальное решение
            1   - неверное решение
            0   - не решали

Задача 3.   3   - верное решение
            2   - неоптимальное решение
            1   - неверное решение
            0   - не решали

Задача 4.   4   - верное решение
            3   - неоптимальное решение
            2   - ошибки
            1   - неверное решение
            0   - не решали

Задача 5.   4   - верное решение
            3   - неоптимальное решение
            2   - ошибки
            1   - неверное решение
            0   - не решали

Задача 6.   6   - верное решение
            5   - неоптимальное решение
            4-2 - ошибки
            1   - неверное решение
            0   - не решали

Задача 7.   7   - верное решение
            6   - неоптимальное решение
            5-2 - ошибки
            1   - неверное решение
            0   - не решали

Задача 8.   8   - верное решение
            7-5 - неоптимальное решение
            5-2 - ошибки
            1   - неверное решение
            0   - не решали

Задача 9.   6   - верное решение
            5   - верное решение без диаграммы переходов
            4-2 - ошибки
            1   - неверное решение
            0   - не решали

Задача a.   9   - верное решение менее чем за три прохода
            8   - верное решение менее чем за четыре прохода
            7   - верное решение более чем за четыре прохода
            6-2 - ошибки
            1   - неверное решение
            0   - не решали

Задача b.   10  - верное универсальное решение (для любого числа колец)
            9-5 - ошибки в универсальном решении
            4   - частное решение (для фиксированного диапазона числа колец)
            3-2 - ошибки в частном решении
            1   - неверное решение
            0   - не решали

Оформление результатов проверки

Результаты проверки должны быть представлены по следующей форме:
--------------------------------------------------------------
Турнир по программированию. II тур. Корректор
Команда:
Руководитель:
Результаты проверки:

nn b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb NN
nn b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb NN
nn b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb NN
nn b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb NN
nn b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb NN
nn b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb NN

Комментарии:
        ....
        ....
--------------------------------------------------------------
В выше приведенном образце использованы следующие обозначения:

nn - номер команды, работа которой проверялась
b1 - оценка за первую задачу
b2 - оценка за вторую задачу
b3 - оценка за третью задачу
b4 - оценка за четвертую задачу
b5 - оценка за пятую задачу
b6 - оценка за шестую задачу
b7 - оценка за седьмую задачу
b8 - оценка за восьмую задачу
b9 - оценка за девятую задачу
ba - оценка за задачу a
bb - оценка за задачу b
NN - номер команды, которая проверяла работу

В комментариях в свободной форме  руководитель:

- объясняет, как была организована проверка;
- высказывает свои впечатления о проверенных работах;
- ОБЯЗАТЕЛЬНО обосновывает, выставленные оценки.

Посылка результатов проверки

Результаты проверки высылаются по адресу
kurs@robotland.botik.ru
до 23:59 вечера 21 апреля  2001 года
(электронный штемпель отправителя)
