logo

Циклы с предусловием ‘while…do…’

(Пока Делать)

Синтаксис оператора цикла ‘WHILE…DO…’:

WHILE<логическое условие>DO

Begin

<тело_цикла>

End;

Здесь WHILE, DO – зарезервированные слова (пока [выполняется условие] делать);

Если выражение <условие> имеет значение TRUE (истина), то выполняется <тело_цикла>, после чего вычисление выражения <условие> и его проверка повторяются. Если условие имеет значение FALSE (ложь), оператор WHILE прекращает свою работу.

Замечание.Если <тело_цикл> состоит из одного оператора, слова begin end могут быть опущены.

Алгоритм выполнения:Пока условие истинно, выполнять операторы тела цикла. Если условие сразу оказывается ложным, цикл не будет выполнен ни разу.

Whileпроверялось условие продолжения цикла.

После WHILE записывать условие выполнения операторов цикла.

Пример. Написать программу для вычисления суммы Nпервых натуральных, т.е. требуется вычислить 1+2+3+…N

Фрагмент программы

s:=o; {начальное значение суммы)

i:=1; {начальное значение счетчика и слагаемое}

WHILEi<=NDO{нужно выполнить циклNраз}

s:=s+i; {добавим слагаемое к сумме}

i:=i+1; {увеличение значения счетчика и слагаемое на 1}

End; {законченное тело цикла}

Пример.Вычислить факториал числа N(N!).

ФАКТОРИАЛОМ называют такую функцию целочисленного аргумента

f(i), что f(0) = 1 ; f(i) = i * f(i-l)

Тогда

f(l) = l*f(0) =1*1 = 1

f(2) = 2*f(l) = 2*1 = 2

f(3) = 3*f(2) = 3*2*1 = 6

f(4) = 4*f(3) = 4*3*2*1 = 24 и т.д.

Получаем, что факториал числа N - это произведение всех натуральных чисел от 1 до N. Дополнительная трудность заключается в том, что факториал нуля есть 1 (как результат договора между математиками), а факториал отрицательного аргумент не определен. Убедитесь самостоятельно в том, что поставленная задача решается с помощью программы:

Program Factorial;

Uses CRT;

Label start;

Var

n,i:Integer;

t:LongInt;

Begin

start:ClrScr;

Write('N = '); Readln(n);

If (n<0) Then Begin

Writeln('N>=0!!!');

Goto start;

End

Else If (n=0) Then t:=l

Else Begin t: = l;

for i:=l to n Do t:=t*i;

End;

Writeln('Факториал числа ',n,' равен ',t);

Repeat Until KeyPressed

End.

Ответ:

N = -3

N>=0!!!

N- = 8

Факториал числа 8 равен 40320

Если не поставить начальное значение t=l перед циклом, то по умолчанию ЭВМ обнулит t, из-за чего и все произведение будет равно нулю. Заметьте, что факториал настолько быстро растет,что результат пришлось описывать типом LongInt. Уже 8! оказалось больше числа MaxInt.

Пример.Вычислить суммуS=ln3+ln5+ln7+…

при условии, что в нее входят слагаемые, не превосходящие 5, и количество этих слагаемых.

Логика построения суммы очевидна: s:=s+ln(i)/ Главная проблема заключается в постановке условия на выход из цикла.

Program Logorif;

Uses CRT;

Var

i, j: byte; a, s:real;

Begin

ClrScr;

j:=1; i:=3; a:=ln(i); s:=0;

While (a<5) do

Begin

s:=s+a;

inc(j); inc(i,2);

a:=ln(i);

End;

Writeln(j-1, ' slagaemich');

Writeln('сумма = ',s:7:3);

Repeat Until KeyPressed; {стандартная функция из библиотеки CRT, приводит к задержке окна

результатов до нажатия любой клавиши}

End.

Результат работы программы 73 слагаемых, сумма=296.140.

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4