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

If проверяемое_условие then

оператор1

else

оператор2;

Если проверяемое условие является истинным или ненулевым, программа выполняет оператор1 и пропускает оператор2. В противном случае, когда значение проверяемого условия является ложным или нулевым, программа пропускает оператор1 и выполняет оператор2. Таким образом, фрагмент программы

if answer = 1492 then

WriteLn('That's right')

else

WriteLn('You better review Chapter 1 again.');

выводит первое сообщение, если значение answer равно 1492, и второе сообщение — в противном случае. Каждый оператор может быть одиночным оператором или блоком операторов, ограниченным ключевыми словами begin .. end. Синтаксически вся конструкция if else обрабатывается как единый оператор.

Предположим, что наша программа должна изменять вводимый текст следующим образом: вместо каждой буквы в строке ввода в строку вывода подставляется другая, код которой на 1 больше, в то время как символы пробела передаются в неизменном виде. Таким образом длина каждой строки вывода будет равна длине соответствующей строки ввода, однако это будет уже совсем другая строка. Эта программа должна выполнять одну последовательность действий по отношению к символам новой строки и другую — по отношению ко всем остальным символам. Как видно из листинга 5.2, оператор if else упрощает данную задачу.

Листинг 5.2

// использование оператора if else

program Project2;

{$APPTYPE CONSOLE}

var

s: string;

i: Integer;

begin

Writeln('Type, and I shall repeat.');

Readln(s);

for i := 1 to Length(s) do

if s[i] = ' ' then

Write(s[i]) //выполняется, если s[i] - символ пробела

else

begin

Inc(s[i]); //блок операторов выполняется в противном случае

Write(s[i]);

end;

Readln;

end.

Результат:

Type, and I shall repeat.

A am a man.

B bn b nbo/

Форматирование операторов if else

Следует иметь в виду, что обе ветви оператора if else должны быть одиночными операторами, в случае же нескольких операторов следует использовать ключевые слова begin .. end, чтобы объединить их в блок. В отличие от некоторых языков программирования, таких как BASIC или FORTRAN, Delphi не считает автоматически блоком все, что расположено между словами if и else, поэтому для заключения операторов в блок ключевые слова begin .. end обязательны. Например, следующий фрагмент программы вызывает ошибку компилятора. Компилятор распознает простой оператор if, который заканчивается оператором Inc(zorro);. Затем следует оператор WriteLn. До этого момента все хорошо, однако дальше идет ключевое слово else, которое компилятор воспринимает как ни к чему не относящееся и помечает как синтаксическую ошибку.

if ch = 'z' then

Inc(zorro); // оператор if заканчивается здесь

Writeln('Another Zorro candidate');

else // ошибка

Inc(dull);

Writeln('Not a Zorro candidate');

Добавьте ключевые слова begin .. end, чтобы придать программному фрагменту нужный вид:

if ch = 'z' then

begin

Inc(zorro); // оператор if заканчивается здесь

Writeln('Another Zorro candidate');

end

else // ошибка

begin

Inc(dull);

Writeln('Not a Zorro candidate');

end;

Поскольку язык Delphi допускает свободную форму синтаксиса, ключевые слова begin .. end можно размещать как угодно, лишь бы они заключали в себе операторы. В предшествующем примере приведен один из популярных форматов записи. А вот еще один:

if ch = 'z' then begin

Inc(zorro);

Writeln('Another Zorro candidate');

end

else begin

Inc(dull);

Writeln('Not a Zorro candidate');

end;

Первая форма записи делает более очевидной блочную структуру операторов, в то время как вторая теснее увязывает блоки с ключевыми словами if и else. Обе формы одинаково пригодны, если только вы не столкнетесь с руководителем, который строго придерживается определенного стиля.

Конструкция if else if else

В компьютерных программах, как и в реальной жизни, возможен выбор более чем из двух возможных вариантов. Реализовать такую возможность можно путем расширения оператора if else. Как было показано ранее, за ключевым словом else должен следовать единый оператор, который может быть блоком. Поскольку if else сам является единым оператором, он может следовать за ключевым словом else:

if ch = 'A' then

Inc(a_grade)

else if ch = 'B' then

Inc(b_grade)

else

Inc(s1);

Если ch не равно 'А', программа переходит к ветви else. Здесь при помощи второго оператора if else данная альтернатива разветвляется еще на две возможности.

В листинге 5.3. только что описанное форматирование используется для создания небольшой шуточной программы.

Листинг 5.3

//использование конструкции if else if else

program Project2;

{$APPTYPE CONSOLE}

const

Fave = 27;

var

n: Integer;

begin

Write('Enter a number in the range 1-100 to find ');

Write('my favorite number: ');

repeat

Readln(n);

if n < Fave then

Write('Too low - guess again: ')

else if n > Fave then

Write('Too high - guess again: ')

else

Writeln(Fave, ' is right!');

until n = Fave;

Readln;

end.

Результат:

Enter a number in the range 1-100 to find my favorite number: 50

Too high - guess again: 25

Too low - guess again: 37

Too high - guess again: 31

Too high - guess again: 28

Too high - guess again: 27

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]