Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Имеется 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 не является переменной логического типа, то среда выдаст сообщение об ошибке. Действительно, нет смысла проверять равенство логического значения и, например, числового. Чтобы проверить равенство сразу трех чисел необходимо использовать логические операторы.
Следующий раздел:
Предыдущий раздел:
Пример
b:=(sqrt(x)-1)/2 > sqr(x);
плох: можно строго показать, что это выражение ложно для любого x>=0.
Передвинул букву t. Так действительно лучше.
Да, а я во время лекции поменял «-» на «+».
А что значит оператор ?
Тарас Викторович! Повторно прошу вашу помощь =)
if s1>=1 and s1=1 and s1=’ не применима к типам integer и boolean», как таки это приравнять?
Если не трудно, то можно несколько вариантов =)
if s1>=1 and s1<=10 then
begin
writeln('текст');
end;
Нужны скобки
Оператор and имеет более высокий приоритет, чем операторы сравнения, то есть порядок вычислений будет: (s1 >= (1 and s1)) <= 10. То есть сначала считается 1 and s1 (для целых чисел такая операция допустима и результатом будет тоже целое число). Затем оно будет сравниваться с s1 (это тоже возможно, результатом будет логическое значение). Наконец, это логическое значение сравнивается с числом 10, а это уже невозможно - они разных типов.
Все работает! Спасибо огромное!
Извиняюсь за спам выше, но чат, почему-то, сьел середину моего сообщения)
>> но чат, почему-то, сьел середину моего сообщения)
Есть такая проблема. Скоро исправлю.
Тарас Викторович, операции сравнения( и другие) и логические операции(not, and, or) не совсем корректно называть операторами. Это операции над величинами соответствующего типа. Также как и арифметические операции (+. -. *. mod и др.). Понятие операции используется далее для определения понятия арифметическое, логическое выражение. Оператор (присваивания, условного перехода, цикла и др) — это философски другое понятие.
Спасибо за замечание. Внимательно прочитав определения, я склоняюсь к тому, что вы правы.
Хотя:
1) Погуглив, можно обнаружить, что словоупотребление «логические операторы» почти также распространено, как «логические операции».
2) По-английски это будет таки «logical operators».
3) Подходя философски, можно обнаружить не только различие, но и сходство между «a + b» и «a := b;». И то и другое — команды на совершение некоторого элементарного действия.
Проверьте пожалуйста:
program ;
var
b:boolean;
x:real;
begin
write(‘x’);
readln(x);
b:=(x>=-2) and (x<=1);
writeln(b);
end.