В жизни бывают ситуации, когда то или иное действие мы выполняем при соблюдении нескольких условий.
ЕСЛИ товар хороший И достаточно денег ТО покупаем
ЕСЛИ свет зеленый ИЛИ нет машин ТО переходим дорогу
Для записи данных конструкций в паскале существуют логические операторы (AND)И (OR)ИЛИ (NOT)НЕ, а также переменная логического типа Boolean (аналог 1 или 0)
Переменные логического типа могут принимать только два значения — False (ложь) и True (истина). Описываются они в разделе описания переменных VAR.
Var Flag : Boolean;
ВАЖНО: Переменные и знак отношений, которые принимают участие в логическом выражении берут в скобки.
ВАЖНО: В языке Паскаль нет возможности ввода логических данных с помощью оператора read. Однако предусмотрен вывод значений переменных логического типа с помощью оператора write.
Используя операции not, and, or, xor записать сложные условия , истинные для следующей ситуации:
Число x лежит вне отрезка [-3 ,3].
var f:boolean; x:real; begin write('x='); readln(x); f:=(x>=-3)and(x<=3); write(f); readln end.
Сумма целых чисел х и у является трёхзначным числом и заканчивается на 0
var f:boolean; x,y:integer; begin writeln('Введите 2 целых числа'); readln(x,y); f:=(x+y>99)and(x+y<1000)and((x+y) mod 10=0); write(f); readln end.
Является ли данное трёхзначное число перевертышем.
var s,d,e,e, f: integer; b1, b2: boolean; begin write('Введите число четырехзначное число: '); readln(e); s := e div 100; d := e mod 100 div 10; e := e mod 10 div 1; f := e * 100 + d * 10 + s; writeln('Данное число является палиндромом - ', f = e); end.
С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.
В языке программирования Pascal предусмотрены следующие логические операции:
Конъюнкция (логическое умножение, пересечение) — and.
Выражение a and b дает значение true только в том случае, если a и b имеют значение true. Во всех остальных случаях значения выражения a and b дает false.
true and true = true true and false = false false and true = false false and false = false
Дизъюнкция (логическое сложение, объединение) – or.
Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат – true.
true and true = true true and false = true false and true = true false and false = false
Отрицание (инверсия) – not.
Выражение not a имеет значение, противоположное значению a.
not true = false not false = true
Исключающее ИЛИ – xor.
Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.
true and true = false true and false = true false and true = true false and false = false
Пример:Дано 3 отрезка А,В,С. Проверить, возможно ли из них составить треугольник.
Школьный курс геометрии говорит: Треугольник существует только тогда, когда сумма любых двух его сторон больше третьей.
var a, b, c: integer; begin write (' Длины сторон: '); readln (a,b,c); if ((a < b+c) and (b < a+c)) and (c < a+b) then writeln ('Треугольник существует.') else writeln ('Треугольник не существует.'); readln end.
Пример: Дано числа a, b, c – стороны предполагаемого треугольника. Проверить, является ли он прямоугольным.
var a, b, c: integer; begin write (' Длины сторон: '); readln (a,b,c); if ((a*a = b*b+c*c) or (b*b = a*a+c*c)) or (c*c = a*a+b*b) then writeln ('Треугольник существует.') else writeln ('Треугольник не существует.'); readln end.
Дано точка с координатами X,Y по модулю меньше 100. Написать программу, которая определит, какой координатной четверти она принадлежит. Если (0,0) вывести сообщение «0»
var x,y:real; answ:byte; begin write('X=');readln(x); write('Y=');readln(y); if (x=0) or (y=0) then answ:=0; if (x>0) and (y>0) then answ:=1; if (x<0) and (y>0)then answ:=2; if (x<0) and (y<0) then answ:=3; if (x>0) and (y<0) then answ:=4; Writeln(answ); end.
Задано 3 целых числа — длины сторон треугольника. Длины сторон не превышают 100.
Вывести «1-равносторонний», если треугольник равносторонний, «2-равнобедренный» если равнобедренный и «3-разносторонний» если разносторонний.
var a,b,c:integer; res:string; begin write('A=');readln(a); write('B=');readln(b); write('C=');readln(c); if ((a=b) and (b=c)) then res:='1-равносторонний' else if ((a<>b) and (b<>c) and (c<>a)) then res:='3-разносторонний' else res:='2-равнобедренный'; writeln(res); end.
Что нужно знать:
Знать служебные слова AND OR NOT
Формат записи сложных логический выражений (использование скобок);
Объявлять и использовать логические переменные