Информатика |
Глава 9. Основные приемы программирования | назад оглавление вперед |
9.7. Этапы решения задачи на ЭВМ.
Рассмотрим теперь подробнее все этапы решения задач на ЭВМ.
Следует отметить, что отдельные этапы взаимосвязаны: последующие этапы зависят от реализации предшествующих, а после выполнения очередного этапа может потребоваться возврат к предыдущим этапам и поиск их новых решений.
Первым этапом постановки и решения задачи на ЭВМ являются четкая формулировка задачи (обычно на профессиональном языке), выделение исходных данных для ее решения и точные указания относительно того, какие результаты и в каком виде должны быть получены.
Второй этап — формальная (математическая) постановка задачи, т.е. представление ее в виде уравнений, соотношений, ограничений и т. п. При этом некоторые задачи, решаемые в настоящее время на ЭВМ, либо не допускают, либо не требуют математической постановки (например, задачи обработки текстов).
Третий этап — выбор метода решения. Выбор метода определяется решаемой задачей, а также возможностями ЭВМ (ее быстродействием, объемом памяти, точностью представления чисел, наличием разработанных ранее готовых программ и т. п.). Выполнение этого этапа требует наличия некоторого кругозора как в области программирования, так и в области используемых методов.
Четвертый этап — разработка алгоритма на основе выбранного метода. При выборе алгоритма желательно рассмотреть и проанализировать несколько вариантов, прежде чем сделать окончательный выбор. Следует обратить внимание на тесную взаимосвязь третьего и четвертого этапов, так как алгоритм в большой степени определяется выбранным методом, хотя один и тот же метод в свою очередь может быть реализован при помощи различных алгоритмов.
При разработке алгоритма решения сложной задачи следует использовать метод пошаговой детализации, следя за тем, чтобы на каждом шаге структура алгоритма оставалась простой и ясной. Следует максимально использовать существующие типовые или разработанные ранее алгоритмы для отдельных фрагментов (блоков) алгоритма.
Пятый этап — выбор структуры данных. От выбора способа предоставления данных зависит и алгоритм их обработки. Поэтому четвертый и пятый этапы взаимосвязаны. Нужно выбирать структуру данных, наиболее естественную для решаемой задачи, использовать массивы для представления данных, когда это наиболее очевидный способ их организации.
Шестой этап — собственно программирование, т. е. запись разработанного алгоритма на языке программирования. Вопросы выбора подходящего языка здесь не рассматриваются.
Если разработка алгоритма выполнена хорошо, то программирование принципиальных трудностей не вызывает. Однако можно высказать некоторые рекомендации по составлению программы, которые облегчат ее отладку и дальнейшее использование.
1. Программа должна быть универсальной, т. е. не зависящей от конкретного набора данных. Если данные представлены в виде массивов, то в качестве исходных данных следует рассматривать не только сами данные, но и их количество, для того чтобы одна и та же программа могла быть использована для обработки массивов различных размеров.
Универсальная программа должна обрабатывать вырожденные случаи (например, число элементов вектора равно 0 или 1) и печатать сообщение об ошибке, если размер массива превысил допустимое значение (использованное в описании массива).
2. Вместо констант лучше использовать переменные. Если в программе используются константы, то при их изменении нужно изменять в исходной программе каждый оператор, содержащий прежнюю константу. Эта процедура отнимает много времени и часто вызывает ошибки. В программе следует предусмотреть контроль вводимых данных (в частности, программа не должна выполняться, если данные выходят за пределы допустимого диапазона.
3. Некоторые простые приемы позволяют повысить эффективность программы (т. е. уменьшить количество выполняемых операций и время работы программы). К таким приемам относятся:
4. Программа должна содержать комментарии, позволяющие легко проследить за логической взаимосвязью и функциями отдельных ее частей.
При написании программы следует заботиться о ее структуре так, чтобы программа была удобочитаемой. В частности, в программе должны быть хорошо видны циклы. Для этого операторы FOR и NЕXТ нужно размещать в различных строках, не содержащих других операторов. Если цикл организуется без использования операторов FOR и NЕXТ, то в отдельных строках, не содержащих других операторов, должны быть размещены операторы, организующие цикл (задающие начальное значение управляющей переменной цикла, осуществляющие проверку условия выхода из цикла и т. п.).
Седьмой этап — тестирование и отладка программы — это проверка правильности работы программы и исправление обнаруженных ошибок.
Для выполнения тестирования необходимо подготовить тесты. Тест—это специально подобранные исходные данные в совокупности с теми результатами, которые должна выдавать программа при обработке этих данных. Разработка тестов — трудоемкая работа, часто требующая выполнения ручных просчетов. При составлении тестов нужно стремиться обеспечить проверку всех ветвей программы.
Далее даются некоторые рекомендации по тестированию и отладке.
Восьмой этап — счет по готовой программе и анализ результатов. Этот этап является итогом выполнения всех предыдущих этапов и служит подтверждением (или опровержением) их правомерности. После этого этапа, возможно, потребуется пересмотр самого подхода к решению задачи и возврат к первому этапу для повторного выполнения всех этапов с учетом приобретенного опыта.