Лабораторная работа 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, которое вводится с клавиатуры. Параметры функции приведены в таблице:

ПараметрЗначение
a3.7
b6.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.

Параметры функции приведены в таблице:

ПараметрЗначение
a3.7
b6.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.

© 2018. All rights reserved.