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



В  Паскале имеется логический тип данных.

Логические константы: true (истина), false (ложь).

Логические переменные: описываются с типом Boolean.

Операции отношения: осуществляют сравнение двух операндов и определяют, истинно или ложно соответствующее отношение между ними. Знаки операций отношения: = (равно), <> (не равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно).

Логические операции: not — отрицание, and — логическое умножение (конъюнкция), or — логическое сложение (дизъюнкция), хоr — исключающее ИЛИ. Таблица истинности для этих операций (Т — true; F — false):

Логическое выражение может состоять из логических констант и переменных, отношений, логических операций. Логическое выражение принимает значение true или false.

Например, логическая формула X & У v X & Z на Паскале запишется в виде следующего логического выражения:

not X and Y or X and Z,

где X, Y, Z — переменные типа Boolean.

Логические операции располагаются в следующем порядке по убыванию старшинства (приоритета): 1) not, 2) and, 3) or , xor. Операции отношения имеют самый низкий приоритет. Поэтому если операндами логической операции являются отношения, то их следует заключать в круглые скобки. Например, математическому неравенству 1 ≤ X ≤ 50 соответствует следующее логическое выражение:

(1 <= Х) and (Х <= 50)

Логическая функция odd (x) принимает значение true, если значение целочисленного аргумента х является нечетным, иначе — false.

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

1. Арифметические операции:

- (минус унарный)

*, /

+, -

2. Логические операции:

Not

And

Or , xor

3. Операции отношения:

=, <>, >, <, >=, <=

Еще раз обратите внимание, что в логическом выражении, соответствующем предикату из примера 3:

(Y > -X) and (Y < 1) and (Y > X * X),

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

Вопросы и задания

 

1. Какого типа величина получается при вычислении отношения (неравенства) между числами?

2. Что такое предикат? Приведите примеры.

3. Запишите на языке алгебры логики логические функции, которые будут принимать значение ИСТИНА, если справедливы следующие утверждения, и ЛОЖЬ — в противном случае:

а) все числа X, Y, Z равны между собой;

б) из чисел X, Y, Z только два равны между собой;

в) каждое из чисел X, Y, Z положительно;

г) только одно из чисел X, У, Z положительно;

д) значения чисел X, У, Z упорядочены по возрастанию.

 

4. Все формулы, полученные при решении предыдущей задачи, запишите в виде логических выражений на Паскале.

5. Постройте таблицу истинности для логической формулы:

X & Y v X & Z.

Пояснение: в таблице истинности должны быть вычислены значения формулы для всех вариантов значений логических переменных: X, У, Z. Следовательно, таблица будет содержать 23 = 8 строк и 4 столбца: значения X, У, Z и результат. В таблицу можно добавить дополнительные столбцы, содержащие результаты промежуточных операций.

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

Пояснения: odd (x) — логическая функция определения четности аргумента, равна true, если х — нечетное, и равна false, если х — четное; trunc (х) — целочисленная функция от вещественного аргумента, возвращающая ближайшее целое число, не превышающее х по модулю.

Программирование ветвлений

Полное ветвление:

If < логическое выражение >

Then < оператор 1 >

Else < оператор 2 >

Неполное ветвление:

If < логическое выражение >

Then < оператор >

То, что в алгоритмах называется условием, в Паскале является логическим выражением, которое вычисляется в первую очередь. Если его значение равно true, то будет выполняться < оператор 1 > (после Then), если — false, то < оператор 2 > (после Else) для полной формы или оператор, сразу следующий после условного, для неполной формы (без Else). На ветвях может быть как простой оператор, так и составной — серия операторов в операторных скобках Begin, End.

Пример 1. По длинам трех сторон треугольника а, b, с требуется вычислить его площадь.

Для решения задачи используется формула Герона

где р = (а + b + с)/2 — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сторон треугольника — длина каждой стороны должна быть меньше суммы длин двух других сторон, и длины сторон не могут быть отрицательными величинами.

Имея возможность в одном условном операторе записывать достаточно сложные логические выражения, используя логические операции, мы можем сразу «отфильтровать» все варианты неверных исходных данных.

Пример 2. Требуется перевести пятибалльную оценку в ее на-именование: 5 — «отлично», 4 — «хорошо», 3 — «удовлетворительно», 2 — «неудовлетворительно».

Блок-схема алгоритма приведена на рис. 3.14.

Этот алгоритм имеет структуру вложенных ветвлений и может быть запрограммирован с использованием условного оператора If следующим образом:

Пример 3. Решение рассмотренной в предыдущем примере задачи можно запрограммировать с помощью одного оператора выбора, имеющегося в языке Паскаль. Вот как будет выглядеть такая программа:

Оператор выбора имеет следующий формат:

Case < селектор > of

< список констант 1 > :    < оператор 1 > ;

···

< список констант N > :   < оператор N > ;

Else <оператор>

End

Здесь < селектор > — это выражение любого порядкового типа; < константа > — постоянная величина того же типа, что и селектор; < оператор > — любой простой или составной оператор.

Выполнение оператора выбора происходит так: вычисляется выражение-селектор; затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора; далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после слова Else.

Пример 4. В этом примере демонстрируется использование списка констант в операторе выбора. Программа сообщает, сдал студент экзамен или не сдал. Если оценка одна из следующих: 3, 4, 5, то экзамен сдан; если 2, то не сдан.

Case N of

3,       4,       5:       WriteLn('Экзамен сдан');

                             2:       WriteLn('Экзамен не сдан');

Else WriteLn('Нет такой оценки')

End

Так же как условный оператор, оператор выбора может ис-пользоваться в неполной форме, т. е. без ветви Else.

Если применить условный оператор, то эта программа запишется так:

If (N=3) or (N=4) or (N=5)

Then WriteLn('Экзамен сдан')

Else If N=2

Then WriteLn('Экзамен не сдан')

Else WriteLn('Нет такой оценки');

В условии ветвления использовано сложное логическое выражение, содержащее операции логического сложения or (или).

Вопросы и задания

1. Какие операторы используются для программирования ветвящихся алгоритмов?

2. В каких случаях удобно использование оператора выбора?

3. Составьте на Паскале программу упорядочения по возрастанию значений в трех переменных: X, Y, Z.

4. Используя оператор выбора, составьте программу, которая по введенному номеру месяца будет выводить название соответствующего времени года (зима, весна, лето, осень).


Дата добавления: 2020-11-23; просмотров: 344; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!