2. Цикл с предусловием.
While <условие> do <оператор>;
Цикл выполняется, пока условие остается истинным.
Пример. Первоначальный вклад составил S рублей. Через сколько лет сумма вклада более, чем в 2 раза превысит первоначальный вклад, если годовой процент составляет x%.
Например, S=1000 р, x=10%
1 год S=1000+1000*10/100=1100
2 год S=1100+1100*10/100=1210
Program primer;
Var s, sum, x: real;
n: integer;
Begin
Write(‘S=’); Readln(S);
Write(‘x=’); Readln(x);
Sum:=2*s; n:=0;
While S<=Sum do begin
s:=s+s*x/100;
n:=n+1;
end;
write('через ', n, ‘ лет’);
end.
Пример 5. Задана арифметическая прогрессия -21; - 16;… Определить номер первого положительного члена прогрессии.
a – очередной член прогрессии, n – его порядковый номер
a=a+5 n=n+1 |
повторять, пока a<=0 |
Program primer; var a, n: integer; begin a:= -21; n:=1; while a<=0 do begin a:=a+5; n:=n+1; end; writeln(‘n=’, n);
end. |
Program primer; var a, n: integer; begin a:= -21; n:=1; repeat a:=a+5; n:=n+1; until a>0; writeln(‘n=’, n); end. |
Примечание: необходимо учитывать, что тело цикла должно содержать по крайней мере, одну команду, влияющую на значение логического выражения (условия) таким образом, чтобы цикл завершился за конечное число шагов. Например, в рассмотренном примере это команда a:=a+5;
3. Цикл с постусловием
Repeat
<опреаторы>;
Until <условие>
Оператор повторяет последовательность команд пока условие не станет истинным. Этот цикл всегда выполняется хотя бы 1 раз.
Пример. Найти сумму цифр введенного натурального числа.
Program primer;
var
a, n, s: integer;
begin
Write(‘n=’); Readln(n);
S:=0;
repeat
a:=n mod 10;
s:=s+a;
n:=n div 10;
until n=0;
writeln(‘s=’, s);
end.
Пример 6. Протабулировать (вывести на экран таблицу значений) функции y=2x+1 интервале [-3; 3] с шагом 0.5.
x= - 3 y=…
x= - 2.5 y=…
…
x=3 y=…
Program primer;
var
x, y: real;
begin
x:=0;
repeat
y:=sqrt(sqr(sin(x)+2));
writeln(‘x=’, x:6:2, ‘y=’, y:8:4);
x:=x+0.2;
until x>1;
end.
Пример 7. Вычислить сумму
с заданной точностью E=0.0001.
Program primer;
Var S, e, slag: real;
k: integer;
begin
e:=0.0001; s:=0; k:=1;
slag:= k/sqr(k+1);
repeat
s:=s+slag;
k:=k+1;
slag:=k/sqr(k+1);
until slag<e;
write (‘s=’, s:6:2);
end.
Вложенные циклы
Циклическая конструкция может содержать в теле цикла другой цикл. Такие конструкции называют вложенными циклами. Глубина вложения и тип циклов может быть различными.
Например, a) For . . . do – внешний цикл
While . . . do – внутренний цикл (в данном случае глубина = 2)
b) While . . . do
For . . . do
Repeat
. . .
Until (глубина =3)
Рассмотрим механизм работы вложенных циклов на примере:
For a:=1 to 2 do
For b:=1 to 3 do
Writeln(‘a=’, a, ‘ b=’, b);
a=1 a=1 a=1 |
b=1 b=2 b=3 |
выполняется внутренний цикл по b при a=1 |
a=2 a=2 a=2 |
b=1 b=2 b=3 |
выполняется внутренний цикл по b при a=2 |
Параметр внешнего цикла не меняет свое значение до тех пор, пока внутренний цикл не завершит свою работу.
Пример: вывести на экран таблицу Пифагора.
внутренний цикл |
||||||||||
внешний цикл |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|
|
Program primer;
var
i, j: integer;
begin
for i:=1 to 9 do
begin
for j:= 1 to 9 do
write(i*j:4);
writeln;
end;
end.
Внутренний цикл формирует каждую строку таблицы. Writeln – перевод курсора на новую строку.
Пример. Вводятся k натуральных чисел. Найти сумму цифр каждого из них.
повторить |
1. Ввести число N 2. Найти сумму его цифр 3. Вывести результат |
Program primer;
var
n, s, a, i, k: integer;
begin
write (‘k=’); readln(k);
for i:=1 to k do
begin
Write(‘n=’); readln (n); s:=0;
Repeat
a:=n mod 10;
s:=s+a;
n:=n div 10;
until n=0;
writeln (‘s=’,s);
end;
end.
