Краткая формулировка требований
ТРЕБОВАНИЯ, ПРЕДЪЯВЛЯЕМЫЕ К СДАВАЕМЫМ ПРОГРАММАМ
НА ПЕРВОМ КУРСЕ ФАКУЛЬТЕТА ИВТ,
Или
КАК ПИСАТЬ ПРОФЕССИОНАЛЬНЫЕ ПРОГРАММЫ
Здесь изложены требования, предъявляемые к программам, написанным на языке "C", которые студенты факультета ИВТ пишут на 1-м курсе. Работа состоит из следующих частей. После введения следуют кратко сформулированные требования к программам отдельно для 1-го и 2-м семестра. Далее следует объяснение общего смысла всего комплекса требований. Затем следует подробное объяснение смысла каждого конкретного требования к программе.
КРАТКАЯ ФОРМУЛИРОВКА ТРЕБОВАНИЙ
1.1 Программа должна иметь осмысленное название (слово или словосочетание), не обязательно совпадающее с названием исполнимого файла, которое должно выводиться при запуске программы, а также должно присутствовать в комментарии в начале каждого файла программы.
1.2 Исходный код программы должен быть в каноническом виде:
1.2.1 Каждый файл программы должен начинаться с комментария, в котором должны быть указаны название и назначение программы и данного файла, автор и номер учебной группы.
1.2.2 Каждый оператор программы должен находиться на отдельной строке.
1.2.3 Каждую фигурную скобку следует располагать на отдельной строке (открывающая фигурная скобка может располагаться в тойже строке).
1.2.4 Так как язык программирования "C" основан на лексике английского языка, текст программы должен соответствовать правилам пунктуации английского языка и правилам написания математических формул. Перед операторами "запятая" и "точка с запятой" не следует ставить пробел, так же, как в английском языке не ставится пробел перед знаками препинания. Перед открывающей круглой или квадратной скобкой оператора, условия, функции или массива не следует ставить пробел, так как это принято в математике. Это не относится к фигурным скобкам составного оператора, структуры или тела функции.
1.2.5 Правильно использовать отступы. Текст программы должен начинаться с 1-го символа строки. Все операторы линейной части программы должны иметь слева одно и то же число пробелов. При определении функции, цикла или условного оператора открывающую и закрывающую фигурные скобки следует располагать на уровне первой буквы первого слова той синтаксической конструкции, к которой они относятся. В случае условного оператора или цикла с одним оператором последний следует располагать либо на одной строке с управляющим оператором, либо на следующей строке с отступом слева от него. Величина отступов разного уровня вложенности относительно предыдущего уровня должна быть одинакова во всех файлах данной программы.
1.2.6 Блок switch следует располагать следующим образом. Все операторы case следует располагать на отдельных строках на одном уровне с предыдущими. Метки case должны быть отсортированы по возрастанию или по смыслу. При наличии метки default ее следует располагать в конце оператора switch, после меток case. Все операторы блока switch должны быть выровнены слева.
1.2.7 Оператор "точка с запятой", ограничивающий пустой цикл, должен располагаться на отдельной строке с отступом.
1.2.8 Для имен макросов использовать только заглавные буквы, а для всех остальных идентификаторов использовать маленькие буквы.
1.2.9 Программа должна быть снабжена необходимыми комментариями.
1.2.10 Имена идентификаторов должны быть осмысленные и отсортированы по смыслу, последовательности использования или по алфавиту.
1.2.11 Строки исходного текста не должны выходить за пределы экрана (не важно что оно помещалось у вас на другой машине).
1.2.12 В случае наличия пустых строк на не очевидном месте доказать необходимость их присутствия.
1.2.13 Не должно быть лишних круглых и фигурных скобок.
1.3 Не применять оператор goto и метки.
1.4 Вычисления одних и тех же значений не должны повторяться.
1.5 Значения любого типа, встречающиеся в программе более одного раза, должны быть оформлены в виде констант или макросов.
1.6 Все неизменяемые значения должны быть объявлены константами или оформлены в виде макросов.
1.7 Не включать в заголовочные файлы тела функций.
1.8 Не применять макросы для замены групп операторов.
1.9 Если имеются идентификаторы, начинающиеся с символа подчеркивания, доказать необходимость использования таких имен. Такие имена используются для полей класса.
1.10 Использовать библиотечные функции, макросы и типы данных везде, где возможно. Применение своих функций, макросов и типов данных вместо библиотечных допускается в следующих случаях: 1) студенту так сформулировано задание; 2) в библиотеке поддержки компилятора обнаружена ошибка (доказательство факта лежит на студенте); 3) код, написанный студентом, работает эффективнее, чем фирменный (доказательство факта лежит на студенте).
1.11 Из библиотечных функций использовать наиболее простые (соответственно, наиболее эффективные) для каждого конкретного случая.
1.12 В случае, если функция main возвращает нестандартное значение, доказать необходимость этого.
1.13 Под каждую программу следует выделить отдельную директорию, название которой должно совпадать с именем исполнимого файла и в которой должны находиться только файлы, имеющие отношение к данной программе.
1.14 Компиляция должна быть без сообщений; все возможные сообщения компилятора должны быть размаскированы.
1.15 Комментарии исходного текста программы и сообщения, выдаваемые программой при работе, не должны содержать грамматических, стилистических и фактографических ошибок, и для них следует использовать только официальную компьютерную терминологию. Не допускается использование жаргонных и нецензурных выражений. Использование несерьезных и простонародных слов допускается только в играх и других развлекательных программах.
1.16 Программа должна иметь удобный и интуитивно понятный пользовательский интерфейс. В заставке должна быть информация о названии, назначении и авторе программы. При необходимости программа должна выдавать сообщения о необходимых действиях со стороны пользователя.
1.17 По окончании работы программы вся динамически выделяемая память должна быть освобождена, все открываемые файлы должны быть закрыты.
1.18 Доказательство правильности работы программы лежит на студенте. Студент должен подготовить необходимые входные данные для всех режимов работы программы, в т.ч. для вырожденных случаев.
1.19 Не оптимальность алгоритма, замеченная преподавателем, должна быть исправлена.