Общие требования и замечания к выполнению заданий

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

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

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

3. Как правило, в реализации алгоритма не должно быть явных констант, не имеющих абсолютного характера. Это означает, что можно определять константы типа ``корень из двух'' ``е'' ``пи'' и т.п., но нельзя задавать произвольными константами ``минимально возможное значение'', ``результат, который вряд ли будет получен'' и т.п. Следует переделать алгоритм так, чтобы его работа не опиралась на подобные значения. При необходимости можно использовать константы, определенные в рамках используемой системы программирования для обозначения разных диапазонов (например, RAND_MAX, и т.п.), но только их, не подменяя их значений какими-либо другими.

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

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

7. Типы переменных и вычисленных значений должны соответствать смыслу задачи. В частности, количества должны представляться целыми типами данных. Для вещественных чисел сдедует использовать тип double так как в современных 64-разрядных системах работа с типом float порождает дополнительные накладные вычислительные расходы.

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