Логические операции и выражения
6.*Даны два числа. Меньшее из них замените полусуммой этих чисел,
а большее - их произведением.
На первый взгляд задача решается просто:
If a>b then begin b:=(a+b)/2; a:=a*b end
else begin a:=(a+b)/2; b:=a*b end;
Но если выполнить эту команду, то ответ получится неверным, почему?
Предположим a=10, B=20. Что же получится в результате выполнения
оператора. Так как a<b, то условие, указанное в операторе не выполнено,
следовательно, выполнится
else begin a:=(a+b)/2; b:=a*b end;
подставим значения и получим:
a:=(a+b)/2=(10+20)/2=15
b:=a*b =15*20=300 вместо 10*20=200 потому, что к этому моменту
первоначальное значение а=10 изменилось и стало равно 15.
Следовательно надо как то сохранить первоначальные значения. Можно
запомнить их в дополнительных переменных:
х:=а;
у:=b;
If a>b then begin b:=(x+y)/2; a:=x*y end
else begin a:=(x+y)/2; b:=x*y end;
а можно запомнить в дополнительных переменных полусумму и произведение:
Program prim_6;
Var a,b,x,y:real;
Begin
Write('введите два числа');
Readln(a,b);
X:=a*b; {запомним
значение произведения}
Y:=(x+y)/2; {запомним значение полусуммы}
If a>b then begin b:=y; a:=x end
else begin a:=y; b:=x end;
Writeln (' a= ',a:0:2,' b=',b:0:2);
Readln
End
Логические операции и выражения.
Если условие выполняется, то говорят, что соответствующее выражение
истинно, если не выполняется - выражение ложно. Для построения сложных условий
в Паскале имеются четыре логических операции:
NOT - отрицание (НЕТ),
AND - логическое умножение (И),
OR - логическое сложение (ИЛИ),
XOR - исключающее "или".
Результаты логических операций для различных значений операндов
приведены в таблице, где использованы обозначения: Т- true (истина), F - false
(ложь).
A |
B |
Not A |
A and B |
A or B |
A xor B |
T |
T |
F |
T |
T |
F |
T |
F |
F |
F |
T |
T |
F |
F |
T |
F |
F |
F |
F |
T |
T |
F |
T |
T |
где А и В результат операции отношения.
Приоритеты логических операций: 1) not; 2) and; 3) or; 4) xor.
Примеры логических выражений:
a) (0<x) AND (x<=1)
b) (a=0) OR (abs(x)<5)
c) NOT (x=y)
Операции отношений имеют более низкий приоритет, чем логические
операции, поэтому их следует заключать в скобки при использовании с логическими
операциями.
Из переменных, констант, сравнений, логических операций и скобок можно
строить логические выражения.
Рассмотрим следующую задачу:
Имеется прямоугольное отверстие со сторонами а и b и кирпич с ребрами х,
у, z. Требуется определить пройдет ли кирпич в отверстие.
Решение.
Кирпич имеет три грани, каждую из которых мы можем повернуть на 90
градусов, т.е. для каждой грани надо проверит два случая. Итого шесть. Получаем
условие:
(a>x)and(b>y) or (b>x) and (a>y) or
(a>x) and(z>y) or (z>x) and(a>y) or
(b>x) and(z>y) or (z>x) and(b>y)
Код программы:
Program prim_8;
Var a,b,x,y,z:integer;
F:boolean;
Begin
Write('введите размеры отверстия');
Readln(a,b);
Write('введите размеры кирпича');
Readln(x,y,z);
If (a>x)and(b>y) or (b>x)and(a>y) or
(a>x)and(z>y) or
(z>x)and(a>y) or (b>x)and(z>y)
or (z>x)and(b>y)
then Writeln ('Кирпич пролезет в отверстие')
Else Writeln ('Кирпич не пролезет в отверстие');
Readln
End
Тренировочные задания к уроку.
1. Установить, истинны или ложны следующие условия:
(A=0) and not (B=0) or not (a=0) and (B=0) при
a) А=0, В=0
b) А=0, В=1
2. Ввести три числа. Выбрать и напечатать наибольшее из них.
3. Написать программу, которая требует ввода времени дня и, в зависимости от
введенного значения, желает доброго утра, доброго дня, доброго вечера или
спокойной ночи.
4. Даны три числа. Найдите наибольшее значение их суммы и произведения.
5. Даны три числа а, b, с. удвойте эти числа, если они являются упорядоченными
по возрастанию.
6. Проверьте, есть ли среди трех заданных чисел равные.
7. Дано двузначное число. Определить:
a) какая из его цифр больше, первая или вторая;
b) одинаковы ли его цифры.
8. Известны площади круга и квадрата. Определить:
a) Уместится ли круг в квадрате;
b) Уместится ли квадрат в круге.
9. Дано трехзначное число. Выяснить, является ли оно палиндромом
("перевертышем"), т.е. таким числом, десятичная запись которого
читается одинаково слева направо и справа налево.
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.