Алгоритм - это последовательность действий, которые необходимо выполнить, чтобы решить поставленную задачу.
Программа же представляет собой набор команд на языке, понятном исполнителю, реализующий некоторый алгоритм. В нашем случае исполнителем является компьютер, а языком программирования будет язык высокого уровня Pascal. К сожалению, любой язык высокого уровня удобен только человеку, пишущему или отлаживающему программу, но совершенно непонятен компьютеру. Программа на таком языке называется исходным текстом и хранится во внешнем файле с расширением .pas.
Для перевода программы на язык низкого уровня, понятный исполнителю-компьютеру, существуют специальные программы-переводчики - компиляторы. Результатом работы компилятора (иными словами, результатом процесса компиляции) является исполняемый код, который записывается в файл с расширением .exe.
Свойства алгоритма
Любой алгоритм должен обладать следующими свойствами:
массовостью ( алгоритм должен уметь решать не одну конкретную задачу, а целый класс однотипных задач);
результативностью ( алгоритм должен выдавать результат своей работы);
определенностью (на каждом шаге выполнения алгоритма исполнитель должен точно знать, какой шаг будет следующим).
Эти же свойства присущи и программам, реализующим алгоритмы. Если же хотя бы одно из них оказывается невыполненным, программа полностью теряет смысл.
Компиляция, отладка и тестирование
Никто не станет спорить с тем, что неграмотно написанный текст очень сложно, а порой и вовсе невозможно правильно перевести на другой язык. Это верно для естественных языков, это верно и для языков программирования. Но если переводчик-человек иногда может как-то догадаться, что же именно хотел сказать автор неграмотного текста, то программе-переводчику такое не по силам. Любой компилятор требует, чтобы программа, подаваемая ему для перевода, была абсолютно правильно составлена.
В языке программирования, как и в любом другом языке, существуют синтаксис - правила записи его конструкций - и семантика - смысл его конструкций. Компилятор проверяет только синтаксис. Поиском же семантических ошибок занимается программист в процессе тестирования и отладки своей программы
Отладка - это поиск и исправление ошибок в программе. Тестирование - это составление специальных наборов входных и выходных данных (тестов), а затем исполнение программы и проверка полученных результатов в поисках возможных семантических или логических ошибок.
Чтобы уменьшить затраты времени и сил на отладку, нужно писать синтаксически и логически правильные программы. Технологиям написания надежных программ, их тестирования и отладки будет посвящена последняя лекция нашего курса.
Средства разработки программ
Существует довольно большое количество средств написания программ на языке Pascal, позволяющих составлять, компилировать, исполнять и отлаживатьпрограммы на этом удобном языке структурного программирования1). Самыми известными сегодня являются Turbo Pascal (он же Borland Pascal), Object Pascal (не путать с Delphi) и Free Pascal. Их различные, в том числе и бесплатные, версии можно найти в Сети. Для определенности мы будем опираться на самую распространенную (хотя и не во всем соответствующую стандартам ISO) реализацию - Turbo Pascal.
Итак, в составе среды разработчика Turbo Pascal имеются:
текстовый редактор, в котором можно набирать тексты программ ;
компилятор, превращающий исходные тексты в исполняемый код ;
отладчик, помогающий обнаруживать и исправлять ошибки в программе
Вы приступаете к решению какой-либо задачи_ Первым делом вы выбираете алгоритм, а затем - подчас уже в процессе кодирования - детализируете его. Не секрет, что многие шаги алгоритма могут проясниться только тогда, когда большая часть программы уже написана, так что придется вносить в ее текст изменения, уточнения и поправки. В крайнем случае вы будете вынуждены полностью отказаться от исходного алгоритма и перейти к реализации другого, более подходящего. И вся уже проделанная работа по написанию текста программы окажется напрасной...
Для того чтобы не приходилось "менять коней на переправе", необходимо уже в самом начале:
правильно оценить эффективность выбранного алгоритма (например, если в процессе работы будет производиться постоянная перестройка структуры, хранящей данные, то лучше остановить выбор на списочном алгоритме);
убедиться в том, что он корректно обрабатывает весь спектр входных данных (например, алгоритм Дейкстры нельзя применять, если в графе есть ребра с отрицательным весом);
оценить вероятные трудозатраты на его создание (например, гораздо легче написать простую, а не улучшенную сортировку, и если объем входных данных позволяет, именно так и следует поступить) и т.п.
Если же на этапе выбора алгоритма все-таки была допущена ошибка, то программу придется писать заново. При этом некоторые блоки старого варианта (например, ввод/вывод1) ) могут не зависеть от выбора алгоритма, тогда переписывать их не нужно. Но основной алгоритм все-таки необходимо исправить.
При коренной переделке программы особенно важно аккуратно отслеживать все вносимые в текст программы изменения.
Далее мы перечислим общеизвестные правила, которые помогут вам минимизировать затраты времени и сил при написании программы.
Несмотря на то что некоторые из этих правил могут показаться вам ненужными и занудными, следование им в процессе создания сложной программы очень облегчает и, главное, ускоряет ее отладку. В общем, если перефразировать известное выражение, "овчинка стоит выделки".
Отладка и тестирование
Если вы уже пробовали программировать, то вам, без сомнения, знакома ситуация, когда программа, которая вроде бы должна работать правильно, почему-то упорно не желает этого делать. Но даже если вы еще только начинаете приобщаться к таинствам этого нелегкого искусства - программирования, то рано или поздно вы обязательно столкнетесь с такой проблемой.
Программа написана, но не работает так, как надо...
Кажется, исправлены уже все возможные ошибки и неточности, много раз проверен и перепроверен алгоритм, и тем не менее результат выдается совсем не тот, каким он должен быть... Вот тут-то и начинается собственно процесс отладки, то есть поиска логических ошибок в программе.
Если предположить, что алгоритм для решения задачи вы избрали верно, то остается согласиться с тем, что ошибки были сделаны на этапе кодирования. Значит, некоторые части вашей программы выполняют совсем не то, чего вы от них хотите. Поэтому необходимо:
во-первых, найти этих делинквентов;
во-вторых, призвать их к порядку.