Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi.Начало.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.56 Mб
Скачать

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

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

Блок-схема цикла приведена на рисунке.

Из блок-схемы видно, что операторы тела цикла выполняются до тех пор, пока условие входа в цикл равно истине.

При использовании цикла с предусловием необходимо понимать, что:

  1. значение условия выполнения цикла должно быть определено до начала цикла;

  2. если условие входа в цикл ложно, то происходит выход из цикла;

  3. хотя бы один из операторов тела цикла должен влиять на условие выполнения цикла, иначе цикл будет повторяться бесконечное число раз;

  4. цикл может не выполниться ни разу, если условие входа в цикл ложно.

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

While <условие> do <оператор>;

Если перевести на русский язык все английские слова этого предложения, то получится следующая понятная русская фраза: до тех пор, пока условие=истина делать операторы. При этом:

Условие – это логическое выражение, которое может принимать значение либо истина (true), либо ложь (false).

Оператор – это либо одиночный, либо составной оператор.

Пример 1. Посчитать сумму ряда чисел: 1+1/2+1/3+…1/n , до тех пор, пока n<=100.

var

i:integer;

sum:real;

begin

sum:=0; i:=1;

while i<=100 do

begin

sum:=sum+1/i;

i:=i+1;

end;

label1.Caption:='sum='+FloatToStr(sum);

Пример 2. Рисовать концентрические окружности в окне, до тех пор, пока они входят в окно.

var x0,y0:integer;

sh,i:integer;

begin

sh:=10; {расстояние между окружностями}

{ координаты левого верхнего угла}

x0:=width div 2 - sh; y0:=height div 2 - sh ;

with canvas do

begin

pen.Color:=clGreen;

pen.Width :=5;

{ делаем окружности прозрачными }

brush.Style:=bsClear;

i:=1;

while (x0>0) and (y0>0) and

(x0+2*i*sh<ClientWidth) and (y0+2*i*sh<ClientHeight) do

begin

ellipse(x0,y0,x0+2*sh*i,y0+2*sh*i);

i:=i+1;

x0:=x0-sh;

y0:=y0-sh;

end; { end while }

end; { end with}

end;

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

Цикл с постусловием напоминает цикл с предусловием. Отличие заключается в том, что проверка выхода из цикла выполняется в конце цикла. Блок-схема цикла приведена ниже:

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

Синтаксис оператора имеет следующий вид:

Repeat

<операторы>

Until <условие>;

Если перевести на русский язык, получим: повторять операторы тела цикла до тех пор, пока условие ложно.

Следует отметить, что в данной конструкции последовательность операторов, определяющих тело цикла, не заключается в операторные скобки begin.. end., поскольку ими служит пара операторов repeat..until.

При использовании цикла repeat..until следует иметь в виду следующее:

  1. Цикл обязательно выполнится хотя бы один раз;

  2. Хотя бы один из операторов тела цикла должен влиять на условие выполнения цикла, иначе цикл будет повторяться бесконечное число раз;

Пример 1. Найти сумму ряда чисел: 1+1/2+1/3+…1/100 с использованием цикла repeat.

Var

i :integer;

sum:real;

begin

sum:=0; i:=1;

repeat

sum:=sum+ 1/i;

i:=i+1;

until i>100;

end;

Пример 2. Рисовать концентрические прямоугольники с центром в середине экрана, пока они входят на экран. Внешний вид экрана приведен на рисунке:

Программный код имеет следующий вид:

var x0,y0:integer;

sh,i:integer;

begin

sh:=10; {расстояние между прямоугольниками}

{ координаты левого верхнего угла}

x0:=width div 2 - sh; y0:=height div 2 - sh ;

with canvas do

begin

pen.Color:=clBlue;

pen.Width :=3;

{ делаем прямоугольники прозрачными }

brush.Style:=bsClear;

i:=1;

repeat

rectangle(x0,y0,x0+2*sh*i,y0+2*sh*i);

i:=i+1;

x0:=x0-sh;

y0:=y0-sh;

until (x0<=0) or (y0<=0) or

(x0+2*i*sh>=ClientWidth) or (y0+2*i*sh>=ClientHeight)

end;

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