Что делает оператор IF
? Проверяет состояние. Если условие TRUE
, выполняется условие THEN
. Если условие FALSE
, выполняется условие ELSE
, если оно есть.
Когда вы пишете последовательность IF
- ELSE
- IF
- ELSE
- IF
- ELSE
-... ничего особенного не происходит. Состояние первого IF
проверено. Если это TRUE
, выполняется условие THEN
, если нет, то оно продолжается до предложения ELSE
. Предложение ELSE
может содержать любой оператор . Это может быть FOR
или WHILE
, или присвоение, или вызов функции, или блок BEGIN
- END
, или любой другой оператор. В этом случае предложение ELSE
просто оказывается другим оператором IF
, и, таким образом, проверяется условие IF
и так далее.
В конце концов, вы написали код, который проверяет ряд условий и останавливается на первом условии, TRUE
.
Выберите значение и проследите свой код вручную, чтобы увидеть, как он работает.
Начните с a=100
. Первый запрос IF
- 100<120
. Это TRUE
, поэтому для caption
устанавливается 'optimal'
. Предложение ELSE
никогда не выполняется, пока все хорошо.
Начните с a=200
. Первый запрос IF
- 200<120
. Ответ - нет, поэтому выполнение переходит к предложению ELSE
. Эта ELSE
-предложение состоит из IF
, спрашивающего, если 200>120
. Ответ - да, поэтому он устанавливает caption
в 'normal'
. Это не то, что вы намеревались.
Рассмотрим a=120
. Первый IF
пытается 120<120
. Это FALSE
, так что это продолжается до ELSE
-пункта. Там мы находим IF
вопрос 120>120
. Это также FALSE
, поэтому мы переходим к следующему IF
. Тот, кто спрашивает, 120<130
. Это TRUE
, поэтому caption
установлено на 'normal'
.
Фактически, эти примеры показывают все возможные пути через ваш код. Ни один из IF
за пределами никогда не достигнут.
Вот пример, который должен работать так, как вы хотели.
procedure TForm1.Button1Click(Sender: TObject);
var
a, b : real;
begin
a := strtofloat(edit1.Text);
if a < 120 then label1.caption := 'optimal'
else if a < 130 then label1.caption := 'normal'
else if a < 140 then label1.caption := 'normal high'
else if a < 160 then label1.caption := 'grade 1 hypertension'
else if a < 180 then label1.caption := 'grade 2 hypertension'
else label1.caption := 'grade 3 hypertension'
end;
Будьте внимательны при выборе между <
и <=
. Что должно произойти, когда a
точно равно 120
?
Будьте внимательны, чтобы рассмотреть все возможные значения. Когда вы писали свой оригинальный код, то, что вы намеревались сделать, должно произойти, когда a=180.5
. У вас есть условие для <180
, а другое для >181
. Значения от 180
до 181
игнорируются.