Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2.Разветвляющиеся алгоритмы.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
4.8 Mб
Скачать

Организация ветвлений в программе

В языке Паскаль используется два оператора для реализации условных переходов – IF и CASE. Они позволяют нарушить последовательный порядок выполнения инструкций программы.

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

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

If условие then оператор 1 else оператор 2;

Здесь if, then, else – зарезервированные слова языка, означающие соответственно ЕСЛИ, ТО, ИНАЧЕ. Условие – это логическое выражение, в зависимости от которого выбирается одна из двух альтернативных ветвей алгоритма.

Рис. 1 Схема полного условного оператора

Если значение условия истинно (TRUE), то будет выполняться оператор 1, записанный после ключевого слова then. В противном случае будет выполнен оператор 2, следующий за словом else, при этом оператор 1 пропускается. После выполнения указанных операторов программа переходит к выполнению команды, стоящей непосредственно после оператора if. Необходимо помнить, что перед ключевым словом else точка с запятой никогда не ставится! Порядок выполнения условного оператора представлен на рис. 1.

Условный оператор может не иметь конструкции else, тогда он называется сокращенным условным оператором. Если логическое выражение принимает значение ЛОЖЬ, сразу выполняется оператор, следующий за условным (рис. 2). Например, оператор

if x < О then x := –x;

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

Рис. 2 Схема сокращенного условного оператора

Пример программы со сложным логическим выражением

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

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

I-я часть: х <= 0; х2 + у2 <=9; у > –х – 3.

II-я часть: х >= 0; х2 + у2 <= 25.

Рис. 3 Задание для разработки программы

Точка с координатами (x, у) лежит в заштрихованной области, если она принадлежит I-ой или II-ой части. Программа вводит координаты точки, вычисляет логическое выражение, определяющее принадлежность точки области и выводит соответствующее сообщение на экран.

P rogram Point;

{Описание переменных: x, у – координаты точки}

Var x, y: real;

Begin

{Ввод данных}

Writeln ('Введите значение x'); Readln (x);

Writeln ('Введите значение y'); Readln (y);

{Определение принадлежности точки заштрихованной области}

If (X<=0) and (Sqr(X) + Sqr(Y) <= 9) and (Y >= –X – 3) or (X >= 0) and (Sqr(X) + Sqr(Y) <= 25)

then Writeln ('Точка лежит в заданной области')

else Writeln ('Точка не лежит в заданной области');

{Организация временной задержки}

Readln;

End.

Вложенные условные операторы

Следует помнить, что синтаксис языка допускает запись только одного оператора после ключевых слов then и else, поэтому группу инструкций обязательно надо объединить в составной оператор. Составной оператор – это заключенная между зарезервированными словами begin (НАЧАЛО) и end (КОНЕЦ) последовательность операторов, отделенных друг от друга точкой с запятой:

b egin

<Оператор 1>;

<Оператор 2>;

<Оператор N>

end

Каждый оператор, входящий в составной, может быть простым или структурным. Структурные операторы, в свою очередь, могут содержать составные. Зарезервированные слова begin и end называются операторными скобками.

Рис. 4. График функции

Примером простейшего разветвляющегося вычислительного процесса может служить программа определения значения функции у = f(x) (рис. 4).

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

Так как функция определена на отрезке [–1; 1], то при ее вычислении необходимо использовать структуру выбора, в одной ветви которой вычисляется значение по формуле у = –х2 + 1 и выводится на экран, а в другой – выводится сообщение ФУНКЦИЯ НЕ ОПРЕДЕЛЕНА. Алгоритм решения задачи представлен на рис. 5. Ниже приведен текст программы.

Program Razvilka;

{Описание переменных: x – значение аргумента; у – значение функции}

Var x, y: real;

Begin

Writeln ('Введите значение x');

Readln (x);

{Вычисление значения функции}

If abs(x) <= 1

then

begin у := –x*x+1; Writeln ('y=', y:6:3); end

else Write ('Функция не определена');

Readln;

End.

Рассмотрим ещё один пример. Дано действительное число х. Вычислить значение функции f(х), если

f (x)=

А лгоритм в данном случае имеет вложенную ветвящуюся структуру.

Program Formula;

Var x, f: real;

Begin

Writeln ('Введите значение действительного числа x');

Readln (x);

If (x <= 0)

then f := 0

else If (x <= 1) then f := sqr(x) – x

else f := sqr(x) – sin(Pi*x*x);

Write ('Значение функции F(x) при x=', x,' равно', f:8:3);

End.

Таким образом, структура выбора может входить составной частью в одну из ветвей другой структуры выбора. В этом случае имеет место сложное разветвление. Тогда ветвь else всегда относится к ближайшему if, не имеющему else. Примером задачи, также приводящей к сложному разветвлению, может служить следующая задача: из трех данных вещественных чисел X, Y, Z выбрать наибольшее (рис.6).

Рис. 6. Схема алгоритма сложного ветвления

{Использование алгоритма с вложенными полными ветвлениями}

Program MAX_1;

Var x, y, z: real;

Begin

Writeln ('Введите через пробел значения x, y, z');

Readln (x, y, z);

If x >= y

then if x >= z then max := x else max := z;

else if y >= z then max := y else max := z;

Writeln (‘Максимальное значение =’, max:8:2);

End.

Э тот же пример можно решить, используя алгоритм с последовательными неполными ветвлениями и сложными логическими выражениями.

Program MAX_2;

{Описание переменных: x, y, z – действительные числа}

Var x, y, z: real;

Begin

Writeln ('Введите через пробел значения x, y, z');

Readln (x, y, z);

If (x >= y) and (x >= z) then max := x;

If (y >= z) and (y >= z) then max := y;

If (z >= x) and (z >= y) then max := z;

Writeln (‘Максимальное значение =', max:8:2);

End.