Логический тип Boolean

В операторах if, while, repeat мы привыкли писать выражения вида a>b, i<=0, c=’крот’, 3>2, (a>b)AND(a>c) и т.п. Про каждое из этих выражений можно сказать, истинно оно в данный момент или ложно. Например, выражение 3>2 истинно всегда, а выражение i<=0 ложно в тот момент, когда i равно, скажем, 2. Такие выражения называются логическими выражениями.

Говорят, что логическое выражение 3>2 имеет значение “истина” (по-английскиtrue- “тру”), а логическое выражение i<=0 имеет значение “ложь” (по-английски false- “фолс”).

Внутренняя идеология построения языка Паскаль требует определить новый тип переменных - логический тип Boolean. Запись VAR a:Booleanозначает, что переменная aможет принимать всего два значения - true и false. Так, мы можем записать a:=false.

Слова true и false являются логическими константамии их можно употреблять в логических выражениях или вместо них. Например, if a=true then... Конструкцию if (a>b)=false then... можно перевести “если неправда, что a больше b, то...”.

Значения true и false удобно применять для организации бесконечных циклов:

while true do .......

repeat ........... until false

Решим конкретный пример на этот тип.

Задача: В группе - 6 студентов. Сколько из них сдали зачет по физике?

Сначала напишем программу без использования типа Boolean. В ней единицей я обозначил зачет, нулем - незачет. Массив Zachet из 6 элементов хранит информацию о зачете.

CONST Zachet :array[1..6] of Integer = (1,1,0,1,1,1);
VAR c,i :Integer;
BEGIN
c:=0; {c - счетчик зачетов}
for i:=1 to 6 do if zachet[i] = 1 then c:=c+1;
WriteLn(c)
END.

Теперь напишем программу с использованием типа Boolean. В ней через true я обозначил зачет, через false - незачет.

CONST Zachet :array[1..6] of Boolean = (true,true, false, true, true, true);
VAR c,i :Integer;
BEGIN
c:=0;
for i:=1 to 6 do if zachet[i] = true then c:=c+1;
WriteLn(c)
END.

Отличие второй программы от первой в том, что выражение zachet[i] = true (зачет равен истина) выглядит естественнее и понятнее, чем zachet[i] = 1 (зачет равен единице, то есть колу?). В общем, чуть-чуть нагляднее.

Кстати, вполне правильно было бы написать и if zachet[i] then .... Ведь условием после слова if может стоять любое логическое выражение, имеющее значением true или false.