Оператор цикла FOR
Оператор цикла REPEAT
Оператор цикла REPEAT организует выполнение цикла, состоящего из любого количества операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла происходит при истинности некоторого логического выражения.
REPEAT
operator1;
operator2;
…
operatorN
UNTIL S;
В этой структуре: operator1,operator2,…,operatorN – выполняемые операторы, составляющие тело цикла; S – логическое выражение, которое проверяется в конце каждой итерации.
Пример.
Алгоритм Евклида для нахождения наибольшего общего делителя чисел m, n (m>n):
repeat
l:=m mod n;
m:=n;
n:=l
until l=0;{результат находится в m}
Оператор цикла FOR организует выполнение одного оператора заранее известное число раз. Существует два варианта оператора:
FOR param:=start TO finish DO operator;
FOR param:=start DOWNTO finish DO operator;
Здесь:
param – параметр цикла, являющийся переменной порядкового типа;
start – выражение, определяющее начальное значение параметра цикла
finish - выражение, определяющее конечное значение параметра цикла;
|
|
operator – выполняемый оператор.
start и finish должны быть совместимы для присваивания с параметром цикла.
При выполнении оператора цикла параметр цикла сначала принимает значение выражения start, а затем при каждой очередной итерации принимает последующее (при первом варианте) или предыдущее значение (при втором варианте), вплоть до значения выражения finish.
Пример.
Вычислить s=nxn-1+(n-1)xn-2+…+2x+1;
s:=0;
p:=1;
for i:=1 to n do
begin
s:=s+p*i;
p:=p*x
end;
Или
s:=0;
for i:=n downto 1 do s:=s*x+i;{схема Горнера}
Задача.
Определить чему будет равно значение S в каждом из следующих случаев:
а) s:=0;
i:=0;
while i<5 do i:=i+1;
s:=s+1/i; ответ 0.2
b) s:=0;
i:=1;
while i>1 do
begin
s:=s+1/i;
i:=i-1;
end; ответ 0
c) s:=0;
i:=1;
repeat
s:=s+1/i;
i:=i-1
until i <=1; ответ 1.0
d) s:=1;
n:=1;
for i:=2 to n do s:=s+1/i; ответ 1.0
Вычислить значение U, напечатав значения выражения в скобках при каждом k.
при x=0.35, y=-1.7.
Для упрощения понимания схемы вычисления имеет смысл ввести следующие обозначения:
,
b=
,
p=, t = a – p.
Программа в этих обозначениях будет выглядеть следующим образом:
program lab4;
const x=0.35; y=-1.7;
var u,s,p,t:real;
k,n:byte;
{ **************************************** }
function a:real;
var c1,c2:real;
begin
c1:=3*sqr(cos(k*x))+exp(k*x+y);
c2:=x*k/(1+x*k);
c2:=arctan(c2/sqrt(1-c2*c2));
a:=c1/c2
end;
{ **************************************** }
function b:real;
var c1,c2:real;
begin
c1:=1+k*x/n+y;
c2:=1+n*n+1/(k*k);
b:=c1/c2
end;
{ **************************************** }
begin
u:=0;
for k:=1 to 5 do begin
p:=1;
for n:=3 to 6 do p:=p*b;
t:=a-p;
writeln(' k=',k,'скобка =',t:7:3);
u:=u+t
end;
writeln;
writeln(' u=',u:7:3)
end.