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

Нельзя заранее правильно определить, какую сторону бутерброда мазать маслом.

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

Имея условие или переменную логического типа, можно заставить программу выполнять разные последовательности операторов в зависимости от результата вычисления условия. Например, напишем программу, которая запрашивает с клавиатуры два числа и сообщает, какое из них больше – первое или второе.

Ветвление в программе организуется двумя операторами: IF (как говорится в программистском фольклоре, узник замка Иф был программистом ) и CASE. Сначала рассмотрим главный оператор ветвления – IF. Его общий вид таков:

Полная форма

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

IF условие THEN

оператор1

ELSE

оператор2;

IF условие THEN

оператор1;

Если (а IF по-английски и означает "если") условие истинно, то выполняется оператор1. Если же оно ложно, то либо выполняется оператор2, либо, при сокращенной форме – оператор, следующий за IF.

Наша программа будет выглядеть так (для краткости опустим оператор TRY..EXCEPT):

VAR a,b:REAL;

BEGIN

ClrScr;

a:=FloatToStr(LabeledEdit1.Text);

b:=FloatToStr(LabeledEdit1.Text);

IF a>b THEN

Label1.Caption:='Первое число больше второго'

ELSE Label1.Caption:='Второе число больше первого'

END;

Обратите внимание на запись с отступами: операторы, стоящие внутри IF, смещаются вправо. Delphi этого не требует, ему все равно, а вот человеку разбираться в записи с отступами гораздо легче. Еще один важный момент – точка с запятой ставится только после второго оператора. Ни перед, ни после ELSE точки с запятой быть не может!

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

IF a>b THEN

Label1.Caption:='Первое число больше второго';

Label1.Caption:='Второе число больше первого'

Второй оператор присваивания := никак не связан с IF и будет выполняться всегда. В итоге в любом случае программа будет выводить текст 'Второе число больше первого'. Сокращенную форму используют тогда, когда при невыполнении условия ничего делать не надо.

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

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

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

Формат записи оператора 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 здесь совершенно лишние.