Лабораторная работа 2
Составление алгоритмов и программирование разветвляющихся алгоритмов с двумя альтернативами, ветвление ветвления, оператор выбора
Задание 2.1
Составить блок-схему алгоритмаи программу на языке Паскаль для вычисления значений функции \(y = f(x)\) при произвольных значениях \(x\). Получить результат работы программы для двух заданных значениий \(x\). \[y = \left\{ \begin{array}{ll} b + 3 \cos ^3 x & x \le 2\\ \sqrt {a x^2 + 7x + 10} & x > 2 \end{array} \right.\]
при заданном значении x, которое вводится с клавиатуры. Параметры функции приведены в таблице:
Параметр | Значение |
a | 3.7 |
b | 6.1 |
program Lab21;
var a, b, x, y : real;
begin
a:=3.7;b:=6.1;
write('Введите x = ');
readln(x);
if x<=2 then y := b + 3*cos(x)*sqr(cos(x))
else y := sqrt(a*sqr(x)+7*x+10);
writeln('При x = ', x:5:2, ' значение y = ', y:5:2);
readln;
end.
В программе используется простой условный (разветвляющийся) алгоритм, имеющий два варианта выполнения в зависимости от того истинно ли УСЛОВИЕ или ложно. Этот алгоритм в языке паскаль записывается следующим образом:
if УСЛОВИЕ then
begin
код, выполняемый, если УСЛОВИЕ истинно;
...;
...;
end
else
begin
код, выполнямый если УСЛОВИЕ ложно;
...;
...;
end
Если фрагмент кода, который выполняется при выполнении условия занимет одну строчку, то запись алгоритма ветвления можно упростить, записав соответствующий код сразу после ключего слова then и else:
if УСЛОВИЕ then код, выполняемый, если УСЛОВИЕ истинно
else код, выполнямый если УСЛОВИЕ ложно;
Альтернативный вариант формитирования программы, который читается лучше:
if УСЛОВИЕ then
код, выполняемый при УСЛОВИИ
else
код, выполнямый если УСЛОВИЕ не выпоняется;
Обратите внимание, что код, записанный после ключевого слова then не заканчивается точкой с запятой, поскольку алгоритм ветвления еще не закончен. Точка с запятой ставится только в конце строки с ключевым словом else.
Возможная также следующая конструкция алгоритма ветвления без альтернативного варианта:
if УСЛОВИЕ then
код, выполняемый при УСЛОВИИ ;
или, для многострочного кода:
if УСЛОВИЕ then
begin
код, выполняемый при УСЛОВИИ ;
... ;
... ;
... ;
end
Задание 2.2
Составить схему алгоритма и два варианта программы на языке Паскаль для вычисления значений функции \(y=f(x)\) при произвольных значениях \(x\). \[y =\left\{ \begin{array}{ll} x + 2b, & x < -1 \\ e^{-x} & -1 \leq x \leq 2\\ \cos ax & x>2 \end{array} \right.\]
Параметры функции приведены в таблице:
Параметр | Значение |
a | 3.7 |
b | 6.1 |
program Lab22;
var a,b,x,y:real;
begin
a:=3.7;
b:=6.1;
write('введите x=');
readln(x);
if x<-1 then
y:=x+2*b
else if x<=2 then
y:=exp(-x)
else
y:=cos(a*x);
writeln('При x=', x:5:2, ' значение y=', y:5:2);
readln;
end.
Задание 2.3
Задание. Составить схему алгоритма и программу на языке Турбо Паскаль для вычисления значений функции \(y=f(x)\) при произвольных значениях \(x\). \[y = \left\{ \begin{array}{ll} x + 2b & x = -2 \\ e^{-x} & x = 1 \\ \cos ax & x =3 \end{array} \right.\]
program Lab21;
var
a, b, y : real;
x : integer;
begin
a:=3.7;
b:=6.1;
write('Введите x=');
readln(x);
case x of
-2 : y:=x+2*b;
1 : y:=exp(-x);
3 : y:=cos(a*x);
else
begin
writeln ('значение x задано неверно' );
writeln('нажми Enter');
readln;
exit;
end;
end;
writeln('при x=',x,' значение y=',y:5:2);
readln;
end.
В этой программе используется оператор выбора case. Оператор case целеообразно использовать если необходимо выполнять различный код в зависимости от значения какой-либо переменной.
В примере вид вычисляемой функции меняется в зависимости от значения целочисленной переменной \(x\). Программу для вычисления функции можно написать, используя конструкцию if/else, но код получается громоздким:
program Lab21;
var
a, b, y : real;
x : integer;
begin
a:=3.7;
b:=6.1;
write('Введите x=');
readln(x);
if x = -2 then
y:=x+2*b
else if x = 1
y:=exp(-x)
else if x = 3
y:=cos(a*x)
else
begin
writeln ('значение x задано неверно' );
writeln('нажми Enter');
readln;
exit;
end;
writeln('при x=',x,' значение y=',y:5:2);
readln;
end.
Переменная, значение которой определяет выполняемый фрагмент кода, может иметь тип integer, char, string.
Оператор case может использоваться для выполнения кода при попадании проверяемой переменной в заданный интервал, нижняя и верхняя граница которого записываются через две точки:
program Lab21;
var
x : integer;
begin
write('Введите число от 1 до 9 :');
readln(x);
writeln('Вы ввели ');
case x of
1..5 : write('число меньше 6'); {Если x в диапазоне от 1 до 5}
6..9 : write('число больше 5'); {Если x в диапазоне от 6 до 9}
else
begin
writeln('Значение x вне диапазона от 1 до 9' );
writeln('Нажмите Enter');
readln;
end
end;
end.
или если значение переменной есть в списке значений, перечесляемых через запятую:
program Lab21;
var
x : integer;
begin
write('Введите число от 1 до 9 :');
readln(x);
writeln('Вы ввели ');
case x of
2,4,6,8 : write('нечетное число'); {Если x в списке 2,4,6,8}
1,3,5,7,9 : write('четное число');
else
begin
writeln('Значение x вне диапазона от 1 до 9' );
writeln('Нажмите Enter');
end
end;
end.