Разветвляющиеся вычислительные процессы

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

В языке Pascal существует ряд средств, с помощью которых можно организовать разветвление в программе [Л1, стр. 51 - 54]. Одним из таких средств является условный оператор if.

Общий вид оператора if:

ifлогическое_выражениеthenоператор1еlseоператор2;

где оператор1, оператор2 – простые или составные операторы.

Составной оператор представляет собой последовательность операторов, заключенных в операторные скобки begin - end.

Выполнение оператора if:

1) вычисление значения логического выражения;

2) в случае, если его значение равно true (истина), выполняется оператор1, в противном случае - оператор2;

3) управление передается оператору, следующему за оператором if.

Допускается форма оператора if без конструкции else:

ifлогическое_выражениеthenоператор1;

В этом случае оператор1 выполняется, когда значение логического_выражения равно true (истина), в противном случае управление передается оператору, следующему за оператором if.

Пример 1. Вычислить значение функции y(x)

Разветвляющиеся вычислительные процессы - student2.ru

Программа Схема алгоритма

 
  Разветвляющиеся вычислительные процессы - student2.ru

Program Prim1;

var

a,x,y : real;

begin

writeln('Введите а, x');

readln(a,x);

if x>a then

y:=a*sin(x)

else

y:=1- sqr(x);

writeln('y=', y:7:2);

end.

Исходные данные: Результат:

I вариант a = 2.3; x = 5.5 y = -1.62

II вариант a = 12.1; x = 3.7 y = -12.69

Примечание.

В операторе вывода writeln('y=', y:7:2)указан формат вывода y:7:2для значения переменной y, где число 7 определяет общий размер поля, отводимого в строке вывода для размещения значения переменной, а число 2 указывает количество разрядов для дробной части этой переменной.

Пример 2. Вычислить значение функции y(x)

Разветвляющиеся вычислительные процессы - student2.ru

Программа Схема алгоритма

Разветвляющиеся вычислительные процессы - student2.ru Program Prim2;

var

a,b,x,y : real;

begin

writeln('Введите a, b, x');

readln(a,b,x);

if x<=1 then y:=abs(a*x+b)

else

if x>=2 then y:=exp(-x)+1

else y:= exp(4.5*ln(x));

writeln('y=', y:5:2);

end.

Примечание.

Для вычисления выражения x4.5 в программе

используется эквивалентное выражение:

x4.5=e4.5*lnx

Исходные данные: Результат:

I вариант a = 1.4; b = 3; x = -5.2 y= 4.28

II вариант a = 2.8; b = -4; x = 1.5 y= 6.20

III вариант a = 2; b = 6; x = 4 y= 1.02

Пример 3. Вычислить значение функции y(x)

Разветвляющиеся вычислительные процессы - student2.ru

Примечание.

В этом примере нужно предусмотреть выдачу на экран сообщения, (например, “Нет решения”) при возникновении так называемой исключительной (аварийной) ситуации [Л1, стр. 17], которая может произойти в случае, если знаменатель дроби 1/(a+x) равен нулю.

Программа Схема алгоритма

Разветвляющиеся вычислительные процессы - student2.ru Program Prim3;

label 1;

var

a,b,x,y : real;

begin

writeln('Введите a, b, x');

readln(a,b,x);

if x<=b then if (a+x)<>0 then y:=1/(a+x)

else

begin

writeln('Нет решения');

goto 1;

end

else y:=1+b*x;

writeln('y=', y:6:3);

1: end.

Примечания.

1. В операторе if перед словом elseпосле слова end нельзя ставить точку с запятой.

2. В данной программе используется оператор безусловного перехода goto 1;где 1 – метка, которая указывает, к какому оператору нужно перейти (Л1, стр. 47).

Метка выбирается пользователем и должна быть описана в разделе описаний программы, например так: label 1;

Исходные данные: Результат:

I вариант a = 4.35; b = 3; x = 2.85 y= 0.139

II вариант a = -1; b = 5; x = 1 Нет решения

III вариант a = 2.5; b = 3.7; x = 6.4 y=24.680

Пример 4. Вычислить значение функции y(x)

Разветвляющиеся вычислительные процессы - student2.ru

Примечание.

В этом примере исключительные ситуации могут возникнуть в случаях, если выражение (cx+d) меньше или равно нулю и выражение (dx-3) меньше нуля, т.е. в случаях невозможности выполнения вычисления логарифма отрицательного числа или числа, равного нулю, а также вычисления корня квадратного из отрицательного числа.

Схема алгоритма

 
  Разветвляющиеся вычислительные процессы - student2.ru

Программа

Program Prim4;

label 10;

var

c,d,x,y : real;

begin

writeln('Введите c, d, x');

readln(c,d,x);

if x<=c then if c*x+d>0 then y:=ln(c*x+d)

else

begin

writeln('Нет решения');

goto 10;

end

else if x>=d then y:=cos(x-c)

else

if d*x-3>=0 then y:=sqrt(d*x-3)

else begin

writeln('Нет решения');

goto 10;

end;

writeln('y=', y:8:3);

10 : end.

Исходные данные: Результат:

I вариант c = 3.26; d = 5.5; x = 8.12 y = 0.147

II вариант c = 12; d = -14; x = 1 Нет решения

III вариант c = 2.36; d = 10; x = 1.5 y = 2.606

IV вариант c = 2; d = 8; x = 5 y = 6.083

V вариант c = -4; d = 1; x = -2 Нет решения

Примечание.

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

Введем переменную k и присвоим ей начальное значение, равное нулю (k:=0). В случае возникновения исключительной ситуации (например, если выражение c*x+d принимает отрицательное значение) присвоим переменной k значение, равное единице (k:=1).

Т.о. значение переменной k определяет наличие или отсутствие исключительной ситуации.

Схема алгоритма

 
  Разветвляющиеся вычислительные процессы - student2.ru

Программа

Program Prim4-1;

var c,d,x,y : real;

k : integer;

begin

writeln('Введите c, d, x');

readln(c,d,x);

k:=0;

if x<=c then if c*x+d>0 then y:=ln(c*x+d) else k:=1

else if x>=d then y:=cos(x-c)

else if d*x-3>=0 then y:=sqrt(d*x-3) else k:=1;

if k=0 then writeln('y=', y:8:3) else writeln('Нет решения');

end.

Наши рекомендации