Ветвь else относится к ближайшему слева if ,




Реализация разветвляющихся алгоритмов

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

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

Структура ветвления

Начнем изучение со структуры ветвления. Обе формы структуры – полная и короткая приведены на рис. 12.1.

a) полная структура ветвления b) короткая структура ветвления

Рис. 12.1. – Структура ветвления

IV.2.5. Условный оператор

Назначение

Для реализации структуры ветвления используется условный оператор (полный и короткий).

Синтаксис

Синтаксис определяется синтаксической диаграммой, приведенной на рис. 12.2.

 

Рис. 12.2. – Условный оператор

Существует две формы условного оператора:

- полный условный оператор с ветвью else;

- короткий условный без ветви else.

 

Семантика

1) вычисляется логическое выражение между IF и THEN (возможен ответ true или false);

2) Если результат true, то выполняется оператор1, оператор2 не выполняется.
Если же ответ false, то выполняется оператор2, оператор1 не выполняется (для короткого условного оператора в этом случае никаких действий не производится).

Семантическая неоднозначность

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

if <условие 1 > then if <условие 2 > then <оператор A > else <оператор B >

Эту конструкции можно трактовать двояко. Первый вариант (рис.12.3):

Рис. 12.3. – Семантическая неоднозначность (первый вариант трактовки)

внутрь полного условного оператора

if <условие 1 > then < оператор1 > else <оператор B >

в качестве оператора1 по ветви then вложен короткий условный оператор

if <условие 2 > then <оператор A >

Второй вариант (рис. 12.4): внутрь короткого условного оператора

if < условие1 > then < оператор >

в качестве оператора вложен полный условный оператор

if <условие 2 > then <оператор A > else <оператор B >

Рис. 12.4. – Семантическая неоднозначность (второй вариант трактовки)

Естественно, разные варианты трактовки, дают разный семантический смысл (получаются различные результаты).

Для устранения такой неоднозначности принято следующее синтаксическое правило:

ветвь else относится к ближайшему слева if,

т.е. в нашем примере справедлив второй вариант - внутрь короткого условного оператора в качестве оператора вложен полный условный оператор

Для поддержки первого варианта вложенный по ветви оператор, расположенный по ветви then, необходимо заключить в операторные скобки begin end, т.е. сделать из него составной оператор:

if <условие1> then

begin if<условие2> then <операторA> end

else <операторB>

Рассмотрим примеры реализации разветвляющихся алгоритмов со структурой ветвления.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: