3.2.5. Примеры использования условного оператора

 

1. Написать оператор, который при условии x2 ≤ 2 , печатает на экране значение х и текст «x вне диапазона». Если условие не выполняется, то рассчитывает значение переменной  и печатается её значение.

if x*x<=2 then writeln(x,' x вне диапазона')

     else

      begin

        f:=sqrt(1e-5*(x*x-2));

        writeln(f);

      end;

2. Написать оператор, который при условии 2 < x < 10 , рассчитывает значение переменной  и печатает её.

if ((2<x) and (x<10)) then

   begin

      f:=1e6*exp(2*x)*sin(x);

      writeln(f);

   end;

3. Написать оператор, который при условии x > 2 или х=3у+1 , вводит с клавиатуры переменную m и печатает значение выражения 10-17(m+2m2), если условие не выполняется, то выводит на экран значение х.

if ((x>2) or (x=3*y+1))

   then

      begin

        read(m);

        z:=1e-17*(m+2*m*m);

        writeln(z);

     end

   else writeln(x);

4. Написать оператор, который при условии x≠0, вводит с клавиатуры переменную а, рассчитывает и печатает значение выражения f=a∙sin(a/x). Если условие не выполняется, то рассчитывает переменную r=(2x-1)(5-x) и печатает ее значение.

if x< >0 then

    begin

       read(a);

       f:=a*sin(a/x);

       writeln(f);

   end

     else

      begin

         r:=(2*x-1)*(5-x);

         writeln(r);

      end;

5.Написать программу, которая из двух целых чисел а и b находит минимальное.

I. способ

Var a,b : integer;

   begin

     read(a,b);

     if a>b then c:=b

     else c:=a;

     writeln(‘минимальное’,c);

   end.

II. способ (усеченный оператор IF)

   begin

      read(a,b);

      c:=a;

      if b<a then c:=b;

      writeln(‘минимальное’,c);

   end.

6. Написать программу определяющую четность/нечетность целого числа, введенного с клавиатуры

Альтернативой для операции проверки деления нацело без остатка – mod, является функция odd(x), возвращающая True, если переданное ей число является нечетным

var x: integer;

begin

   readln(x);

   if x mod 2 = 0 then

   writeln('Четное число')

   else writeln('Нечетное число');

end.

7. Написать программу, которая определяет, является ли введённый год високосным.

Год считается високосный, если его номер делится на 4, кроме тех случаев, когда его номер делится на 100, но если номер делится на 400, то он всё равно високосный.

var a:integer;

begin

   writeln('Введите номер года');

   readln(a);

if ((a mod 4=0) and (a mod 100<>0) or (a mod 400=0))then

   writeln('Год високосный')

else writeln('Год не високосный');

end.

 

А теперь покажем примеры неверного использования блока условного оператора IF.

Задание. Упорядочить два введенных с клавиатуры целых числа по возрастанию и вывести на экран.

Верное написание

Неверное написание

 

var

   x, y, v: integer;

begin

   write('Введите x,y: ');

   readln(x,y);

   if x>y then

     begin

        v := x;

        x := y;

        y := v

     end;

   writeln('Результат упорядочения по возрастанию: ',x,' ',y);

end.

{Неверная расстановка begin end}

var x, y, v: integer;

begin

   write('Введите x,y: ');

   readln(x,y);

   begin {ошибка: операторные скобки должны использоваться по ветке then оператора if}

    if x>y then

                 v := x;

                 x := y;

                 y := v

   end;

   writeln('упорядочение по возрастанию: ',x,' ',y);

end.

{Операторные скобки должны находиться внутри оператора if, а не окаймлять его}

{Отсутствие begin end}

var x, y, v: integer;

begin

   write('Введите x,y: ');

   readln(x,y);

   if x>y then

    v := x; {ошибка: операторные скобки отсутствуют, поэтому по ветке then выполняется только этот первый оператор v:= x; }

    x := y; y := v; {эти операторы выполняются после оператора if в любом случае, что неверно}

  writeln('упорядочение по возрастанию: ',x,' ',y);

end.

 

Задание. Проверить, является ли введенное с клавиатуры число двузначным?

Верное написание

Неверное написание

var x: integer;

begin

   write('Введите x: ');

   readln(x);

   if ((x>=10) and (x<100)) then

   writeln('Это двузначное число')

   else writeln('Это не двузначное число');

end.

{Неверная расстановка скобок в сложном логическом выражении }

var x: integer;

begin

   readln(x);

   if x>=10 and x<100 then { ошибка: отсутствуют круглые скобки в условии}

   writeln('Это двузначное число')

   else writeln('Это не двузначное число');

end.

{В языке Паскаль операция and имеет более высокий приоритет, чем операции сравнения >,= и <, поэтому будет сделана попытка выполнить ее в первую очередь, что неверно}

Задание: Определить знак целого числа (переменной)

Верное написание

Неверное написание

Рекомендуется составной условный оператор

 

if a<0 then n:=-1

else if a>0 then n:=1

else n:=0;

 

или, по крайней мере, вариант с 3-мя усеченными операторами

 

if a<0 then n:=-1;

if a=0 then n:=0;

if a>0 then n:=1;

{"потерянные" или неверно срабатывающие ветви алгоритма при использовании короткого условного оператора}

var a,n: integer;

begin

   write('Введите а: ');

   readln(a);

   if a<0 then n:= -1;

   if a=0 then n:= 0

       else n:=1; .// после этого для a<0 n=1

   writeln(n);

end.