Алгоритмы с разветвляющейся структурой (продолжение).

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)

 

в зависимости от условия задачи. Если условие задачи выполняется, программа выводит результат вычислений, если условие не выполняется, то программа выводит на экран сообщение «Условие не выполняется».