Пример выполнения лабораторной работы №4. Оператор цикла repeat организует выполнение цикла, состоящего из любого количества операторов, с неизвестным заранее числом повторений

Оператор цикла 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: