Процедурная парадигма
Цель лекции:
- Познакомить читателей с основными конструкциями процедурной парадигмы программирования;
- Научить читателей программировать, читать алгоритмы, создавать программы на языках программирования, входящих в процедурную парадигму;
4.1. Особенности этой парадигмы
4.1.1. Конструкции языка
В качестве основных конструкций языков, построенных на "процедурной парадигме", используются:
- Оператор присвоения значений;
- Операторы условия " if … then ";
- Операторы ветвления " if … then … else … ";
- Операторы цикла: "пока" ( while );
- Оператор цикла: "делать … пока" ( do … while );
- Оператор цикла с индексом;
- Оператор множественного выбора;
- Оператор выхода из цикла: " break ";
- Оператор новой итерации: " continue ";
- Оператор безусловного перехода: " goto ";
- Оператор вызова процедуры/функции;
- Операторы ввода-вывода;
- Составной оператор;
- Оператор выхода из процедуры.
Рассмотрим эти операции поподробнее.
4.1.1.1. Оператор присваивания
Основной оператор "присвоения значений" переменным обозначается как " = " или " := ". Его синтаксис следующий:
<переменная> = <выражение>Листинг 4.1.
где <переменная> - идентификатор, задающий имя переменной определенного типа, а <выражение> - новое значение переменной, представляющее собой константу, переменную, арифметическое, логическое, символьное выражение либо вызов функции.
Оператор присвоения значений обозначается в блок-схеме как прямоугольник.
4.1.1.2. Оператор условия
Этот оператор служит для реализации реакции алгоритма на некоторое условие: значения переменной, или событие в ЭВМ и ее окружении. Синтаксис оператора следующий:
IF <условие> THEN <оператор>Листинг 4.2.
где <условие> - переменная булевского (логического) типа или операция отношения между целыми, вещественными, символьными константами, переменными и выражениями, а <оператор> - любой допустимый оператор языка, группа этих операторов в скобках (в блоке) либо (в старых языках программирования) - оператор безусловного перехода на метку. Оператор вычисляется в случае истинности условия в этом операторе.
Оператор: "условие" на блок-схеме представляется так, как показано на рис. 4.1:
Оператор условия является самым "древним" оператором изменения последовательности действий операторов алгоритма. Он применялся еще в релейной ЭВМ К. Цюзе.
Примеры написания условия:
[Пример 01]
/* 1. Переменная D больше нуля? (Да/Нет) */ D > 0 /* 2. Переменная x лежит в пределе значений от -1 до +1 (на языке Си) */ x >= -1 && x <= 1 REM 2. То же самое на языке Бейсик X >= -1 AND X <= 1 /* 3. Файл, связанный с дескриптором: fstream, не прочитан до конца (переменная eof не равна 0, язык Си) */ !eof( fstream )
4.1.1.3. Оператор "ветвления"
Этот оператор очень похож на оператор условия. Его синтаксис следующий:
if <условие> then <оператор-истина> else <оператор-ложь>Листинг 4.3.
где <условие> - то же, что и в [разделе 4.1.1.2], <оператор-истина> - оператор или группа операторов, выполняемых в случае истинности условия, а <оператор-ложь> выполняется в случае невыполнения условия оператора ветвления. После выполнения оператора ветвления продолжается выполнение последовательности операторов, нарушенной при вызове оператора ветвления.
На блок-схеме оператор "ветвления" представлен так, как показано на рис. 4.2.
Оператор ветвления появился сравнительно недавно, в 1970 году в языке: "Паскаль".
4.1.1.4. Оператор цикла: "Пока"
Операторы цикла предназначены для многократного повторения одних и тех же операций (операторов) в программе. Цикл завершается после выполнения условий окончания цикла, после чего следуют остальные операторы алгоритма. Если выхода из цикла нет, то говорят, что программа: "зацикливается".
Самым "строгим" циклом (в смысле его соответствия правилам структурированной парадигмы программирования) является цикл: "Пока". Его синтаксис следующий:
while <условие> do <оператор>Листинг 4.4.
где <условие> - условие входа в цикл и его окончания (в случае несовпадения значения выражений этому условию продолжения цикла). Условием может быть переменная логического типа, или операция отношения между целыми, вещественными, символьными константами и переменными, и выражений с ними, <оператор> - любой допустимый оператор или блок операторов языка программирования. Примеры операторов цикла на языке Си представлены в примере 02.
[Пример 02]
/* 1. Чтение и печать всех строк из текстового файла (до тех пор, пока не кончился файл) */ /* Описание констант */ const short MAXSTR = 255; /* Описание переменных */ FILE *stream; char str[MAXSTR]; … while( !eof( stream ) ) // Пока не достигнут конца { // потока stream цикл fgets( str, MAXSTRING, stream ); // Читается файл в строку puts( str ); // печать строки на экране дисплея } // Конец цикла … /* 2. Реализация функции "эникейщиков" (цикла пока не нажата клавиша). */ char c; // Символ ввода с = '\0'; // условие продолжения цикла while( !c ) c=getc(); // Бесконечный цикл, пока не введен с клавиатуры символ c.
На блок-схеме оператор цикла: "пока" - имеет вид, приведенный на рис. 4.3:
Как видно из указанных примеров, для реализации цикла "пока" должны быть выполнены следующие условия:
Вообще цикл "пока" соответствует модификатору "звездочка" в регулярном выражении (то есть повторению ноль или более раз). О синтаксисе регулярных выражений смотри следующие лекции (в частности, "Регулярные выражения" , "Представление грамматик" ).
4.1.1.5. Оператор цикла: "до … пока"
Этот оператор аналогичен оператору цикла "пока", за исключением того, что операторы в теле цикла будут исполняться минимум один раз. Синтаксис этого оператора следующий:
do <оператор> while <условие>Листинг 4.5.
где <условие> - условие окончания цикла (см. раздел 4.1.1.4), а <оператор> - любой допустимый оператор или блок операторов языка программирования, который выполняется определенное число раз ("тело цикла"). В теле цикле должно находиться условие, прекращающее цикл. В противном случае цикл будет повторяться бесконечное число раз (будет "зацикливаться").
На блок-схеме цикл: "до … пока" имеет следующий вид (см. рис. 4.4):
Цикл: "до … пока" соответствует модификатору "плюс" ("+") в регулярном выражении (повторению один или более раз).