Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УПП Программирование 2102,2202.doc
Скачиваний:
17
Добавлен:
20.04.2015
Размер:
760.32 Кб
Скачать

Var X,y: real;

begin

readln(x);

if x<0 then y:=5+x;

if (0<=x)and(x<10) then y:=5;

if x>=10 then y:=10–0.5*x;

writeln('y=',y:6:2)

end.

PROGRAM P3_1; {второй вариант}

label m;

Var X,y: real;

begin

readln(x);

if x<0 then begin y:=5+x; goto m end;

if x<10 then begin y:=5; goto m end;

if x>=10 then y:=10-0.5*x;

m: writeln(y:6:2)

end.

Пример 3-2. Даны три произвольных числа А, В, С. Составить программу, которая анализирует их и, если сумма первых двух чисел не мень­ше третьего, а квадрат второго больше первого – выдает сообщение ВЕРНО. Если хотя бы одно из условий не выполняется, – то сообщение НЕВЕРНО.

ВЕРНО” если А+В>=C и В2 >A

НЕВЕРНО” – в противном случае

Несмотря на простое условие и очевидную блок-схему (рис. 3-2), програм­ма (program P3_2) получилась достаточно запутанной. При необходимости вы­полнять анализ одновременно нескольких условий очень удобно пользоваться логи­ческими функциями. Аргументами логи­ческих функ­ций являются высказы­вания, которые могут быть либо истин­­ными, либо ложными. К таким высказываниям относятся опера­ции отношения (равно, больше, меньше и т.д.). Так, например, отношение вида Х=Y всегда может быть только истинным или только ложным.

PROGRAM P3_2;

label k; var a,b,c: real;

begin

readln(a,b,c);

if a+b>=c then goto k;

writeln('Неверно'); exit;

k: if b*b>a then begin

writeln('Верно'); exit end;

writeln('Неверно')

end.

4. ЛОГИЧЕСКИЕ ФУНКЦИИ

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

аргумент

функция

НЕ

1-й

аргумент

2-й

аргумент

функция

И

функция

ИЛИ

ложь

истина

ложь

ложь

ложь

ложь

истина

ложь

ложь

истина

ложь

истина

истина

ложь

ложь

истина

истина

истина

истина

истина

Например, следующие два оператора if x<10 then y=5 и if not (x>=10) then y=5 идентичны.

 Функций двух аргументов. Функция И (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 значит, имеется ровно одно число меньшее нуля.

x:=0; {пока нет ни одного числа <0?}

if a<0 then x:=x+1;

if b<0 then x:=x+1;

if c<0 then x:=x+1;

if x=1 then write('верно') else write('неверно');

Контрольные задания.

 Тест 4.1. Какой результат, выдаст программа? 1).1, 2). 2.

var x,y,z: integer;

begin

x:=2; y:=4; z:=3;

if (x>y) or (y>z) and (x<>z) then write write(‘1’) else (‘2’)

end.

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

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

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

Задание 4.4. На рис.3-3 изображены две пересекающиеся линии Y1=X2 иY2=1–X/2. По произвольным значениям координат некоторой точки X и Y найти область ,,,, в которой находится эта точка. Ответ должен быть выдан в форме числа 1,2,3,4.

Сейчас определим только принадлежность точки к области 2. Сначала выясним диапазон изменения Х в области. Оче­видно, он простирается от Х=0 до координаты Х, где пересекаются прямая и парабола (белая точка на рисунке). Чтобы ее найти, надо приравнять выражения для обеих функцийX2=1–X/2 и, пре­обра­зовав его вквадратное уравнение 2X2+X–2=0, вычислитьлевый корень Х=–1,28. Отсюда можно записать –1,28<X<0. Для Y можно сказать, что он лежит под прямой Y<1-X/2 и над параболой Y>X2. Таким образом, должны выполняться условия –1,28<X<0 и Y<1–X/2 и Y>X2. Отсюда можно записать оператор IF:

IF (–1,28<X)and(X<0)and(Y<1–X/2)and(Y>X*X) then

?”Это область 2”

Завершите решение для остальных областей.

 Оператор выбора. При необходимости сделать выбор из многих альтернатив конструкция с вложением if становится очень громоздкой. В этом случае полезным оказывается оператор case.