Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Управляющие конструкции if, case. Циклы..doc
Скачиваний:
3
Добавлен:
27.10.2018
Размер:
164.35 Кб
Скачать

Инструкция (цикл) while

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

Синтаксис инструкции такой:

while условие do инструкция;

или расширенный вариант:

while условие do begin

инструкция 1;

инструкция 2;

...

инструкция n;

end;

Здесь условие – переменная или выражение логического типа. Сначала вычисляется условие. Если условие ложно (False), то цикл не выполняется и сразу заканчивает работу. Если же условие истинно (True), то цикл выполняет инструкции, затем вновь возвращается к условию. Если условие опять возвращает True, цикл выполняется еще раз, и так до тех пор, пока условие не вернет False. Будьте осторожны с этим циклом! Не включайте туда условие, которое никогда не станет False. Компьютер в таком случае "зациклится", то есть зависнет. Обычно для этого внутрь цикла помещают счетчик – переменную целого типа. Только в отличие от цикла for, здесь переменная не увеличивает свое значение автоматически, за этим должен следить сам программист. Пример применения инструкции:

i := 1;

while i < 10 do begin

ShowMessage('Число равно ' + IntToStr(i));

i := i + 1;

end;

В этом простом примере мы целой переменной i присваиваем значение 1. Затем выполняем цикл while до тех пор, пока i не станет больше или равно 10. Если бы мы внутри цикла не указали "i := i + 1;", то этого никогда бы не произошло, и мы зациклили бы программу! Попробуйте выполнить этот пример в новом проекте, привязав код к обработке нажатия кнопки. В дальнейшей практике Вам не раз придется использовать этот цикл с куда более полезными примерами.

Оператор цикла repeat...Until

Мы уже знаем условный цикл while, изучим еще один. Синтаксис цикла несложный:

repeat <тело цикла> until <условие>;

Если цикл while имел предусловие, то цикл repeat имеет постусловие, которое выполняется после тела цикла. Есть еще отличие – цикл while выполняется до тех пор, пока условие истинно, а цикл repeat будет выполняться, пока условие ложно. В цикле while, если условие изначально ложно, тело цикла никогда не будет выполняться. Repeat выполнит тело цикла по крайней мере, один раз. Затем оператор проверяет условие, и если оно ложно, выполняет тело цикла еще раз, и так до тех пор, пока <условие> не вернет истину. Еще одно замечание: зарезервированные слова repeat..until работают как скобки begin...end, поэтому в теле цикла может быть сколько угодно инструкций, которые уже не нужно заключать в begin..end. Пример:

i := 3;

repeat

i := i + 1;

ShowMessage('i = ' + IntToStr(i));

until i > 10;

Управление циклами

Вы знаете уже практически все циклы – for..do, while..do, repeat..until. Однако этими циклами можно еще и управлять. Для этого служат директивы break и continue.

Break – прерывание цикла. Если внутри цикла встретится такой оператор, происходит немедленный выход из цикла. Как правило, этот оператор используют совместно с управляющей структурой if, например:

if a <> b then break;

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

Continue – прерывание текущего шага цикла. В отличие от break, continue не прекращает цикл вовсе, а лишь прерывает дальнейшую обработку этого шага цикла, после чего цикл сразу начинается со следующего шага. Способ применения такой же, как у break. Рассмотрим работу continue на практическом примере.

Нам нужно разделить число 10 на число от -3 до 3 включительно, и результат вывести в ListBox. Поскольку выводить будем также целые числа, нам поможет функция Round(), которая принимает вещественное число, округляет его до ближайшего целого и это целое возвращает. Также мы знаем, что на ноль делить нельзя, это ошибка. Для того, чтобы не допустить это деление, мы прервем этот шаг цикла с помощью директивы continue.

Создайте новое приложение. Установите на форму ListBox, а под ним – кнопку:

Рис. 12.4.  Внешний вид приложения

При нажатии на кнопку, напишите следующий код:

procedure TForm1.Button1Click(Sender: TObject);

var

i, r : Integer;

begin

for i := -3 to 3 do begin

if i = 0 then begin

ListBox1.Items.Add('На ноль делить нельзя!');

Continue;

end; //if

r := Round(10/i);

ListBox1.Items.Add('10/'+IntToStr(i)+'='+IntToStr(r));

end; //for

end;

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