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

Наиболее общим в Delphi является цикл с предусловием, реализуемый оператором WHILE…DO. Вот его общий вид:

 

WHILE условие DO

оператор;

 

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

В качестве условия может выступать любое логическое выражение или переменная типа BOOLEAN. Работает такой цикл следующим образом. Сначала проверятся условие (отсюда и название – цикл с предусловием). Если условие истинно, то выполняется оператор (он называется "тело цикла"), а затем программа "пятится назад", снова оказывается на операторе WHILE..DO, снова проверяет условие… и так далее до тех пор, пока условие не станет ложным. Как только это случится, цикл прекращается, и начинает выполняться оператор, следующий за телом цикла.

Таким образом, инструкции, находящиеся между begin и end, выполняются до тех пор, пока условие истинно (значение выражения условие равно true)

Обратите внимание: Для того чтобы инструкции цикла, находящиеся между begin и end, были выполнены хотя бы один раз, необходимо, чтобы перед выполнением инструкции while выражение условие было истинно. Для того чтобы цикл завершился, необходимо, чтобы последовательность инструкций между begin и end изменяла значения переменных, входящих в выражение условие.

Рассмотрим пример использования цикла WHILE. Пусть мы суммируем ряд натуральных чисел 1+2+3+… и хотим узнать, на каком числе этого ряда сумма превысит 100. Программа будет выглядеть следующим образом:

 

VAR s:WORD; { сумма }

i: WORD; { текущее число ряда }

BEGIN

s:=0; { сумму обязательно обнуляем!!! }

i:=1; { начинаем суммировать с единицы }

WHILE s<100 DO

BEGIN

s:=s+i;

i:=i+1

END;

Label1.Caption:='Сумма превысит 100 при i='+IntToStr(i)

end;

Кстати, сумма превысит 100 при i=15, так как . Обратите внимание на операторные скобки BEGIN..END. Они позволяют поместить в тело цикла более одного оператора (разумеется, если в теле цикла только один оператор, BEGIN…END не нужны).

Рис. 1. Обозначение цикла с предусловием на блок-схемах.

На блок-схемах все циклы изображаются в виде крышки гроба, самого гроба и лежащего в нем тела цикла. Обозначения же зависят от вида цикла. Для цикла с предусловием блок-схема выглядит, как показано на рис. 1.

Следующая программа вычисляет значение числа p с задаваемой пользователем точностью. В основе алгоритма вычисления лежит тот факт, что сумма ряда 1-1/3+1/5-1/7+1/9+, если взять достаточно много его членов, приближается к значению p/4. В программе очередной член ряда, с номером n, вычисляется по формуле: 1/(2*n-1) и умножается на минус один, если его номер четный (определить, является ли n четным можно, например, проверкой остатка от деления n на 2). Вычисление заканчивается тогда, когда значение очередного члена ряда становится меньше, чем заданная точность вычисления. Вид диалогового окна программы приведен на рис.

Пользователь вводит точность вычисления в поле ввода (Edit1). После щелчка на командной кнопке Вычислить (Buttoni) программа вычисляет значение числа p и выводит результат в поле метки (Label2).

Как и в предыдущих примерах, основную работу выполняет процедура обработки события onClick, текст которой приведен ниже.

{Вычисление числа p с заданной точностью}

procedure TFonnl.ButtonlClick(Sender: TObject);

pi: real; {вычисляемое значение p}

t: real; {точность вычисления}

n: integer; {номер члена ряда}

elem:real; { значение члена ряда}

begin

pi:=0; n:=l; t:=StrToFloat(Edit1.Text); elem:=t+l; {чтобы начать цикл}

While elem >= t do begin

elem:=l/(2*n-l) ;

if (n MOD 2) = 0 then pi:=pi-elem else pi:=pi+elem;

n:=n+l;

end;

pi:=pi*4;

Label2.Caption:= 'ПИ равно '+ FloatToStr(pi) + #13

+ 'Просуммировано '+IntToStr(n)+' членов ряда.';

end;

 








Дата добавления: 2015-03-19; просмотров: 778;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.