Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

IV. Циклдік оператор алгоритмдерін программалау




1. Шарты алдын-ала берілген цикл операторына мысалдар:

Мысал 1. S=1+1/22+1/32+..+1/k2+… қатарының қосындысын e=10-5 дәлдігімен (оның келесі мүшесі 1/k2<10-5 болғанға дейін) есептеу қажет. Бұл қосындыны табудың алгоритмі 1.5-суретте келтірілген, ал программа мәтіні

Program cymma;

Const eps=1e-5;

Var k: integer; a, s: real;

Begin

k:=1; a:=1/sqr(k); s:=0;

while a>eps do

begin

s:=s+a;

k:=k+1;

a:=1/(k*k);

end;

writeln(‘қайталану саны=’,(k-1):3, ‘s=’, s:8:3)

       
   
 

end.

1.5-сурет 1.6-сурет

Мысал 2. Sinx функциясын оның қатарға жіктелу формуласы арқылы есептеу керек.

sinx= x-33/3!+x5/5!+…+(-1)n-1*x2n-1/(2n-1)!+…=S(-1)n-1*x2n-1/(2n-1)!

Алгоритмді құру барысында бұл қатардың келесі мүшесін табу үшін, оның қатар орналасқан екі мүшесінің қатынасын анықтап, есептелген әрбір мүшені сол қатынасқа көбейтіп отыру қажет.

an+1/an=x2n+1/(2n+1)!:x2n-1/(2n-1)!=x2n+1(2n-1)!/(2n+1)!x2n-1=x2/2n(2n+1).

Осы екі теңдікті пайдаланып, бұрыштың мәні градуспен берілген деп есептеп, алгоритмді (1.6-сурет) және оған сәйкес программаны құрастырамыз. Қатар мүшелерінің есептеу дәлдігін e=10-8 деп қабылдағанда, олар төмендегідей болады:

Program sinx;

Const eps=1e-8;

Var n: integer;

x, a, sinx: real;

begin

write(‘х-ті енгізіңіз:’); readln(x);

x:=x*pi/180; a:=x: sinx=a; n:=1;

while abs(a)>eps do

begin

a:=-a*x*x/(2*n(2*n+1));

sinx:=sinx+a; n:=n+1

end;

writeln(‘sinx=’,sinx:6:3)

end.

2. Шарты соңынан берілген цикл операторына мысалдар:

Мысал 1. While операторымен шығарылған 1.5-суретте көрсетілген 1-мысалды енді Repeat операторымен қайталап шығарайық, программада қандай оператор қолдануымызға байланысты алгоритм схемасы да (1.7-сурет), программа да аздап өзгеріске ұшырайды.

Program cymma;

Const eps=1e-5;

Var k: integer;

a, s: real;

begin

s:=0; k:=1;

repeat

a:=1/sqr(k);

s:=s+a;

k:=k+1

until a<eps; {цикл соңы}

writeln(‘қайталау саны=’, (k-1):2, ‘s=’, s:8:3)

end.

1.7-сурет

Мысал 2. қатарының мүшелеріне дейінгі шексіз қатар мүшелерінің мәнін есептеуге арналған программаны құру керек (1.8-сурет).

 

PROGRAM М3 (input, output);

VAR X, Y, EPS: REAL;

N: INTEGER;

BEGIN

READ(X, EPS);

N:=1;

Y:=1;

REPEAT

Y:=Y*X/N;

WRITELN(Y);

N:=N+1;

UNTIL Y<EPS

END.

 

 

Сурет

3. Параметрлі цикл операторына мысалдар:

Мысал 1. 1-ден 100-ге дейінгі натурал сандардың қосындысын табу керек, яғни мынадай қосындыны анықтау қажет:

S=1+2+…100=åi.

Бұл есептің орындалу схемасын 1.9-суретте көрсетілген, оған сәйкес программа мәтіні

Program cymma;

Var i, s: integer;

Begin

s:=0; for i:=0 to 100 do {цикл басы}

s:=s+i; {қайталау операторы}

writeln(‘қосынды=’ s:6)

End.

 
 
1.9-сурет

Мысал 2. k функциясының мәндерін оның аргументі х -4-тен +4-ке дейін қадамы 0,2 болып өзгерген кезде табу қажет, мұндағы

y=(x2-2x+2)/(x2+1).

Бұл алгоритмде бізге циклдің неше рет қайталанатынын алдын ала білуіміз керек, сондықтан аргументтің алғашқы, соңғы мәндерін және өзгеру қадамын пайдалана отырып, қайталану санын төмендегі формуламен есептей аламыз:

n=[(xk-x0)/Ñx]+1;

n=(4-(-4))/0,2+1=41рет.

Цикл операторының параметрін 1-ден 41-ге дейін өсіре отырып, алгоритмді 1.10-суреттегідей, ал программаны төмендегіше құруға болады:

Program funksia;

Var k: integer; x, y: real;

Begin

x:=-4; for k:=1 to 41 do

begin

y:=(x*x-2*x+2)/(x*x+1);

writeln('x=', x:5:2, 'y=', y:8:3);

x:=x+0.2

end

end.

FOR операторындағы цикл параметрінің бүтін мәндері қабылдайтынын ескере отырып,

х айнымалысының өзгеру қадамын 0,1 етіп, бұл программаны басқаша жолмен де жасауға болады.

Var k: integer; x, y: real;

Begin 1.10-сурет

for k:=-40 to 40 do

begin

x:=k/10;

y:=(x*x+2*x+2)/(x+1);

writeln('x=', x:5:2, 'y=', y:8:3);

end

end.

Мысал 3. Бүтін сандардың көбейтіндісін өрнектейтін n! мәнін, яғни n!=1*2…n табу қажет. Бұл алгоритмді құру барысында FOR операторының кері қарай есептейтін мүмкіндігін пайдаланайық (1.11-сурет).

Program faktorial;

Var i, n: integer; p:longint;

Begin

Write(‘бүтін n енгізіңіз:’); readln(n);

p:=1; for i:=n downto 2 do p:=p*i;

writeln(n:2, ‘!=’, p:7);

end. 1.11-сурет

V. Енгізілген циклдер құрылымымен алгоритмдерді программалау

Бірінің ішіне бірі кірістірілген циклдер бар болады. Оларды күрделі циклдер деп аталады. Кірістірілген циклдерді қолданған программалар құрғанда ішкі цикл толығымен сыртқы циклдің ішіне орындалатындай болуы керек. Ішкі цикл өз кезегінде өзінің ішіне ішкі цикл орналастыра алады.

Мысалы 1: Nжәне K айнымалыларының барлық мәндеріндегі у айнымалысының мәндерін есептеу керек. N-сыртқы цикл параметрі, K-ішкі цикл параметрі, N, K, y-бүтін типті айнымалылар.

N айнымалысының әрбір мәнінде K айнымалысы 2, 4, 6, 8 мәндерін қабылдасын. Бұл 3 рет қайталанады, себебі N айнымалысының қабылдайтын мәндері үшеу. N=1, 2, 3, K=2, 4, 6, 8, y=2K+N. Сыртқы цикл – for арқылы, ал ішкі цикл while арқылы орындалады.

Program M1 (input, output);

Var

M, K, y: integer;

Begin

For N:=1 to 3 do

Begin

While K<8 do

Begin

y:=2*K+N;

Writeln(N:4, K:4, y:4);

K:=K+2;

End;

End;

End.

Мысалы 2: F, J, K айнымалыларының барлық мәндеріндегі z айнымалысының мәндерін есептеу керек. F=1, 2, 3, 4, 5, J=2, 4, 6, 8, 10, 12, K=7, 9, 11, z=2F+2J+K.

F, J - сыртқы цикл параметрі;

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...