Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР Методы программирования Build1.0.pdf
Скачиваний:
98
Добавлен:
10.06.2015
Размер:
1.89 Mб
Скачать

11

Составной оператор begin..end

Зарезервированные слова begin и end означают соответственно начало и конец тела блока. Выражения, заключенные во внутрь составного оператора могут рассматриваться Delphi как единый оператор.

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

Задачей оператора if..then (если … тогда) является выполнение действия по условию, причем условие должно быть булевского типа: Да/Нет. Синтаксис условного оператора следующий:

if <булево условие> then <оператор>;

if X>5 then Y := Y+1;

Если выполняется условие X > 5 тогда переменной Y будет присвоено значение Y+1.

Условный оператор if … then допускает включение в свою конструкцию слова else (иначе):

if <булево условие> then <оператор1> else <оператор2>;

If X>5 then Y := Y+1 else Y := Y-1;

Оператор-селектор case..of

Конструкция оператора-селектора case..of следующая:

case <селектор> of

<константа1> : <оператор1>; <константа2> : <оператор2>; <константа3> : <оператор3>;

else <оператор>; end;

В роли селектора могут выступать: переменная, выражение или функция, но обязательно порядкового типа. Недопустимы селекторы строкового и действительного типов. Оператор Case осуществляет проверку на равенство значений селектора и констант оператора. В случае если значение селектора совпадает со значением константы, то выполняется соответствующий константе оператор.

case MyValue of 1 : X:=1;

2 : X:=Y+3; else X:=0;

end;

Оператор case обладает большей наглядностью, чем группа операторов if..then. Но это не единственное из его достоинств. Ещё одним преимуществом селектора case..of считается возможность группировки констант.

var Ch:Char;

 

. . .

 

case ch of

: <оператор1>;

‘A’ .. ‘D’

‘E’

: <оператор2>;

else

<оператор3>;

end;

 

Операторы обработки циклов

Циклы предназначены для многократного выполнения оператора (группы операторов), заключенных во внутрь циклической конструкции. Delphi предлагает три различных типа циклов: for

.. do, repeat .. until, while .. do.

12

Цикл с параметром for .. do

Цикл с параметром for .. do применяется в тех случаях, если априорно известно количество повторений, необходимых для выполнения каких то действий. Синтаксическая конструкция выглядит следующим образом:

for <параметр цикла>:=<стартовое значение>

to (downto) <конечное значение> do <оператор>;

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

массива MyArray : array[0..99] of integer;

for X:=0 to 99 do MyArray[X]:=0;

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

Ни в коем случае не допускается изменять значения параметра внутри тела цикла fordo. Ведь это не более чем счётчик числа итераций. Если же Ваша интуиция и логика программы подсказывают, что необходимо найти решение, в котором параметр цикла будет выступать не только в виде банального счётчика, но и в роли управляемого параметра, то на службу вместо цикла for..do надо поставить цикл while..do или repeat..until.

Цикл с предусловием while..do

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

while <условие - логическое выражение> do <оператор>;

Условие цикла задаётся в виде булевого выражения.

X :=0;

while X<=99 do //выполнять пока значение X не превышает 99 begin

MyArray[X]:=0;

X:=X+1; end;

Предложенный пример повторил задачу обнуления массива, но уже при помощи цикла while .. do.

Цикл с предусловием уже свободен от недостатков своего предшественника – цикла for … do. В нём мы можем определять любое приращение шага и не задумываться о количестве повторений тела цикла.

Организация цикла while .. высока вероятность погони за цикла.

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

Цикл с постусловием repeat..until

Оператор repeat .. until весьма схож со своим предшественником while .. do.

repeat <оператор> until <условие – логическое выражение>;

Основные отличия цикла repeat .. until от while .. do заключаются в следующем. Вопервых: оператор цикла repeat .. until вне зависимости от логического выражения будет выполнен хотя бы один раз. Это объясняется местонахождением логического выражения – проверка условия происходит после того, как выполнилось тело цикла. Во-вторых: в отличие от цикла while … do выход из цикла с постусловием осуществляется при истинности логического выражения. Другими словами: цикл repeat .. until будет выполняться до тех пор, пока логическое выражение не соблюдается.

X :=0;

13

repeat

MyArray[X]:=0;

X:=X+1;

until X>100; //выполнять пока значение X меньше 100

Вложенные циклы

Одним из приёмов работы с циклами является идея использования вложенных циклов, в этом случае в теле одного цикла выполняется другой. В следующем примере представлен способ обнуления всех элементов двумерного массива A. Обращение к ячейкам массива производится в рамках двойного цикла for..do.

var A : Array[0..9, 0..9] of Integer; x, y : byte;

begin

for x:=0 to 9 do

for y:=0 to 9 do A[x, y]:=0;

end;

Процедуры break и continue

Изучение циклов было бы логически не завершенным без рассмотрения процедур прерывания текущей итерации цикла (break) и внеочередного начала следующей итерации (continue).

procedure Break; procedure Continue;

Рассмотрим такой пример:

var Accept : boolean; Counter : Integer;

begin

Accept:=true;

Counter:=0;

while Accept=true do begin

Counter:=Counter+1;

Accept:=<выражение>;

if Counter>10 then break; end;

end;

Цикл будет прерван в том случае, если значение переменной-счетчика (counter) превысит 10.

Другой пример. Нам необходимо подсчитать сумму четных чисел, входящих в диапазон от 0 до 10. Для этого воспользуемся процедурой Continue() и функцией Odd(), определяющей чётное, или нечётное число.

function Odd(X: Longint): Boolean;//X нечетное – результат true, иначе – false var Counter, Sum : Integer;

begin

Sum:=0;

for Counter:=0 to 10 do begin

if Odd(Counter)=true then Continue; Sum:=Sum+Counter;

end; Write(Sum); ReadLn; end;

Если переменная counter принимает четное значение, то выполняется выражение sum := sum + counter. В противном случае метод Continue() принуждает цикл начать новую итерацию (досрочно увеличивает счётчик Counter на единицу.

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