Требования ко всем работам

Программа должна:

  1. быть написана на допустимом по условии языке программирования;

  2. выполнять поставленную задачу;

  3. не использовать внешние библиотеки, если иное не указано в условии;

  4. всегда корректно освобождать память и закрывать файлы;

  5. обрабатывать ошибки:

    1. файл не открылся;

    2. не удалось выделить память;

    3. передано неверное число аргументов командной строки;

    4. формат файла не поддерживается (если по условию не гарантируется корректность входных данных). Формат файла != его расширение.

    В этих случаях необходимо выдавать сообщение об ошибке (подробнее ниже) и корректно завершаться с соответствующим кодом возврата.

  6. не писать в поток вывода ничего, если иное не указано по заданию.

  7. не писать в поток вывода ошибок ничего лишнего, кроме сообщений об ошибках.

  8. не создавать пустые файлы, если программа завершилась неуспешно.

  9. не должно создаваться никаких лишних файлов (временные файла для отладки не должны плодиться на тестовом стенде).

Если вы создаёте свои макросы, то их название не должно быть “DEBUG”, “_DEBUG”, “NDEBUG” и прочие, определяемые компиляторами имена. Допустимы любые другие названия из заглавных букв и символов подчёркивания.

Все результаты выводятся в файл, имя которого указано в аргументах командной строки ИЛИ в стандартный поток вывода (stdout). Вывод результатов в стандартный поток вывода вместо файла (если по заданию нужно записывать результат в файл) или в стандартный поток вывода ошибок вместо стандартного потока вывода приравнивается к непройденному тесту.

Сообщения об ошибках (неверное число аргументов, неправильные параметры программе и пр.) выводятся в стандартный поток вывода ошибок (stderr). Вывод сообщений в стандартный поток вывода приравнивается к непройденному тесту.

Падение программы приравнивается к непройденному тесту, даже если программа в файл или в stdout успела записать верный результат. Падение программы может быть вызвано:

  • assert

  • брошенным необработанным исключением

  • ошибкой в runtime (выход за границы диапазона, обращение к неоткрытому файлу и пр.)

Ограничено

  1. Ограничивается использование глобальных переменных (кроме констант) – необходимость их использования вы должны обосновать на защите. Ваш код должен быть максимально приспособлен к переносимости в другие проекты и/или использованию другими разработчиками.

  2. Во всех работах программа должна быть разбита на функции в соответствии с логической структурой задания. За код, который написан полностью в main (или абсолютно всё в другой функции, вызываемой из main) будут снижаться баллы.

  3. Во всех работах если у вас есть большие фрагменты откровенно одинакового кода, то их следует выделять в функции, а не копипастить.

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

Запрещено

  1. Использовать exit(...) в коде без обоснования необходимости.

  2. Создавать VLA-массивы (но можно VLA-указатели / VMT).

  3. Подключать системные библиотеки через #include "...".

  4. Использовать setlocale(...). Учимся писать небольшие комментарии пользователю по-английски.

  5. Использовать system("pause"). Работа программы не подразумевает интерактивный ввод. На тестах это будет выглядеть как зависание программы и тест будет провален с time limit.

  6. Если вы создаёте свои макросы, то их название не должно быть “DEBUG”, “_DEBUG”, “NDEBUG” и прочие, определяемые компиляторами имена. Допустимы любые другие названия из заглавных букв и символов подчёркивания.

Last updated