Разветвляющиеся процессы обработки данных, страница 3

Структурные операторы

Структурный оператор - оператор, в состав которого могут входить один или несколько операторов, порядок выполнения которых он определяет.

Структурные операторы подразделяются на:

·  Составной оператор

·  Условные операторы

·  Операторы цикла

·  Оператор над записями

Условные операторы

Условные операторы позволяют выбрать для выполнения один из нескольких операторов (или не выбрать ни одного).

Этот выбор осуществляется в зависимости от некоторого условия.

По типу условия выбора и по числу доступных для выбора операторов условные операторы делятся на:

·  Условный оператор if

·  Оператор варианта case

Условный оператор if

Условный оператор(if) имеет следующий синтаксис (см. также синтаксическую диаграмму):

if E then s1 else s2

и может так же использоваться в сокращённом виде

if E then s1

здесь E - выражение, s1 – оператор, и s2 – оператор. Выражение E называют условием выбора, оно должно быть выражением стандартного типа Boolean (мы будем также называть этот тип логическим или булевским); if, then и else – зарезервированные слова.

Полная форма оператора if предполагает выбор одного из двух операторов: S1, S2 в зависимости от условия выбора: если E = True, то выполняется оператор S1, иначе если E =False, то выполняется оператор S2.

Сокращенная форма оператора if предполагает выбор одного из двух операторов: S1 и пустого оператора в зависимости от условия выбора: если E = True, то выполняется оператор S1, иначе если E = False, то выполняется пустой оператор.

Синтаксическая неоднозначность, возникающая в конструкции:

if E1 then if E2 then S1 else S2

разрешается путем следующей интерпретации этой конструкции:

if E1 then begin if E2 then S1 else S2 end;

В общем случае, ключевое слово else связывается с ближайшим ключевым словом if, с которым еще не ассоциировано else.

Управляющая структура оператора if в сокращённой форме - это структура типа «ifthen», в которой if-тест соответствует выражению E, а then - часть - оператору S1.

Управляющая структура оператора if в полной форме - это структура типа «ifthenelse», в которой if-тест соответствует выражению E, then - часть - оператору S1, else - часть - оператору S2.

Пример оператора if

var

   X, Y, Z: Integer;

begin

     Readln(X, Y);

     if X > Y then Z:= X else Z:= Y;{ Z = max(X,Y). В результате выполнения оператора if Z получает наибольшее из значений X и Y }

     if X < 0 then X:= -X ;{ X = Abs(X). В результате выполнения оператора if X получает значение равное абсолютному значению X }

end.

Структура ifthen

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

Then-часть - описание процесса обработки данных, который будет выполнен, если if-тест примет значение «истина».

На Object Pascal она может быть реализована посредством применения условного оператора.

Е – схема выполнения для структуры ifthen.

Как видно из приведённого ниже рисунка программа с управляющей структурой «ifthen» имеет два пути выполнения. При выполнении программы по первому пути (If-тест принимает значение «true») выполняются действия по обработке данных поименованные как «Then-часть». При выполнении программы по второму пути (If-тест принимает значение «false») никаких действий по обработке данных не выполняется.

Структура ifthenelse

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

Then-часть - описание процесса обработки данных, который будет выполнен, если if-тест примет значение «истина».

Else-часть - описание процесса обработки данных, который будет выполнен, если if-тест примет значение «ложь».

На Object Pascal она может быть реализована посредством применения условного оператора.

Е – схема выполнения для структура ifthenelse.

Как видно из приведённой ниже на рисунке Е-схемы программа с управляющей структурой «ifthen» имеет два пути выполнения. При выполнении программы по первому пути (If-тест принимает значение «true») выполняются действия по обработке данных поименованные как «Then-часть». При выполнении программы по второму пути (If-тест принимает значение «false») выполняются действия по обработке данных поименованные как «Else-часть».

Синтаксическая диаграмма оператора if

Вложенные операторы if

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

Текст программы с детальным сообщением об ошибке приведён ниже.

program PGeron;

{$APPTYPE CONSOLE}

// Программа для вычисления площади треугольника

// Пример программы с разветвляющимся вычислительным процессом

uses

  SysUtils,

  URussian;

//URussian модуль, содержащий функцию Rus, для //русификации строк при выводе на монитор

var

  a,b,c: Real;//исходные данные

  p: Real;//вспомогательная переменная

  s: Real;//результат

  poz: boolean;//вспомогательная переменная

//poz=true, если a,b,c - положительные числа, false в //противном случае

  Issides: boolean;//вспомогательная переменная

//Issides =true, если a,b,c - стороны треугольника, //false в противном случае

  mes: String = '';

//переменная содержащая строку сообщения об ошибке в исходных данных. Начальное

//значение - пустая строка

begin

  write(Rus('Стороны треугольника: ')); readln(a,b,c);

  poz:= (a > 0)and(b > 0)and(c > 0);

  Issides:= poz and (c< (a + b)) and (a< (c + b)) and (b < (c + a));

  if Issides

    then//a,b,c - //стороны треугольника

      begin