Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Степан / Информатика / Паскаль (Яньков).doc
Скачиваний:
70
Добавлен:
20.04.2015
Размер:
660.99 Кб
Скачать

4. Логические функции

Функция одного аргумента НЕ (NOT) истинна тогда, когда ложен ее аргумент (значение функции обратно аргументу). Поведение функции полностью описывает таблица. Например, следующие два оператора полностью идентичны

if x<10 then y=5 if not (x>=10) then y=5

аргумент

функция

НЕ

1-й

аргумент

2-й

аргумент

функция

И

функция

ИЛИ

Ложь

Истина

Ложь

Ложь

Ложь

Ложь

Истина

Ложь

Ложь

Истина

Ложь

Истина

Истина

Ложь

Ложь

Истина

Истина

Истина

Истина

Истина

Функций двух аргументов. Функция И (AND) истинна когда истинны все ее аргументы. Функция ИЛИ (OR) истинна, если истинен хотя бы один из аргументов. Если нет скобок, функции вычисляются в следующей последо­вательности: НЕ,И,ИЛИ. Словам Истина и Ложь в Паскале соответствуют значения True и False.

Логические операции имеют приоритет перед операция­ми отношения, поэтому, если таких условий несколько, последние берутся в скобки. В качестве примера снова рассмотрим задачу 3-2. Решение будет очень компактным (вспомогательные операторы опущены):

readln(a,b,c);

if (a+b>=c) and (b*b>a) then writeln('верно') else writeln('неверно');

Пример. Для чисел А,В,С выяснить, правда ли что первое число самое большое, а последнее – самое маленькое.

if (a>b) and (a>c) and (c<a) and (c<b) then writeln('верно') else writeln('неверно');

Еще. Верно ли, что среди чисел есть отрицательные.

if (a<0) or (b<0) or (c<0) then ...

Еще. Верно ли, что среди чисел ровно одно меньше нуля.

if (a<0) and (b>0) and (c>0) or (a>0) and (b<1) and (c>0) or (a>0) and (b>0) and (c<0) then ...

В этом решении перебираются все возможные, интересующие нас, комбинации переменных. Иногда проще (см. справа) воспользоваться косвенным способом, например, увеличивать вспомогательную переменную Х, каждый раз, когда встречается число меньше нуля. Если в конце окажется, что Х=1 значит, имеется ровно одно число меньшее нуля.

Задание. Имеются числа a,b,c. Вывести их в порядке возрастания.

Задание. Выяснить, правда ли, что среди чисел a,b,c,d имеется хотя бы одно отрицательное и одно положительное.

Задание. Выяснить, правда ли, что среди a,b,c,d имеется в точности одно отрицательное и одно нулевое числа.

О

CASE выражение OF

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

константа2: оператор2;

. . .

ELSE операторN;

END;

ператор выбора.При необходимости сделать выбор из многих альтернатив конструк­ция с вложением if становится очень громоздкой. В этом случае полезным может оказаться оператор case. Здесь выражение может быть целого или символьного типа. Если его зна­чение равно одной из констант, выполняется соответствующий оператор. Если ни одна из констант не подходит, выполняется оператор, следующий после слова else (если есть). Любая из констант может быть диапазоном (через две точки) и/или множеством констант (через запятую). Любой оператор может быть блоком и содержать свои операторы case и if.

Задача 4-1. Пусть требуется по числу прожитых лет Т отнести человека к какой-то возрастной группе. Решение оче­вид­но, но нуждается в одном пояснении. Поскольку женщины и мужчины уходят на пенсию в разное время (55 и 60 лет), кроме возраста нужно учитывать и пол Р.

да

начало

нет

Y=X/2

печать Y

ввод Х

конец

да

Рис. 5-1б

Рис.5-1а

Задача 4-2. Положим, введен какой-то знак в переменную S и его нужно отнести к соот­ветствующей группе. Следует сказать, что латинские символы в символьной таблице ПК находятся не вместе. Подряд идут буквы с А по Z, затем идут не буквы, затем буквы с а по z. В виду этого пришлось указать два диапазона констант ('A'..'Z','a'..'z'). Символы русского алфавита состоят из еще большего числа диапазонов (см. раздел ‘Символьные данные’).

Задание. Написать программу, в которой вводятся два числа-операнда Х и Y и знак операции Z (+,–,/,*). Вычислить результат S в зависимости от знака. Предусмотреть реакции на возможный неверный знак операции, а также на ввод Y=0 при делении.