Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
620251-ПБ / МУ_ЛР_Информатика / ЛР №5 Delphi ветвления.doc
Скачиваний:
68
Добавлен:
16.03.2016
Размер:
120.83 Кб
Скачать
    1. Сложные условия

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

Из законов Мэрфи

Во многих случаях нужно одновременно проверять несколько условий. Например, перед расчетом площади треугольника по длинам сторон все три длины стороны a,b,c обязаны быть положительными числами, т.е. должно выполняться условие "a>0 и b>0 и c>0". Для записи сложных условий в Delphi предусмотрен набор логических операций над условиями (Табл. 2). Обязательное требование – сами условия при этом записываются в скобках!

Поясним действие логических операций. Операция AND ("и") возвращает значение "истина" только в том случае, если оба условия, которые она соединяет, истинны. Если хотя бы одно из условий не выполняется, AND вернет "ложь". Операция OR ("или") не столь строга – она возвращает значение истина, если либо одно, либо другое, либо оба разу соединяемых условия истинны. Родственная операция XOR (исключающее "или") очень похожа на OR с той разницей, что она исключает случай, когда оба условия выполняются (или одно, или другое6 но не оба сразу). Наконец, операция NOT (отрицание) применяется не к двум, а к одному условию и просто "переворачивает" его: (a=b) есть то же самое, что NOT(a<>b).

Табл. 2

Операция

a

b

Результат

Операция

a

b

Результат

(a) AND (b)

TRUE

TRUE

TRUE

NOT(a)

TRUE

-

FALSE

TRUE

FALSE

FALSE

FALSE

-

TRUE

FALSE

TRUE

FALSE

-

-

FALSE

FALSE

FALSE

-

-

(a) OR (b)

TRUE

TRUE

TRUE

(a) XOR (b)

TRUE

TRUE

FALSE

TRUE

FALSE

TRUE

TRUE

FALSE

TRUE

FALSE

TRUE

TRUE

FALSE

TRUE

TRUE

FALSE

FALSE

FALSE

FALSE

FALSE

FALSE

Вот как может выглядеть запись проверки всех трех введенных сторон треугольника на положительность:

IF (a>0) AND (b>0) AND (c>0) THEN

BEGIN

… вычисления

END

ELSE

Label1.Caption:='Стороны должны быть больше нуля';

Тот же пример можно записать и по-другому:

IF (a<=0) OR (b<=0) OR (c<=0) THEN

BEGIN

Label1.Caption:='Стороны должны быть больше нуля';

Exit // выход из процедуры

END;

… вычисления

END; // конец процедуры

    1. Множественное ветвление

После поворота событий от плохого к худшему цикл повторится.

Из законов Мэрфи

Оператор IF разделяет программу на два набора операторов, выполняемых в зависимости от результата вычисления заданного условия. Бывают ситуации, когда этого недостаточно. Например, пусть мы пишем программу-калькулятор. Она запрашивает у пользователя два числа и код выполняемого над ними действия (1 – сложение, 2 – умножение, 3 – вычитание, 4 - деление). Конечно, можно обойтись и кучей операторов IF, например, так:

VAR c:BYTE;

c:=IntToStr(LabeledEdit1.Text);

IF c=1 THEN

r:=a+b;

IF c=2 THEN

r:=a*b

и т.д. Но выглядит такая программа запутанно. Здесь лучше применить оператор множественного ветвления CASE. Для его использования должны соблюдаться два правила: во-первых, во всех проверяемых условиях одна и та же переменная должна сравниваться с константами. Так оно и есть: переменная с сравнивается с единицей, двойкой и т.д. Во-вторых, тип переменной с должен быть ограниченным. Это означает, что можно перечислить все значения этого типа. Скажем, тип BYTE – ограниченный, так как переменная типа BYTE принимает значения только от 0 до 255 и все их можно перечислить. А вот переменная типа REAL принимает бесчисленное множество значений (число дробных чисел в любом интервале бесконечно) и ее нельзя использовать в операторе CASE. Его общий вид таков:

Полная форма

Сокращенная форма

CASE переменная OF

значение1: оператор1;

значение2: оператор2;

значениеN: операторN;

ELSE

операторM;

END;

CASE переменная OF

значение1: оператор1;

значение2: оператор2;

значениеN: операторN;

END;

Обратите внимание, что слово END относится к самому оператору CASE и не требует никакого парного себе BEGIN. Заменим кучу IF'ов одним CASE:

CASE c OF { c – переменная перечислимого типа }

1: r:=a+b; ( если с=1, выполняется оператор r:=a+b )

2: r:=a*b;

3: r:=a-b;

4: IF b<>0 THEN r:=a/b ELSE Label1.Caption:='Деление на ноль'

ELSE

Label1.Caption:='введен неверный код действия'

END;

В CASE перечисляются возможные значения переменной, а после них через двоеточие записывается один-единственный оператор (надо больше – пишем BEGIN..END), выполняющийся, если переменная, имя которой указано между словами CASE и OF, равна указанному перед двоеточием значению. В операторе CASE может быть часть "иначе" (ELSE), оператор в которой выполняется, если значение переменной не совпало ни с одним из заданных.