Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курс инфор.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
74.56 Кб
Скачать

1.3. Оператор цикла while

Выше мы говорили, что цикл являются одним из типов управляющих структур. Оператор цикла задает повторное выполнение определенных операторов. Для реализации циклов в Паскале предусмотрены три различных структурных оператора: WHILE, REPEAT, FOR. Первые два используются, если число повторений (итераций) заранее не определено, но известно условие завершения цикла. Оператор FOR применяется тогда, когда число повторений тела цикла известно заранее .А теперь речь пойдет об операторе цикла while. Этот оператор является наиболее мощным из всех трех, реализующих циклы. Два других оператора можно выразить с его помощью. Общий вид этого оператора:

WHILE <Условие> DO <Тело цикла>;

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

Циклы с предусловием (while) - Сначала проверяется условие. Если оно истинно, выполняются <инструкция 1>...<инструкция n> и так далее. Если же условие ложно, выполнение инструкции считается законченным, и программа переходит к обработке следующих команд. В цикле while-do <условие> - это условие выполнения цикла: пока оно истинно, программа из цикла не выйдет. В том случае, если внутри цикла стоит только один оператор, пара begin - end может отсутствовать, если операторов больше одного, то пара begin - end обязательна, так как иначе будет выполнятся только одна инструкция, стоящая сразу после слова do.

Циклы с постусловием (do while) - сперва выполняется сам цикл и только после него проверяется его истинность или ложность. Особенностью данного цикла является то, что он будет выполнен хотя бы один раз, в отличии от цикла с предусловием.

Примеры

Пример 1. Вычисление и вывод на экран значение "машинного эпсилон"

Program EpsilonDetect ;

var

epsilon : Real;

begin

epsilon : = 1;

while epsilon/2 + 1 > 1 do

epsilon : = epsilon/2

WriteLn ('Машинное эпсилон= ', epsilon)

end.

Пример 2. Вычисление суммы нечётных чисел в интервале 0 - 10

Program DemoWhile ;

var I, sum : integer ;

begin

sum : = 0; I : = 1 ;

while (I<11) do

begin

sum : = sum + I ;

I : = I + 2 ;

end ;

write ('Сумма нечётных чисел равна', sum : 3)

end.

Пример 3. Вычисление числа "Пи"

Program PI ;

var

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

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

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

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

begin

p : = 0 ;

n : = 1 ;

elem : = 1 ; {начальное значение}

write ('Задайте точность вычисления ПИ ->') ;

readln (t) ;

writeln ('Вычисление ПИ с точностью', t : 9 : 6) ;

while elem >= t do

begin

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

if (n MOD 2) = 0

then p : = p - elem

else p : = p + elem ;

n : = n + 1) ;

end;

p : = p*4 ;

writeln ('Значение Пи с точночтью', t : 9 : 6, 'равно', p : 9 : 6) ;

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

readln ;

end.

Пример 4. Вычисление НОД двух целых чисел

Program NOD;

var

n1, n2 : integer ; {числа, НОД которых надо найти}

nod : integer ; {наибольший общий делитель}

r : integer; {остаток от деления n1 на n2}

begin

writeln ('Вычисление НОД') ;

writeln ('для двух целых чисел.') ;

write ('Введите в одной строке два числа') ;

writeln ('и нажмите <Enter>') ;

write ('->') ;

readln (n1, n2) ;

while (n1 mod n2)do

begin

r : = n1 mod n2 ; {остаток от деления}

n1 : = n2 ;

n2 : = r ;

end ;

nod : = n2 ;

writeln ('НОД чисел', n1, 'и', n2, 'это', nod) ;

readln ;

end.

Пример 5. Вычмсление суммы S=1+1/2+1/3+...+1/50

VAR S: REAL; N:INTEGER;

BEGIN

S:=0; N:=1;

WHILE N<=50 DO

BEGIN

S:=S+1/N;

N:=N+1;

END;

WRITELN(' S=',S);

END.

Пример 6. Даны числа A, B (A > 1). Получить все степени числа A, меньшие числа B.

program STEPENI;

var A, B, C: real;

begin

readln (A, B); C := A;

while C < B do

begin

writeln (C);

C := C*A;

end;

end.

Пример 7. Даны числа a,b (a>1). Получить все члены бесконечной последовательности a,a^2,a^3,…a^n

Program p1;

Var a,b,n:integer;

BEGIN

Write('Введите А и В');

Readln(a,b);

n:=1;

While EXP(n*LN(a))<b do

Begin

Writeln(EXP(n*LN(a)));

n:=n+1;

end;

end;

END.

Пример 8. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := 0; B := 1;

While K <> N DO Begin

K := K + 1; B := B * A;

End;

Write(‘ A в степени N = ’,B);

END.

Пример 9. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.

USES Crt;

VAR

A, B, C, K : INTEGER;

BEGIN

Write(‘ Введите два значения ‘); ReadLn(A,B);

K := 0; C := 0;

While K <> B DO Begin

K := K + 1; C := C + A;

End;

{C = A * K и K = B, следовательно, C = A * B}

Write(‘ A*B= ‘,C);

END.

Пример 10. Вычислить значение переменной Y=2K+N при всех значениях переменных N=1,2,3 и K=2,4,6,8. обратите внимание на то, что если перебирать N и K получим 12 значений переменной Y.

Var N,K,Y: Integer;

Begin

For N:=1 To 3 Do Begin

K:=2;

While K<=8 Do Begin

Y:=2*K+N;

WriteLn(‘При N= ’,N:4,’ и K= ’,K:4,’ Y= ’Y:4);

K:=K+2;

End;

End;

End.