Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5. Delphi ветвления.doc
Скачиваний:
6
Добавлен:
16.11.2019
Размер:
220.16 Кб
Скачать

4.Объединение операторов

Доступность операции - еще не показатель того, что ее надо делать.

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

Формат записи оператора IF позволяет поместить внутрь его лишь один оператор, выполняющийся, когда условие истинно, и один – когда оно ложно. Часто же нужно выполнить не один, а много операторов. Например, при решении квадратного уравнения после проверки неотрицательности дискриминанта нужно вычислить действительные корни уравнения, что требует как минимум двух операторов присваивания. Следующая запись неверна и вызовет ошибку при компиляции:

d:=SQR(b)-4*a*c;

IF d>=0 THEN

x1:=-b+SQRT(d)/(2*a);

x2:=-b-SQRT(d)/(2*a)

ELSE

Label1.Caption:='Корни комплексные';

Как же быть? Очень просто – нужно превратить несколько операторов в один. Для этого их объединяют при помощи уже известных нам операторных скобок BEGIN и END. Запись вида

BEGIN

оператор 1;

оператор 2;

оператор n

END;

рассматривается как один оператор. Не путайте BEGIN и END, являющимися операторными скобками, с BEGIN и END, отмечающими начало и конец всей программы. Таким образом, правильная запись такова:

d:=SQR(b)-4*a*c;

IF d>=0 THEN

BEGIN

x1:=-b+SQRT(d)/(2*a);

x2:=-b-SQRT(d)/(2*a)

END

ELSE

Label1.Caption:='Корни комплексные';

Обратите внимание, что оператор Label1.Caption:='Корни комплексные' в операторные скобки не заключен. Причина очевидна: это один-единственный оператор, его не с чем объединять. Запись вида

IF a>b THEN

BEGIN

c:=a+10

END;

хотя и не вызовет ошибки, но является избыточной и свидетельствует о низкой квалификации программиста. Скобки BEGIN … END здесь совершенно лишние.

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

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

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

Во многих случаях нужно одновременно проверять несколько условий. Например, перед расчетом площади треугольника по длинам сторон все три длины стороны 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; // конец процедуры