Алгоритмы с разветвляющейся структурой (продолжение).
End
Else
ifa<1934 thenwriteln(‘Вы получаете утешительный приз’)
else
writeln(‘Сегодня приз получит другой’);
Здесь мы описали более сложное выражение, чем в предыдущих примерах, так как у нас условие имеет не 2 варианта, а уже 4:
год рождения пользователя меньше 1980 года и больше или равен 1934 году (не получает приз)
больше 1980 года и месяц рождения относится ко второй половине года (получает приз)
больше 1980 года и месяц рождения относится к первой половине года (не получает приз)
год рождения меньше 1980 и меньше 1934 года (получает утешительный приз)
В качестве примера можно рассмотреть программу, которая запрашивает у пользователя 2 числа и возводит в квадрат те из чисел, которые являются положительными:
program Example1;
{$APPTYPE CONSOLE}
{Программа возводит введённые пользователем числа в степень в том случае, если они оказываются неотрицательными}
uses
SysUtils;
Var a,b: real;
begin
Writeln('Vvedite pervoe chislo');
Readln(a);
If a>=0 then a:=a*a;
writeln(a);
Writeln('Vvedite vtoroe chislo');
Readln(b);
If b>=0 then b:=b*b;
writeln(b);
Readln;
end.
Логический тип данных.
В языке TurboPascalесть специальный тип данных, который может принимать всего 2 значения – истину или ложь (trueили false). Переменные такого типа описываются следующим образом:
Var
a: boolean;
b: Boolean;
Переменным этого типа можно присваивать логические выражения, например,
a:=(x=10);
Если в программе xокажется равным 10, то значение переменной aстанет истиной (true), а иначе окажется ложью (false).
Значения переменных логического типа можно выводить на экран монитора, их можно сравнивать между собой, например, ifa>b. При этом значение trueсчитается больше значения false.
Поскольку логический тип данных Boolean относится к порядковым типам данных, то к логическому типу данных применимы знакомые нам функции:
Ord(a); //ord(false)=0, ord(true)=1;
Pred(a); //pred(true)=false;
Succ(a); //succ(false)=true;
Odd(x); //odd(3)=true, odd(2)=false;
Как пример применения логического типа данных можно рассмотреть следующий фрагменты программы:
Var
t: boolean;
a,b: integer;
Begin
t:=a>b
If a<>b then if t then writeln(‘Наибольшее= ',a)
else writeln(‘Наибольшее=’,b)
В этом фрагменте программы сначала высчитывается значение логической переменной типа boolean – t:=a>b. При этом, если a>b, то значение t будет равным trueи оператор ift выполнится, если a=b или a<b, то значение переменной t станет равным false.
Если значения a и b не равны, то программа выведет наибольшее из этих двух значений.
Логические выражения и логические операции.
Чаще всего логический тип данных используется пи расчёте значения логического выражения. В таком выражении принимают участие логические операнды – логические высказывания. Логическое высказывание – это повествовательное предложение, в котором что-то утверждается. В отношении такого утверждения всегда можно однозначно сказать, истинно оно или ложно. Например, утверждение «Москва – столица России» истинно, а утверждение «Все солдаты РФ храбрые» однозначно ложное.
С такими высказываниями применяют операции:
Операция «ИЛИ». Эта операция Логическое высказывание 1 ИЛИ Логическое высказывание 2 даст значение Истина в том случае, если хотя бы одно из логических высказываний будет истинным.
Возможные значения этой операции можно увидеть в таблице:
a | b | a and b |
false | false | false |
false | true | False |
true | false | false |
true | true | true |
Как видите, логическую операцию «ИЛИ» в программе Turbo Pascal представляют как or.
Пример использования операции «ИЛИ»:
Нужно определить, равен ли х пяти: х=5,
либо больше ли х числа 96? Если это так и хотя бы в одном случае значение х удовлетворяет нашим условиям, то произвести над х какие-то операции.
В программе это выражение запишется так:
If (x=5) or (x>96) then набор операций
Заметьте, что оба логических условия обязательно необходимо заключать в скобки, иначе оператор orбудет работать непосредственно с наиболее близкими к нему значениями и будет выполняться 5 orx, что не будет иметь смысла.
Операция «И». Эта операция Логическое высказывание 1 И Логическое высказывание 2 даст значение Истина в том случае, если оба из логических высказываний будут истинны.
Возможные значения этой операции можно увидеть в таблице:
a | b | a and b |
false | false | false |
false | true | true |
true | false | true |
true | true | true |
Логическую операцию «И» в программе Turbo Pascal представляют как and.
Пример использования операции and:
Нужно определить, принадлежит ли x диапазону [-27;-15] или [896;12507].
В программе это будет указано так:
If ((x>=-27) and (x<=15)) or ((x>=896) and (x<=12507)) then набор операций
Здесь указывается 2 диапазона и между ними ставится оператор or. Получается, что всё выражение вычисляет, принадлежит ли х одному из диапазонов. А сами диапазоны задаются с помощью логического оператора and:
(x>=-27) and (x<=15)
и
(x>=896) and (x<=12507)
Операция «НЕ». Эта операция применяется к одному операнду и меняет его значение на противоположное:
НЕ(Логическое высказывание) даст значение Истина в том случае, если само логическое высказывание будет иметь ложное значение, и даст Ложь, если высказывание будет истинным.
Возможные значения этой операции можно увидеть в таблице:
a Not(a)
false true
true false
Логическую операцию «НЕ» в программе Turbo Pascal представляют как not.
Чаще всего операцию not применяют как вспомогательную. Например, нам нужно, чтобы xне принадлежал указанному диапазону из предыдущего примера.
Тогда условие запишется так:
t:=((x>=-27) and (x<=15)) or((x>=896) and (x<=12507)) //t—логическая переменная, которая примет определённое значение (false или true) в зависимости от значения х.
If not(t) then набор операций
Операция «ИЛИ-НЕ». Эта операция Логическое высказывание 1 ИЛИ-НЕ Логическое высказывание 2 даст значение Истина в том случае, если логические высказывания будут разными по значениям и даст Ложь, если будут равны друг другу.
Возможные значения этой операции можно увидеть в таблице:
a | b | a and b |
false | false | false |
false | true | False |
true | false | false |
true | true | false |
Логическую операцию «ИЛИ-НЕ» в программе Turbo Pascal представляют как XOR.
Как видим, операция XOR отличается от операции AND только в 4-й строчке таблицы, когда оба логических значения равняются true.
Пример использования операции XOR:
Мама попросила дочь в магазине купить ряженку фирмы «Вологодские кружева» или любые сырочки, но и ряженку и сырочки вместе покупать не нужно. Программа показывает, будет ли мама довольна покупкой своей дочери:
Var
t1: boolean; //покупка ряженки (если купила, t1=true)
t2: boolean; //фирма ряженки (если фирма ряженки «Вологодские кружева», t2=true)
t3:boolean; //покупка сырочков (если купила, t3=true)
…
If ((t1 and t2) XOR (t3)) then writeln(‘Мама довольна’)
elsewriteln(‘Мама не довольна’)
Теперь давайте потренируемся выполнять логические условия по заданиям.
Записать выражения на языке TurboPascal, которые возвращают значение истина в результате своего выполнения:
0<x<1: (x>0) and (x<1)
x=max(x,y,z): (x>y) and (x>z)
x <>(не равно) max(x,y,z): (x<=y) or (x<=z)
xне принадлежит диапазону [0;1]: (x<0) or (x>1)
Каждое из чисел x,y,z положительное: (x>0) and (y>0) and (z>0)
Хотя бы одно из чисел x,y,z положительное: (x>0) or (y>0) or (z>0)
Ни одно число не является положительным: (x<=0) and (y<=0) and (z<=0)
Только одно из чисел положительное: (x>0) XOR (y>0) XOR (z>0)
Из чисел x,y,z только 2 числа равны между собой: (x=y) XOR (y=z) XOR (x=z)
Число p делится нацело на число q: (pmodq=0) and (q<>0)
Самостоятельное задание.
Задача 1.
В программе вводятся 3 числа – x, y и z.
Записать программу, вычисляющую выражение
min(x,y,z)*x3/(z+y)
в зависимости от условия задачи. Если условие задачи выполняется, программа выводит результат вычислений, если условие не выполняется, то программа выводит на экран сообщение «Условие не выполняется».