Структура программного модуля

. . . . . .

условие n условие n Выход n

о

действие n действие n

б) в)

цикл цикл

Вход завершен Выход Вход завершен Выход

о о о о о о о о

тело цикла

цикл не цикл не

завершен завершен

тело цикла

г) д)

Рис. 1.9. Р-графы типовых алгоритмов

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

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

Цикл с модификацией командпредусматривает изменение параметров команд в зависимости от номера шага выполнения цикла. Возвратимся к алгоритмам подачи звуковых сигналов. Если частоту подаваемого сигнала сделать зависящей от содержимого счетчика цикла, мы получим цикл с модификацией команды, потому что частота – параметр сигнала, а значит, и команды "подать звуковой сигнал": "Меняя содержимое счетчика от 1 до 10 с шагом 1, подавать звуковой сигнал с частотой равной десятикратному содержимому счетчика".

Цикл с модификацией адресов данныхпредусматривает изменение адресов обрабатываемых данных в зависимости от номера шага выполнения тела цикла. Рассмотренный выше алгоритм записи нулей в элементы массива является типичным циклом с модификацией адресов данных.

Возможно комбинирование модификации команд и модификации адресов данных. В этом случае получается цикл с модификацией команд и адресов данных.

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

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

Выше отмечено, что программа может состоять из произвольного количества модулей, в том числе и из одного. Текст модуля состоит из множества инструкций, написанных на алгоритмическом языке. Инструкции по обработке данных, написанные на алгоритмическом языке, называются операторами, а данные, над которыми совершаются операции, – операндами. Практика программирования выработала достаточно жесткую структуру модуля, которая включает в себя следующие разделы:

· заголовок;

· описание меток;

· описание типов данных;

· описание данных;

· описание процедур; функций; методов объектов;

· реализацию алгоритма.

Если модуль не является главным, то он может быть чисто описательным и не содержать раздел реализации алгоритма.

Заголовок обычно состоит из специального слова и комментария. Специальное слово (например, PROGRAMM или UNIT) указывает на назначение модуля. Некоторые языки позволяют его не употреблять или вообще не предусматривают его. Комментарий обычно содержит текст, который системой программирования игнорируется и содержит необходимые для самого программиста служебные сведения.

Описание меток начинается словом LABEL и содержит перечень идентификаторов (имен) меток. Оно может отсутствовать, если метки не употребляются. Некоторые языки позволяют вообще не описывать метки.

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

Описание данных содержит список идентификаторов данных различных типов, являющихся символьными эквивалентами адресов данных, и указания типов данных. Традиционно различают следующие виды данных – переменные, константы и именованные константы.

Переменными называются данные, которые хранятся по вполне определенным адресам и могут меняться в ходе выполнения программы.

Именованные константы тоже являются данными, которые хранятся по определенным адресам и должны оставаться неизменными в течение работы программы. Изменение таких данных, в принципе, должно блокироваться средствами языка программирования. Некоторые языки программирования не имеют такого механизма блокирования. Многие языки предоставляют пользователю массу встроенных именованных констант, имеющих различное назначение.

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

Описания процедур, функций и методоввыполняются по схемам, приведенным на рис. 1.2, 1.3 и предшествуют вызовам этих блочных структур в тексте программы. Некоторые процедуры и функции могут содержать внутри себя вызовы других процедур и функций. Поэтому теоретически порядок следования описаний не должен допускать вызова блочной структуры до ее описания. Ряд языков снимают это ограничение путем введения декларирования имени процедуры или функции и указания о последующем описании этой блочной структуры. Этот механизм "ссылок на дальнейшее описание" может применяться как в явном, так и в неявном виде.

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

В тексте программ на языке Visual Basic инициализация переменных может быть оформлена в какой-либо процедуре, вызываемой в самом начале работы программы, а упомянутый выше диспетчер в явном виде отсутствует и существует лишь в виде отдельных обработчиков событий.