TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

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

Одной из основных алгоритмических структур является ветвление (альтернатива).

     Если условие выполняется, то будет выполнена инструкция "1", если нет, то - инструкция "2". Несмотря на то, что в схеме присутствуют два действия, выполнено будет только одно, так как условие либо ложно, либо истинно. Третьего не дано. Такая схема позволяет решать задачи, в которых в зависимости от сложившихся обстоятельств требуется совершить то или иное действие. Нет никакого сомнения, что число задач такого рода огромно. Более того, очень сложно придумать реально значимое задание, алгоритм выполнения которого содержал бы в себе простое прямое следование команд. Даже примитивный пример, взятый из курса математики, как вы увидите, не может быть решен без использования ветвления. Итак, необходимо вычислить значение выражения y=1/x. Вам известно, что данная функция не всегда имеет значение, то есть не для всех значений аргумента существует значение результата. Наша задача так составить алгоритм, чтобы исполнитель ни в коем случае не встал в тупик, даже при получении нуля в качестве аргумента. Сформулировать это на естественном языке не трудно:
1. Получить значение x.
2. Если x=0, то сообщить, что выражение значения не имеет, иначе - вычислить y как 1/x.

     Таким образом используется приведенная выше алгоритмическая структура. Она может быть выражена простыми словами:
     Если <усл.>                {Если выполняется условие}
     то <действие 1>         {то выполнить действие № 1 }
     иначе <действие 2>   {иначе - выполнить действие № 2 }
все

     Как это записать на Паскале? Да точно так же, только по-английски.

     Формат условного оператора на языке Паскаль:
     If <условие>
     Then <оператор 1>
     Else <оператор 2>;

     Обратите внимание на то, что в Then- и Else- части стоит только один оператор. Но что делать, чтобы решить задачу, в которой по выполнению или невыполнению условия нужно совершить не одно, а несколько действий? Здесь приходит на помощь уже известный вам составной оператор. В операторные скобки можно заключить любое количество операторов.

     Вариант условного оператора в этом случае:
If <условие>
Then Begin <группа операторов 1> end
Else Begin < группа операторов 2> end;

     Знак "точка с запятой" не ставится перед служебным словом Else, но операторы в группах, естественно, отделяются друг от друга этим знаком.

     Теперь поговорим об условиях. В программах на языке Паскаль условия представляют собой выражения, значением которых является величина логического (Boolean) типа. Это может быть как просто переменная указанного типа, так и сложная последовательность высказываний, связанных логическими операциями.

     В простых условиях могут применяться знаки операций сравнения: >(больше), <(меньше), =(равно), <>(не равно), >=(больше или равно), <=(меньше или равно).

     Примеры простых условий:      A=5 {Значение переменной А равно 5}
     (C+D3)>=(D1*(45-2)) {Значение выражения в левой части больше либо равно значению выражения из правой части}
     S<>'ABC' {Значение переменной S не равно строковой константе 'ABC'}

     Приведем пример решения еще одной задачи: "Из двух чисел выбрать наибольшее".

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

    Program Example;
    Var A,B,C : Real; {A,B - для хранения аргументов, C - результат}
    Begin
      Writeln('Введите два числа');
      Readln(A,B);                            {Вводим аргументы с клавиатуры}
      If A>B Then C:=A Else C:=B; {Если A>B, то результат - A, иначе результат - B}
      Writeln(C);                               {Выводим результат на экран}
    End.

     Еще один классический пример: "По заданным коэффициентам решить квадратное уравнение". Эта задача сложнее, поэтому перед тем как писать программу составим алгоритм, записав его в виде блок-схемы.Сначала вводим коэффициенты, затем вычисляем дискриминант. Теперь возникает две возможности: либо отсутствие действительных корней в случае отрицательного дискриминанта, либо эти корни можно все-таки вычислить и вывести на экран в случае неотрицательного дискриминанта (случай равенства дискриминанта нулю входит сюда же, корней - два, только они одинаковые J).

     При записи алгоритма на языке программирования следует учесть, что в ветви "нет" не одно действие, а три, поэтому следует применить составной оператор. Арифметические выражения не забывайте записывать в соответствии с правилами языка Паскаль. В остальном, эта программа не сложнее предыдущей.




    Program Sq1;
    Var A, B, C, D, X1, X2 : Real;
    Begin
      Writeln ('Введите коэффициенты квадратного уравнения');
      Readln (A,B,C);
      D:=B*B-4*A*C;
      If D<0 Then Writeln ('Корней нет! ')
      Else
      Begin
        X1:=(-B+SQRT(D))/2/A;
        X2:=(-B-SQRT(D))/2/A;
        Writeln ('X1=', X1:8:3, ' X2=',X2:8:3)
      End
    End.

     Интересно, что в качестве оператора, который выполняется по выполнению или невыполнению условия, может выступать условный же оператор. В этом случае говорят о вложенности условных операторов. Я настоятельно рекомендую при решении такого рода задач составлять блок-схему алгоритма в тетради. Только потом, при составлении программы, вам остается лишь аккуратно прописывать сначала всю Then- часть, а затем переходить к Else- части. Обычно при записи условных операторов на языке Паскаль (особенно при множественных ветвлениях) команды записывают уступом вправо и вниз. Это повышает наглядность, и, поверьте, снижает потери времени на отладку.

     Для иллюстрации решим еще одну задачу: "решить уравнение вида A*x^2 + B*x + C = 0". Прошу не путать с квадратным уравнением, для которого нам было известно, что коэффициент А не равен нулю. Здесь же коэффициенты могут быть любыми числами. Исходя из элементарных математических рассуждений, получаем следующий алгоритм:

 

    Program Sq2;
    Var A, B, C, D, X, X1, X2 : Real;
    Begin

      Writeln ('Введите коэффициенты уравнения (A, B, C) ');
      If A=0 Then
          If B=0 Then
        If C=0 Then Writeln('X - любое число')
        Else Writeln('Корней нет! ')
          Else Begin X:=-C/B; Writeln('X=',X:8:3) End
      Else
      Begin
        D:=B*B-4*A*C;
        If D<0 Then Writeln ('Корней нет! ')
        Else
        Begin
          X1:=(-B+SQRT(D))/2/A;
          X2:=(-B-SQRT(D))/2/A;
          Writeln ('X1=', X1:8:3, ' X2=',X2:8:3)
        End
      End
    End.

     

 

На главную страницу
Rambler's Top100 Rambler's Top100 PROext: Top 1000
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz