Опубликован: 23.10.2009 | Уровень: для всех | Доступ: свободно
Лекция 4:

Процедурная парадигма

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Аннотация: В данной лекции Вы познакомитесь с основными алгоритмическими конструкциями процедурной парадигмы программирования, а также с "метаязыками" описания этих конструкций: блок-схемами, "школьным языком программирования".
Ключевые слова: парадигма программирования, оператор условия, операторы цикла, оператор безусловного перехода, goto, составной оператор, блок-схема, операция приведения, логический тип, операции отношения, символьная константа, операторы перехода, оператор отношения, последовательность операторов, блок операторов, тело цикла, реализация языка, индекс массива, безусловный переход, ассемблер, исключительная ситуация, вложенные циклы, процедурное программирование, фактический параметр, параметр-константа, формальный параметр, объявление функции, разыменование, передача параметров, безопасная система, дескриптор файла, функции ввода/вывода, лексема, Алгол, процедурный язык, метаязык, алгоритм Евклида, структурированное программирование, парадигма, императивный язык, пользователь, компьютер, интерфейс, управление системой, переменная среды, демон, булевский тип, оператор операторов, условие ветвления, иррациональное число, модификатор регулярного выражения, идентификатор переменной, 1-грамматика, нормальная форма, оператор описания, адрес переменной, периферийное устройство, система программирования, тело процедуры, графический способ, геометрическая фигура, Ориентированный граф

Цель лекции:

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

4.1. Особенности этой парадигмы

4.1.1. Конструкции языка

В качестве основных конструкций языков, построенных на "процедурной парадигме", используются:

  1. Оператор присвоения значений;
  2. Операторы условия " if … then ";
  3. Операторы ветвления " if … then … else … ";
  4. Операторы цикла: "пока" ( while );
  5. Оператор цикла: "делать … пока" ( do … while );
  6. Оператор цикла с индексом;
  7. Оператор множественного выбора;
  8. Оператор выхода из цикла: " break ";
  9. Оператор новой итерации: " continue ";
  10. Оператор безусловного перехода: " goto ";
  11. Оператор вызова процедуры/функции;
  12. Операторы ввода-вывода;
  13. Составной оператор;
  14. Оператор выхода из процедуры.

Рассмотрим эти операции поподробнее.

4.1.1.1. Оператор присваивания

Основной оператор "присвоения значений" переменным обозначается как " = " или " := ". Его синтаксис следующий:

<переменная> = <выражение>
Листинг 4.1.

где <переменная> - идентификатор, задающий имя переменной определенного типа, а <выражение> - новое значение переменной, представляющее собой константу, переменную, арифметическое, логическое, символьное выражение либо вызов функции.

Замечание. При присвоении переменной нового значения старое значение теряется безвозвратно. Это надо помнить. Также значение теряется при выходе из блока или функции, в котором была объявлена переменная.

Оператор присвоения значений обозначается в блок-схеме как прямоугольник.

Примечание: при реализации оператора присвоения значений тип данных, под которым определена переменная, может не совпадать с типом данных, возвращаемых выражением. Поэтому может потребоваться операция принудительного приведения типов. По поводу операций приведения типов смотри [ "Типы данных" ] данного курса.
4.1.1.2. Оператор условия

Этот оператор служит для реализации реакции алгоритма на некоторое условие: значения переменной, или событие в ЭВМ и ее окружении. Синтаксис оператора следующий:

IF <условие> THEN <оператор>
Листинг 4.2.

где <условие> - переменная булевского (логического) типа или операция отношения между целыми, вещественными, символьными константами, переменными и выражениями, а <оператор> - любой допустимый оператор языка, группа этих операторов в скобках (в блоке) либо (в старых языках программирования) - оператор безусловного перехода на метку. Оператор вычисляется в случае истинности условия в этом операторе.

Примечание: меткой называется номер строки, число либо идентификатор, стоящий перед оператором и указывающий, куда будет перенаправлено выполнение программы после оператора перехода.
Замечание: на операции отношения в арифметике плавающей точки накладываются ограничения, а именно - исключение из рассмотрения операций отношения "равно" и "не равно". Поскольку вещественные числа представляются в виде "фрагмента" бесконечной дроби, чувствительного к ошибкам округления, то, например, выражение: 2.0 * 2.0 - может не равняться константе 4.0. Следовательно, отношение "равно" переменных с плавающей точкой будет всегда "ложь", а отношение "не равно" - всегда истина. То же самое относится и к операторам отношения: "больше или равно" и "меньше или равно".

Оператор: "условие" на блок-схеме представляется так, как показано на рис. 4.1:

Оператор "условие" на блок-схеме.

Рис. 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.

Оператор ветвления на блок-схеме.

Рис. 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.3. Оператор цикла: "пока", - на блок-схеме.

Как видно из указанных примеров, для реализации цикла "пока" должны быть выполнены следующие условия:

  • условие входа в цикл;
  • условие выхода из цикла;
  • последнее условие должно меняться в теле цикла.

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

4.1.1.5. Оператор цикла: "до … пока"

Этот оператор аналогичен оператору цикла "пока", за исключением того, что операторы в теле цикла будут исполняться минимум один раз. Синтаксис этого оператора следующий:

do <оператор> while <условие>
Листинг 4.5.

где <условие> - условие окончания цикла (см. раздел 4.1.1.4), а <оператор> - любой допустимый оператор или блок операторов языка программирования, который выполняется определенное число раз ("тело цикла"). В теле цикле должно находиться условие, прекращающее цикл. В противном случае цикл будет повторяться бесконечное число раз (будет "зацикливаться").

На блок-схеме цикл: "до … пока" имеет следующий вид (см. рис. 4.4):

Оператор цикла: "до … пока" на блок-схеме.

Рис. 4.4. Оператор цикла: "до … пока" на блок-схеме.

Цикл: "до … пока" соответствует модификатору "плюс" ("+") в регулярном выражении (повторению один или более раз).

Примечание: правилом "хорошего тона" в программировании является не использование цикла: "до … пока", - а замена его циклом: "пока" (с соответствующим изменением алгоритма). Хотя автор выступает против этого правила: созданные с помощью цикла: "до … пока" алгоритмические конструкции более просты в понимании.
< Лекция 3 || Лекция 4: 1234 || Лекция 5 >