Сейчас: Суббота, 07.02.2026, 23:17
  • Страница 1 из 1
  • 1
Разветвляющиеся алгоритмы. Оператор If
Администратор
Offline
Дата: Суббота, 04.01.2014, 13:22 | Сообщение # 1
Помощник
Группа: Администраторы
Сообщений: 167
Награды: 0
Репутация: 60
До сих пор Вы использовали линейные алгоритмы, т.е. алгоритмы, в которых все этапы решения задачи выполняются строго последовательно. Сегодня Вы познакомитесь с разветвляющимися алгоритмами.
Определение. Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма.
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий - простые и составные.
Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков:
< - меньше, чем...
> - больше, чем...
<= - меньше, чем... или равно
>= - больше, чем... или равно
<> - не равно
= - равно
Например, простыми отношениями являются следующие:
x-y>10; k<=sqr©+abs(a+b); 9<>11; ‘мама’<>‘папа’.
В приведенных примерах первые два отношения включают в себя переменные, поэтому об истинности этих отношений можно судить только при подстановке конкретных значений:
  • если х=25, у=3, то отношение x-y>10 будет верным, т.к. 25-3>10
  • если х=5, у=30, то отношение x-y>10 будет неверным, т.к. 5-30<10


Проверьте истинность второго отношения при подстановке следующих значений:
  • k=5, a=1, b=-3, c=-8

  • k=65, a=10, b=-3, c=2
    Определение. Выражение, о котором после подстановки в него значений переменных можно сказать, истинно (верно) оно или ложно (неверно), называется булевым (логическим) выражением.
    Примечание. Название “булевы” произошло от имени математика Джорджа Буля, разработавшего в XIX веке булеву логику и алгебру логики.
    Определение. Переменная, которая может принимать одно из двух значений: True (правда) или False (ложь), называется булевой (логической) переменной. Например,
    К:=True;
    Flag:=False;
    Second:=a+sqr(x)>tРассмотрим пример.
    Задача. Вычислить значение модуля и квадратного корня из выражения (х-у).
    Для решения этой задачи нужны уже знакомые нам стандартные функции нахождения квадратного корня - Sqr и модуля - Abs. Поэтому Вы уже можете записать следующие операторы присваивания:
    Код
    Koren:=Sqrt(x-y);
    Modul:=Abs(x-y)
    В этом случае программа будет иметь вид:
    Код
    Program Znachenia;
    Uses
        Crt;
    Var
        x, y : integer;
        Koren, Modul : real;
    Begin
        ClrScr;
        write ('Введите значения переменных х и у через пробел ');
        readln (x, y);
        Koren:=Sqrt(x-y);
        Modul:=Abs(x-y);
        write ('Значение квадратного корня из выражения (х-у) равно ', Koren);
        write ('Значение модуля выражения (х-у) равно ', Modul);
        readln;
    End.
    Казалось бы, задача решена. Но мы не учли области допустимых значений для нахождения квадратного корня и модуля. Из курса математики Вы должны знать, что можно найти модуль любого числа, а вот значение подкоренного выражения должно быть неотрицательно (больше или равно нулю).
    Поэтому наша программа имеет свою допустимую область исходных данных. Найдем эту область. Для этого запишем неравенство х-у>=0, то есть х>=у. Значит, если пользователем нашей программы будут введены такие числа, что при подстановке значение этого неравенства будет равно True, то квадратный корень из выражения (х-у) извлечь можно. А если значение неравенства будет равно False, то выполнение программы закончится аварийно.
    Задание. Наберите текст программы. Протестируйте программу со следующими значениями переменных и сделайте вывод.
  • х=23, у=5;
  • х=-5, у=15;
  • х=8, у=8.
    Каждая программа, насколько это возможно, должна осуществлять контроль за допустимостью величин, участвующих в вычислениях. Здесь мы сталкиваемся с разветвлением нашего алгоритма в зависимости от условия. Для реализации таких условных переходов в языке Паскаль используют операторы If и Case, а также оператор безусловного перехода Goto.
    Рассмотрим оператор If.
    Для нашей задачи нужно выполнить следующий алгоритм:
    если х>=у,
    то вычислить значение квадратного корня,
    иначе выдать на экран сообщение об ошибочном введении данных.Запишем его с помощью оператора If. Это будет выглядеть так.
    Код
    if x>=y
        then
          Koren:=Sqr(x-y)
        else
    write ('Введены недопустимые значения переменных');
    Теперь в зависимости от введенных значений переменных х и у, вычисление квадратного корня может выполняться или не выполняться.
    В общем случае полная форма конструкции условного оператора имеет вид:
    Код
    if <логическое выражение>   
        then
          <оператор 1>   
        else   
          <оператор 2>
    Условный оператор работает по следующему алгоритму.
    Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется <оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется <оператор 2>.
    Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.
    Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin ... End называется составным оператором.
    Код
    if <логическое выражение>
        then
          begin   
            оператор 1;
            оператор 2;
            ...
          end
        else   
          begin
            оператор 1;
            оператор 2;
            ...
          end;
    Определение. Составной оператор - объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).
    Код
    begin
        оператор 1;
        оператор 2;
    end;
    С учетом полученных знаний преобразуем нашу программу.
    Код
    Program Znachenia;
    Uses
        Crt;
    Var
        x, y : integer;
        Koren, Modul : real;
    Begin
        ClrScr;
        write ('Введите значения переменных х и у через пробел ');
        read (x, y);
        if x>=y
          then
            begin
              Koren:=Sqr(x-y);
              Modul:=Abs(x-y);
              write ('Значение квадратного корня из выражения (х-у) равно ', Koren);
              write ('Значение модуля выражения (х-у) равно ', Modul);
            end
          else
            write ('Введены недопустимые значения переменных');
        readln;
    End.
    Составным оператором является и такой оператор
    Код
    begin
        S:=0;
    end.
    Cимвол “;” в данном случае разделяет оператор присваивания S:=0 и пустой оператор.
    Пустой оператор не влечет никаких действий и в записи программы никак не обозначается.
    Например, составной оператор
    begin
    end.
    включает лишь один пустой оператор.
    Если Вы обратили внимание, программа на языке Паскаль всегда содержит один составной оператор - раздел операторов программы.
    Внимание! Перед служебным словом Else разделитель (точка с запятой) не ставится.
    Отметим, что большинство операторов в программах на языке Паскаль заканчиваются точкой с запятой, но после некоторых операторов точка с запятой не ставится. Сформулируем общие правила употребления точки с запятой:
  • Каждое описание переменной и определение константы заканчиваются точкой с запятой.

  • Каждый оператор в теле программы завершается точкой с запятой, если сразу за ним не следуют зарезервированные слова End, Else, Until.

  • После определенных зарезервированных слов, таких, как Then, Else, Var, Const, Begin, никогда не ставится точка с запятой.
    Рассмотрим еще один пример.
    Задача. Вывести на экран большее из двух данных чисел.
    Код
    Program Example1;
    Var
        x, y : integer; {вводимые числа}
    Begin
        writeln('Введите 2 числа '); {вводим два целых числа через пробел}
        readln(x,y);
        if x>y
          then
            writeln (x) {если х больше y, то выводим х}
          else
            writeln (y); {иначе выводим y}
          readln;
    End.
    Можно также использовать и сокращенную (неполную) форму записи условного оператора. Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо.
    Неполная форма условного оператора имеет следующий вид.
    Код
    if <логическое выражение>   
        then
          <оператор>
    Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.
    Задача. Составить программу, которая, если введенное число отрицательное, меняет его на противоположное.
    Код
    Program Chisla;
    Var
        x : integer; {вводимое число}
    Begin
        writeln('Введите число '); {вводим целое число}
        readln(x);
        if x<0
          then
            x:=-x;
        writeln (x);
        readln;
    End.

    Информация взята с сайта informatics.mccme.ru
  •  
    • Страница 1 из 1
    • 1
    Поиск: