Формальные требования к выполнению задания 2

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

Специфика данного задания. Программа должна считывать исходные данные из файла и далее создавать необходимые для работы массивы в точности на используемое количество элементов, выделяя память с помощью функций типа malloc или оператора new. По окончании решения задачи эти ресурсы (память) должны освобождаться с помощью функций free или оператора delete. Не разрешается захватывать память ``с запасом'', указывая некоторую большую длину массива.

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

Хотя это и не требуется в обязательном порядке, по возможности следует реализовывать эффективные алгоритмы, сложность которых пропорциональна N или N log N, где N - количество чисел в массиве данных.

У каждой задаче должны быть подготовлены тесты, т.е. некоторое количество файлов с данными, на которых и будет проверяться работоспособность программы. Тестовые данные должны проверять базовые свойства реализации, т.е. решение задачи в корректном случае и реакции на некорректное состояние исходных данных. Перед сдачей задания преподавателю студент должен самостоятельно проверить свою программу на соответствующем наборе тестов. Можно также предусмотреть ввод имени файла с данными в начале работы программы, чтобы иметь возможность быстро запускать тесты для разных заранее подготовленных данных.

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

Сдача задачи в классе состоит в демонстрации работы программы на различных тестах с пояснением что именно данный тест проверяет и просмотре кода на предмет его грамотности.

Итак, в качестве резюме, кратко по пунктам требований:
1. Стиль записи - выравнивание скобок, отступы и т.п.
2. Несколько cpp файлов для разных частей вашей задачи
3. Заголовочные файлы с прототипами ваших функций.
4. Адекватное распределение действий вашей программы по разным функциям.
5. Наличие наборов тестовых данных для проверки разных ситуаций.
6. Удобная организация запуска самих этих тестов.

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

О дистанционной проверке заданий

В какой-то момент я могу разрешить отдельным людям присылать мне на почту свои решения для дистанционной проверки. Это произойдет с теми, кто научится выполнять описанные выше 6 пунктов. Дополнительно к ним добавляются еще два требования:
7. Присылаются только а) рабочие cpp и h файлы, б) файлы с тестовыми наборами данных, с) инструкция по копмиляции и запуску тестов.
8. В теме письма пишется 108 Фамилия задача M-N-V
(здесь M - раздел, N - номер задачи, V - версия (при исправлении замечаний), например
108 Семенов задача 2-12-3 = 12 задача из массивов, третий вариант реализации).

Пункт 6 означает, что в идеале для запуска очередного теста не надо перекомпилировать саму программу, а вид теста определяется введенным значением или выбором из "меню". На начальном этапе допускается минимальное изменение в программе (например, заменить одно имя файла на другое).

Пункт 7 означает, что не надо присылать служебные системные файлы, которые входят в состав проектов интегрированных систем типа Visual Studio и подобных. Инструкция должна описывать из каких файлоы собирается ваша программа, как запустить определенный тест, что этот тест проверяет и какой для него предполагается ответ. Например, если ваша программа требует ввода с клавиатуры, то должно быть понятно что и в какой момент надо вводить, если она выводит ответ, то что этот ответ собой представляет. Можно предварительно запаковать ваши файлы в архив (.zip, .rar, .7z и т.п.)

Пункт 8 нужен чтобы ваше письмо не затерялось и было сразу понятно кто и что присылает. Задачи проверяются преимущественно ко дню семинара, но при наличии свободного времени могут проверяться и раньше. Поэтому присылать можно сразу как будет полная увереность, что все пункты выполнены.