Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Операторы ветвления и логические операции




При разработке программ с развитой логикой очень важно наделить их способностью принимать решения.

Оператор if

Когда в программе необходимо принять решение о том, выполнять или нет определенное действие, можно использовать оператор if. Этот оператор имеет две формы: if и if else. Вначале рассмотрим более простую форму — if. Она подобна обычной языковой конструкции типа "Если у вас есть карточка капитана Кука, вы получите бесплатное печенье". Оператор if указывает программе выполнить оператор или группу операторов, если проверочное условие истинно, и пропустить этот оператор или группу операторов, если условие ложно. Таким образом, оператор if позволяет программе принять решение, следует ли выполнять определенный оператор. Синтаксис этой формы оператора if аналогичен синтаксису оператора while:

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

оператор;

Если проверяемое условие вычисляется как истинное, программа выполняет оператор. Это может быть одиночный оператор или блок. Ложное значение проверяемого условия приводит к тому, что программа пропускает оператор. Вся конструкция if считается единым оператором.

Чаше всего проверяемое условие — это выражение сравнения, подобное тем, которые используются для управления циклами. Предположим, что необходимо написать программу, подсчитывающую количество пробелов и общее количество символов вводимых данных.

Листинг 5.1

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

program Project2;

 

{$APPTYPE CONSOLE}

 

Var

s: String;

spaces: Integer = 0;

total: Integer = 0;

i: Integer;

 

Begin

Readln(s);

for i:= 1 to Length(s) do

Begin

if s[i] = ' ' then

Inc(spaces);

Inc(total);

end;

 

WriteLn(spaces, ' spaces, ', total, ' charaters total in sentence');

Readln;

end.

Результат:

This is a map

Spaces, 13 charaters total in sentence

Как понятно из комментариев, оператор Inc(spaces) выполняется только в том случае, если s[i] — пробел. А оператор Inc(total) выполняется при каждой итерации цикла, поскольку он находится вне оператора if.

Оператор if else

Оператор if позволяет программе определиться с тем, должен или нет выполняться определенный оператор или блок, a if else — решить, какой из двух операторов или блоков должен выполняться. Этот оператор незаменим для создания взаимоисключающих последовательностей действий. Оператор if else моделирует языковую конструкцию типа "Если у вас есть карточка капитана Кука, вы получите особо вкусное печенье, в противном случае вы получите обычное печенье". Общая форма этого оператора выглядит следующим образом:

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

27 is right!

Логические выражения

Часто приходится проверять более одного условия. Например, для того, чтобы символ являлся строчной буквой, его значение должно быть больше или равно 'а' и меньше или равно 'z'. Еще один распространенный случай: если вы просите пользователя ответить вводом символа у или n, желательно, чтобы наряду со строчными программа принимала и прописные буквы (Y и N). Для этих целей в языке предусмотрены три логические операции, обеспечивающие объединение или изменение существующих выражений, —логическое ИЛИ (записывается как or); логическое И (записывается как and); и логическое НЕ (записывается как not). Рассмотрим эти операции подробнее.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...