Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

2. Логические выражения и условный оператор

Предыдущий раздел:

Следующий раздел:

2.2. Операторы сравнения

Имеется 6 операторов сравнения: >, <, =, <=, >=, <>. С их помощью записываются простые логические выражения, принимающие значения true или false. Эти значения можно присваивать логическим переменным.

Пусть, например, описаны переменные:

  var
    b: boolean;
    x: real;

Допустимы следующие присваивания:

  b:=2>5;
  b:=x>2;
  b:=(sqr(x)-1)/2 > sqrt(x);
и т.п.

Первый из приведенных операторов запишет в переменную b значение false. Результат работы остальных зависит от значения переменной x.

Операторы сравнения применимы и к самим логическим переменным и выражениям. При этом считается, что true больше чем false. Так, например, возможны выражения:

  b:= (2>5)<(6>2);	{в переменную b будет записано значение true}
  b:= b>false;	{значение переменной b не изменится}
  b:= b=true;	{снова переменная b останется такой, какая была}

Иногда, когда требуется проверить равенство сразу трех величин, студенты ошибочно пишут условие вида

  x = y = z

Паскаль интерпретирует это выражение следующим образом. Первое равенство x = y даст значение true или false и уже это значение будет сравниваться со значением переменной z. Если z не является переменной логического типа, то среда выдаст сообщение об ошибке. Действительно, нет смысла проверять равенство логического значения и, например, числового. Чтобы проверить равенство сразу трех чисел необходимо использовать логические операторы.

Следующий раздел:

Предыдущий раздел:

12 комментариев

  1. Илья

    Пример

    b:=(sqrt(x)-1)/2 > sqr(x);

    плох: можно строго показать, что это выражение ложно для любого x>=0.

  2. Taras

    Передвинул букву t. Так действительно лучше.

  3. Илья

    Да, а я во время лекции поменял «-» на «+».

  4. Аноним

    А что значит оператор ?

  5. Роман

    Тарас Викторович! Повторно прошу вашу помощь =)

    if s1>=1 and s1=1 and s1=’ не применима к типам integer и boolean», как таки это приравнять?

    Если не трудно, то можно несколько вариантов =)

  6. Роман

    if s1>=1 and s1<=10 then
    begin
    writeln('текст');
    end;

  7. Taras

    Нужны скобки

      if (s1>=1) and (s1< =10) then
      begin
        writeln('текст');
      end;
    

    Оператор and имеет более высокий приоритет, чем операторы сравнения, то есть порядок вычислений будет: (s1 >= (1 and s1)) <= 10. То есть сначала считается 1 and s1 (для целых чисел такая операция допустима и результатом будет тоже целое число). Затем оно будет сравниваться с s1 (это тоже возможно, результатом будет логическое значение). Наконец, это логическое значение сравнивается с числом 10, а это уже невозможно - они разных типов.

  8. Роман

    Все работает! Спасибо огромное!
    Извиняюсь за спам выше, но чат, почему-то, сьел середину моего сообщения)

  9. Taras

    >> но чат, почему-то, сьел середину моего сообщения)

    Есть такая проблема. Скоро исправлю.

  10. Виктория

    Тарас Викторович, операции сравнения( и другие) и логические операции(not, and, or) не совсем корректно называть операторами. Это операции над величинами соответствующего типа. Также как и арифметические операции (+. -. *. mod и др.). Понятие операции используется далее для определения понятия арифметическое, логическое выражение. Оператор (присваивания, условного перехода, цикла и др) — это философски другое понятие.

  11. Taras

    Спасибо за замечание. Внимательно прочитав определения, я склоняюсь к тому, что вы правы.

    Хотя:
    1) Погуглив, можно обнаружить, что словоупотребление «логические операторы» почти также распространено, как «логические операции».
    2) По-английски это будет таки «logical operators».
    3) Подходя философски, можно обнаружить не только различие, но и сходство между «a + b» и «a := b;». И то и другое — команды на совершение некоторого элементарного действия.

  12. Сергей

    Проверьте пожалуйста:
    program ;
    var
    b:boolean;
    x:real;
    begin
    write(‘x’);
    readln(x);
    b:=(x>=-2) and (x<=1);
    writeln(b);
    end.

Добавить комментарий