Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Расширение алгоритмическх структур



Полное ветвление

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

Следует отметить, что команда ветвления является "командой над командами".

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

В языке программирования Pascal структура ветвления изображается оператором: IF <условие> THEN <команда 1> ELSE <команда 2>;

В виде одной команды можно оформить несколько команд.

В языке basic, если команда в строку не умещается, она оформляется так же, как в языке dBASE.

basic

IF <условие> THEN <команда 1> ELSE <команда 2>

pascal

IF <условие> THEN <команда 1> ELSE <команда 2>;

C

IF <условие> THEN <команда 1> ELSE <команда 2>;

dBASE

IF <условие>

<команды одной группы>

ELSE

<команды другой группы>

ENDIF

Если в тексте программы строка получается очень длинной, то команду ветвления оформляют в несколько строк с отступами

Внутри команды ветвления может быть другое ветвление.

Выбор

Внутри команды ветвления может быть другая команда ветвления.

Многократное выполнение ветвлений называют ВЫБОР

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

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

Запись оператора выбора:

basic

100 on k goto 200,300,...,900

Pascal

case k of

l: команда 1;

2: команда 2;

...

99: команда N;

else команда N+1

end;

C

switch (k)

{case l: команда 1; break;

case 2: команда 2; break;

...

case 99: команда N; break;

default: команда N+1;}

В алгоритмической структуре "выбор" вычисляется выражение k и выбирается ветвь, значение метки которой совпадает со значением k. После выполнения выбранной ветви происходит выход из конструкции выбора (в C, в отличие от Pascal, такой выход не осуществляется, а продолжают выполняться последующие операторы, поэтому для принудительного завершения оператора выбора применятся оператор break). Если в последовательности нет метки со значением, равным значению выражения k, то управление передается внешнему оператору, следующему за конструкцией выбора - (это происходит в случае отсутствия альтернативы выбора; если она есть, то выполняется следующий за ней оператор, а уже затем управление передается внешнему оператору).

Рекурсия

Подпрограммы в Паскале могут обращаться сами к себе. Такое обращение называется рекурсией.

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

Пример. Рассмотрим математическую головоломку из книги Ж. Арсака «Программирование игр и головоломок».

Построим последовательность чисел следующим образом: возьмем целое число i>1. Следующий член последовательности равен i/2, если i четное, и 3 i+1, если i нечетное. Если i=1, то последовательность останавливается.

Математически конечность последовательности независимо от начального i не доказана, но на практике последовательность останавливается всегда.

Применение рекурсии позволило решить задачу без использования циклов, как в основной программе, так и в процедуре.





Дата публикования: 2015-11-01; Прочитано: 384 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...