- •1. Приступаем к изучению языка delphi
- •I love Delhi
- •20 Degrees Celsius is 68 degrees Fahrenheit.
- •4.2 Light are 265608 astronomical units
- •2. Представление данных переменными
- •Integer is 4 bytes
- •Integer is 2147483647
- •Integer is -2147483648
- •3. Составные типы данных
- •Volume: Integer;
- •Volume: 1.40
- •Var a: array of integer;
- •4. Циклы и выражения сравнения
- •1952 Hudson Hornet
- •1951 Kaiser
- •5. Операторы ветвления и логические операции
- •If проверяемое_условие then
- •3 Spaces, 13 charaters total in sentence
- •If проверяемое_условие then
- •27 Is right!
- •6 Entries or enter a negative value.
- •4 Numbers in massive greater then your number
- •2 Spaces
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