Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR1-3.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
500 Кб
Скачать
☆

Тема: Логические выражения. Логический тип. Условный оператор. Оператор выбора. Программирование разветвляющихся алгоритмов

Логические выражения

Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выражений используются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), > (отношение больше), <= (отношение меньше или равно), >= (отношение больше или равно).

Сложные условия составляются из простых с помощью логических операций: and (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!).

Примеры логических выражений:

5>3; 2<=6; (x<2) and (x>=0); 2*x+5<>0 и т.п.

При вычислении логических выражений операции выполняются в следующем порядке: not, and, or, операции отношения, арифметические операции. Если порядок выполнения операций нужно изменить, то применяют скобки.

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

В Турбо Паскале логический тип носит название BOOLEAN. Значением логического типа может быть одна из двух констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:

Ord(false)=0

Ord(true)=1

False<true

Succ(false)=true

Pred(true)=false

Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0 содержали только один булевский тип Boolean, элементы которого могут принимать лишь два логических значения: True (истина) и False (ложь). В Turbo Pascal версии 7.0 добавлены еще три булевских типа ByteBool, WordBool и LongBool.

Название

Значению False соответствует

Значению True соответствует

Размер памяти

Boolean

Число 0

1

1 байт

ByteBool

Число 0

Любое число, отличное от 0

1 байт

WordBool

Число 0 в обоих байтах

2 байта

LongBool

Число 0 во всех байтах

4 байта

Отметим, что новые булевские типы были введены для обеспечения совместимости разрабатываемых программ с Windows, в которой значению False соответствует 0, а значению True – любое, отличное от 0, число.

Логические переменные должны быть описаны предложением:

Var <имя_переменной>: boolean;

Величины логического типа можно присваивать, выводить, но нельзя вводить процедурой read. Например: X:= true; y:=5>3 и т.п.

Условный оператор

Условные операторы позволяют выбирать для выполнения те или иные части программы в зависимости от некоторых условий. Если, например, в программе используются вещественные переменные x, y и z, и на каком-то этапе решения задачи требуется вычислить z= max(x, y), то желаемый результат получается в результате выполнения либо оператора присваивания z:= x, либо оператора присваивания z:= y. Поскольку значения переменных x и y заранее неизвестны, а определяются в процессе вычислений, то в программе необходимо предусмотреть оба эти оператора присваивания. Однако на самом деле должен выполниться один из них. Поэтому в программе должно содержаться указание о том, в каком случае надо выбирать для исполнения тот или иной оператор присваивания.

Это указание естественно сформулировать с использованием отношения x>y. Если это отношение при текущих значениях x и y справедливо (принимает значение true), то для исполнения должен выбираться оператор z:= x; в противном случае для исполнения должен выбираться оператор z:= y (при x=y безразлично, какой оператор выполнять, так что выполнение оператора z:= y в этом случае даст правильный результат).

Для задания подобного рода разветвляющихся вычислительных процессов в языках программирования существуют условные операторы. Рассмотрим полный условный оператор:

if B then S1 else S2

Здесь if (если), then (то) и else (иначе) являются служебными словами, В – логическое выражение, а S1 и S2 – операторы.

Выполнение такого условного оператора сводится к выполнению одного из входящих в него операторов S1 или S2: если заданное в операторе условие выполняется (логическое выражение В принимает значение true), то выполняется оператор S1, в противном случае выполняется оператор S2.

Алгоритм решения упомянутой выше задачи вычисления z= max(x, y) можно задать в виде условного оператора

if x>y then z:= x else z:= y

При формулировании алгоритмов весьма типичной является такая ситуация, когда на определенном этапе вычислительного процесса какие-либо действия надо выполнить только при выполнении некоторого условия, а если это условие не выполняется, то на данном этапе вообще не нужно выполнять никаких действий. Простейшим примером такой ситуации является замена текущего значения переменной х на абсолютную величину этого значения: если x<0, то необходимо выполнить оператор присваивания x:= -x; если же x>=0, то текущее значение х должно остаться без изменений, т.е. на данном этапе вообще не надо выполнять каких-либо действий.

В подобных ситуациях удобна сокращенная форма записи условного оператора:

if B then S

Правило выполнения сокращенного условного оператора достаточно очевидно: если значение логического выражения В есть true, то выполняется оператор S; в противном случае никаких иных действий не производится.

В языке программирования Паскаль в условном операторе между then и else, а также после else по синтаксису может стоять только один оператор. Если же при выполнении (или невыполнении) заданного условия надо выполнить некоторую последовательность действий, то их надо объединить в единый, составной оператор, т.е. заключить эту последовательность действий в операторные скобки begin...end (это важно!). Если, например, при x<y надо поменять местами значения этих переменных, то условный оператор будет записан следующим образом:

if x<y then begin r:=x; x:=y; y:=r end

Наличие сокращенной формы условного оператора требует большой осторожности при использовании. Например, условный оператор вида

if B1 then if B2 then S1 else S2

допускает, вообще говоря, две разные трактовки:

  • как полный условный оператор вида

if B1 then

begin if B2 then S1 end

else S2

  • как сокращенный условный оператор вида

if B1 then

begin if B2 then S1 else S2 end

По правилам Паскаля имеет место вторая трактовка, т.е. считается, что каждое слово else соответствует первому предшествующему ему слову then. Для избежания возможных ошибок и недоразумений можно порекомендовать во всех подобных случаях четко выделять желаемую форму условного оператора путем взятия в операторные скобки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]