Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.2.3. Сложные условия

Сложные условия составляются из простых при помощи логических операций (см. таблицу 2.5):

AND (и),

OR (или),

NOT (не).

XOR (исключающее или)

Примеры сложных условий:

а) (0<А) AND (A<=1),

б) (Х=0) OR (ABS(X) < 5),

в) NOT (X=Y).

Скобки необходимы, поскольку приоритет операций сравнения ниже, чем логических операций.

Сложные условия могут служить частями еще более сложных и т.д.

Истинность любого условия можно вычислить при помощи таблиц значений логических операций (таблица 2.5)

Таблица 2.5

FALSE AND FALSE = FALSE FALSE AND TRUE = FALSE

TRUE AND FALSE = FALSE

TRUE AND TRUE = TRUE

FALSE OR FALSE = FALSE FALSE OR TRUE = TRUE

TRUE OR FALSE = TRUE

TRUE OR TRUE = TRUE

FALSE XOR FALSE = FALSE FALSE XOR TRUE = TRUE

TRUE XOR FALSE = TRUE

TRUE XOR TRUE = FALSE

NOT FALSE = TRUE

NOT TRUE = FALSE

Пример применения условного оператора со сложным условием.

Задача - ввести три действительных числа и определить, находится ли значение третьего между значениями первых двух. Например, если вводится 10, 20, 15 или 25, 5, 17, то находится, а если вводится 10, 20, 25 или 25, 5, 3, то не находится. Это реализуется следующей программой:

program between;

var

xl,x2,x3:real; begin

Write ('Введите три числа ');

read(xl,x2,x3); (* ввод чисел*)

if xl <= х2 then

begin

if (xl< хЗ) and (хЗ<х2) then

writeln('значение числа ',хЗ, 'лежит между значениями чисел', xl,' и ',х2)

else

.

writeln('значение числа ',хЗ, ' НЕ лежит между значениями чисел ', xl,' и ',х2);

end

else (* перед else точка с запятой никогда не ставится *)

begin

if(x2<x3)and(x3<xl) then

Writeln ('значение числа ',хЗ, ' лежит между значениями чисел ', 'х2,' и <,xl)

else

writeln('значение числа ',хЗ, ' НЕ лежит между значениями чисел ', х2’ и ',xl);

end;

end.

Еще пример применения условного оператора.

Пусть дана последовательность вида 1011121314151617181920212223..979899, состоящая из выписанных подряд всех двузначных чисел в порядке возрастания (всего 180 цифр).

Задача - ввести целое число от 1 до 180 и сформировать элемент последовательности с номером, соответствующим этом числу. Это реализуется следующей программой:

program series;

var n, ns, np, m integer;

begin

write('Введите целое число от 1 до 180 ');

read(n); (*номер элемента от 1 до 180*)

ns:=n-l; (*смещенный номер элемента от 0 до 179*)

np:=ns div 2; (*смещенный номер двузначного числа от 0 до 89*)

if (ns mod 2) = 0 (*проверка четности ns*)

then (* необходима первая цифра двузначного числа*)

m:=np div 10 + 1

else (*необходима вторая цифра двузначного числа*)

m:=np mod 10;

Writeln ('элемент последовательности с номером', n , ' равен ', m);

end.

Эту же программу можно записать короче и без использования переменных ns, np,m.

program series_shot;

var n:integer;

begin

Write ('Введите целое число от 1 до 180 ');

read(n); (*номер элемента от 1 до 180*)

if ((n-1) mod 2) = 0 (*проверка четности смещенного

номера элемента *)

then (* необходима первая цифра двузначного числа*) Writeln('элемент последовательности с номером',

п, ' равен ', ((n-1) div 2 ) div 10 + 1)

else (*необходима вторая цифра двузначного числа*)

Writeln ('элемент последовательности с номером',п,' равен ', ( (n-1) div 2 ) mod 10);

end.

Однако в таком виде программа труднее для восприятия и понимания логики ее работы. Этот простой пример показывает, что за счет введения дополнительных переменных и удлинения программы можно сделать ее более ясной для понимания.