2.6. Булевский тип
Данные булевского типа могут принимать два значения:
- FALSE - ложь,
- TRUE - истина.
Для данных булевского типа определены следующие операции:
- NOT - отрицание;
- AND - конъюнкция (логическое умножение);
- OR - дизъюнкция (логическое сложение);
- XOR - исключающее "или" (отрицание равнозначности) - в Турбо Паскале.
Старшинство операций: NOT - AND - (OR ,XOR).
Операция NOT - унарная, т.е. определяет действие над одним операндом: изменяет его значение на противоположное.
Результатом операции AND является TRUE только в том случае, если оба операнда имеют значение TRUE , и FALSE - в противном случае.
Операция OR дает значение TRUE, если хотя бы один операнд имеет значение TRUE .
Операция XOR дает значение TRUE , если операнды различны, а если одинаковы - то значение FALSE.
Результат булевского типа дают операции отношения (табл.2.3):
Таблица 2.3
Список операций отношения
обозначение в Паскале |
< |
<= |
= |
<> |
>= |
> |
математический смысл |
< |
£ |
= |
¹ |
³ |
> |
В табл. 3.1 приведен полный список операций языка Паскаль и их старшинство.
Результат булевского типа дает функция Odd(x).
Пример 2.6.1. Пусть имеется следующее описание:
VAR b : Boolean; c,x,a : integer;
Тогда синтаксически корректны следующие присваивания:
b:=1 > 2; b:=NOT(a>=5); b:=(a>1) AND b .
Пример 2.6.2. Ввести целое. Определить, является ли оно кратным 7.
PROGRAM Krat;
VAR kr : Boolean;
x : integer;
BEGIN
Write('Ввести целое: '); ReadLn(x);
kr:=x MOD 7 = 0;
WriteLn('Число кратно 7 - ',kr)
END.
Решение задачи предусматривает присваивание булевской переменной kr значений TRUE или FALSE в зависимости от того, равен ли нулю остаток от деления числа x на 7.
Пример 2.6.3. Ввести два целых числа. Определить, есть ли среди них хотя бы одно, оканчивающееся цифрой 6.
PROGRAM c6;
VAR a,b : integer;
c : Boolean;
BEGIN
Write('2 целых = '); ReadLn(a,b);
c:=(a MOD 10 = 6) OR (b MOD 10 = 6);
WriteLn('Есть оканчивающиеся на 6 - ', c);
END.
Пример 2.6.4. Ввести три числа: a,b,x и выяснить, выполняется ли условие:
PROGRAM Diap;
VAR a,b,x,y : real;
usl : Boolean;
BEGIN
Write('a,b,x = ? '); ReadLn(a,b,x);
y:=x*x+1;
y:=(Sin(x)+Sqrt(y))/y;
usl:=(y>=a) AND (y<b);
WriteLn('Условие выполняется - ', usl)
END. Обратим внимание на то, что в данном случае нельзя записать оператор usl := a <= y < b , поскольку сначала выполнится сравнение a<=y, в результате чего получится булевская величина, которая уже не сможет сравниться с вещественным b.
.
Задачи
2.6.1. Ввести 3 целых. Выяснить, есть ли среди них хотя бы одно, оканчивающееся цифрой 7.
2.6.2. Ввести 3 целых. Выяснить, являются ли все они одинаковыми.
2.6.3. Ввести 3 целых. Определить, есть ли среди них хотя бы два одинаковых.
2.6.4. Ввести два целых. Определить, есть ли среди них хотя бы одно четное отрицательное.
2.6.5. Определить, пересекаются ли две окружности, заданные коор-динатами центров и радиусами.