Управляющие конструкции if и case. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Управляющие конструкции if и case.



Операторы

С помощью оператора присваивания можно написать простые программы, пре-

имущественно ориентированные на математические вычисления, но для создания

приложений, реализующих сложную алгоритмическую логику, нужны средства

68 Урок 1. Язык Delphi (Object Pascal) и его использование

управления ходом работы программы: изменения порядка выполнения операто-

ров в зависимости от различных условий и эффективной реализации часто повто-

ряющихся вычислений.

Условный оператор

Условия

Один из важнейших операторов Паскаля — условный оператор. Он позволяет изме-

нить порядок выполнения операторов в зависимости от некоторого условия, пред-

ставляющего собой логическое выражение типа Boolean. Если это значение равно

True, то выполняется одна группа операторов, если оно равно False, то выполняется

другая группа операторов или не выполняется ничего.

Условия представляют собой логические выражения. В них происходит сравне-

ние значений выражений, вызов функций, возвращающих значение типа Boolean,

и комбинирование этих значений с помощью логических операций. Ниже приве-

дены основные операции сравнения данных.

Таблица 1.11. Основные операции сравнения данных

Знак операции Название операции

Равно

о Не равно

> Больше

< Меньше

>- Больше или равно

<- Меньше или равно

Если используются логические операции or, and и так далее, то связываемые ими

проверки заключаются в круглые скобки.

X > 5

(I >= 1) and (I <= 10)

(а+5 о Ы or BoolFunc

Alf = 3

Для некоторых типов данных в Паскале имеются дополнительные операции, позво-

ляющие сформировать более сложные условия. В частности, для множеств опре-

делена операция in (зарезервированное слово), которая проверяет, входит ли кон-

кретное значение в множество:

X:= [2,4,6,8,10];

Выражение 2 in X имеет значение True.

Выражение 5 in X имеет значение False.

Такой способ очень удобен тем, что позволяет выполнить проверки более наглядно

и компактно.

Операторы 69

Например, вместо того, чтобы писать

(I >= 1) and (I <= 10)

можно использовать операцию in:

I in [1..10]

Выполняются подобные проверки тоже значительно эффективнее.

Оператор if... then...

Условный оператор записывается в такой форме:

if условие then действие;

Слова!f (если) и then (то) — зарезервированные.

Действие выполняется только в том случае, если значение условия равно True. В про-

тивном случае ничего не происходит. Действие —это любой оператор Паскаля, или группа

операторов, взятых в логические скобки begin/end, или вызов подпрограммы.

Например:

if X > 0 then X:= 0;

if (Ы = 2) or (N = 3) then CallProc;

if Sim in ['а'.-'я'] then

begin

WriteLn(Sim);

Sim:= Chr(100)

end;

Оператор if...then... else...

Нередко требуется выполнить определенные действия и в том случае, когда про-

веряемое условие ложно. Для этого можно использовать другую форму условного

оператора:

if условие

then действие-1

else действие-2;

Действие-1 будет выполнено, если условие истинно (равно true), действие-2 выпол-

няется, если условие ложно.

if X > 0 then X:= -1 else X:= +1;

ЗАМЕЧАНИЕ Перед ключевым словом else (иначе) точка с запятой не ставится.

Напишем небольшую программу, которая принимает ввод числа с клавиатуры и

сообщает, четное оно или нет. Проверку на четность можно выполнить двумя спо-

собами: использовать стандартную функцию Odd(}, которая возвращает значение

True, если ее аргумент нечетный, или проверить, равен ли нулю остаток отделения

числа на 2 (операция mod).

70 Урок 1. Язык Delphi (Object Pascal] и его использование

program Projectl;

{$APPTYPE CONSOLE}

uses sysutils,-

var N: Integer;

Begin

ReadLn (N),-

if Gdd(N) then WriteLn('Число нечетно'}

else WriteLn('Число четно']

end.

Вложенные условия

Условные операторы могут быть неограниченно вложены друг в друга. Рассмот-

рим следующий пример. Надо ввести с клавиатуры два числа, и если их сумма

меньше чем 100, то напечатать большее число, а в противном случае — напечатать

меньшее число.

program Projectl;

(SAPPTYPE CONSOLE)

uses sysutils;

var X, Y: Integer;

begin

ReadLn(X, Y);

/ / если сумма меньше ста, то

if X+Y < 100 then

// определить большее число

if X > Y then Writeln(X)

else WriteLn(Y)

// иначе определить меньшее число

else if X < Y then Writeln(Xi

else WriteLn(Y)

end;

При решении данной задачи использованы вложенные условные операторы,

В некоторых случаях бывает сложно разобраться, в каком порядке такие вложен-

ные операторы будут выполняться. Например:

if a > b then

if a > е then с:= 1

else с:= 2;

Здесь непонятно, в каком случае выполняется оператор с:= 2: когда ложно условие

а > b или когда оно истинно, но ложно условие а > е.

В Паскале действует простой принцип: часть условного оператора else относится к

ближайшему if. В данном случае, часть else с:= 2 относится к ближайшему оператору

if а > е then, а не к оператору If a > b then, тем самым правильно второе толкование.

Операторы 71

Надо стараться записывать подобные вложенные операторы максимально наглядно,

используя отступы из пробелов, избегая запутанных конструкций и не допуская

слишком большого уровня вложенности.

Если в приведенном примере требуется, чтобы оператор с:= 2 выполнялся, когда

ложно условие а > Ь, то промежуточный условный оператор надо вынести в логиче-

ский блок, чтобы он не влиял на порядок выполнения условных частей then и else:

if а > Ь then

begin

if a > е then с:= 1

end

else с:= 2;

Оператор выбора

Когда требуется осуществить проверку множества условий, например выполнить

один из пяти операторов в зависимости от того, чему равно значение переменной

X, приходится записывать цепочки условных операторов наподобие следующей:

if X = 1 then а: = 1 else

if X - 2 then a:- 2 else

if (X = 3) or (X = 4) then a:= 3 else

if X = 5 then a:= 4 else

if (X = 6) or (X in [8..100]) then a:= 5

else a:= 0;

Подобная запись довольно громоздка и преобразовывается компилятором в не

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

выбора case, позволяющий наглядно описать выбор выполняемого оператора или

группы операторов в зависимости от ряда условий.

case выражение of

список-условий-!: действие-l;

список-условий-n: действие-п;

else действие-п+1;

end;

Тип выражения может быть одним из стандартных типов: целым числом, псречис-

лимым типом, символьным типом и так далее. Список условий может содержать

произвольные выражения, состоящие из констант и имеющие подходящий тип.

В этом списке допускается использовать как обычные константы, так и символы и

диапазоны значений. Результат выражения будет поочередно сравниваться с каж-

дым из значений в списках, и при первом совпадении будет выполнено соответ-

ствующее действие (оператор или группа операторов, взятых в логические скобки

begin/end), а все оставшиеся действия будут пропущены. В случае, когда ни одного

совпадения результата выражения с заданными значениями не произошло, выгтол-

72 Урок 1. Язык Delphi (Object Pascol) и его использование

няется действие, указанное за словом else (если оно имеется), или не выполняется

ничего, если слово else внутри оператора выбора отсутствует.

Переписанный с помощью данного оператора вышеприведенный пример будет

выглядеть так(через запятую,отдельные значения и в виде массива)

case X of

1: а:= 1,-

2: а:= 2;

3, 4: а:= 3;

5 г а:= 4;

6, 8..100: а:= 5;

else a:= О

end;

Условное описание

Использовать оператор case в Паскале разрешается также в разделе описания пере-

менных, когда создается новый тип на основе записи (record). Внутри записи допус-

тимо указывать несколько форм ее представления, и описываются все эти формы

≪в стиле≫ оператора case (это только правило описания, способ нужного представ-

ления, понятный компилятору и разработчику, а не реальный машинный код).

Например, программисту требуется использовать два типа данных: одну запись с

полями:

Name: string[50];

Num: integer;

а другую — с полями:

TeamName: TFootballName;

Win: Boolean;

Gol: Byte;

При этом программист точно знает, что он не будет применять эти группы полей

одновременно друг с другом. Тогда вместо описания двух новых типов програм-

мист может описать один, только разделив внутреннюю структуру записи на две:

type МуТуре =

Record

case MyVar: Boolean of

True: (Name: string[50];

Num: integer);

False: fTeamName: TFootballName;

Win: Boolean;

Gol: Byte);

end;

Подобная оригинальная запись расшифровывается следующим образом. Слово case

говорит, _____что далее следует несколько форм представления типа (записи) МуТуре.

Сколько? Это определяется следующим за ключевым словом case описанием MyVar:

Операторы /3

Boolean. Имя переменной MyVar реально больше нигде в программе не используется,

это просто требование Паскаля. А тип этой переменной определяет возможный

диапазон форм представления записи. Тип Boolean имеет два значения True и False,

значит форм представления будет две. Можно было указать, например, тип Byte и

сформировать не два, а пять или двадцать пять описаний внутри записи.

Далее следует последовательность значений указанного типа, и для каждого из

них в круглых скобках приводится очередной вариант внутренней структуры.

'J ВНИМАНИЕ Закрывает описание case не собственное ключевое слово end,

а слово end, завершающее описание всей записи.

Обращаться к полям записи в тексте программы можно как обычно:

var R: МуТуре;

R.Name:= 'test';

R.Win: = true;

Конечно, одновременно обращаться к полям из разных описаний не следует: ведь

создаются подобные раздельные описания как раз исходя из того, что совместно

использоваться они не будут.

Есть еще одна область применения подобных условных описаний. В памяти для

них отведена одна общая область, поэтому одно и то же представление можно трак-

товать по-разному, в зависимости от размера (длины в байтах) значения конкрет-

ного типа. Например, поскольку тип Integer соответствует данным длиной в 4 байта,

доступ к его отдельным байтам можно организовать так:

type IntDetail =

Record

case V: Byte of

1: (I: Integer);

2: (Bl, B2, ВЗ, В4: Byte)

end;

var ID: IntDetail;

Begin

ID.I:= 55555;

WriteLn (ID. Bl, ' ', ID. B2, ' ', ID. B3, ' ', ID. B4),-

ID.B1:= $FF;

'J ПОДСКАЗКА Возможность розного представления структуры записи сохраня-

ется в.Паскале с времен его первых версий, когда остро стояли

проблемы-эконом и и памяти и приходилось прибегать к всевозмож-

ным ухищрениям. Сегодня такие возможности Паскаля неактуальны

и только усложняют понимаемость исходных текстов, поэтому жела-

тельно обходиться без них.__

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 257; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.6.194 (0.037 с.)