7 апта
Тақырып 6. Цикл операторлары. Циклдік оператор алгоритмдерін программалау. Енгізілген циклдер құрылымымен алгоитмдерді программалау
План лекции
Шарты алдын - ала берілген циклдық операторлар.
Шарты соңынан берілген циклдық операторлар.
Параметрмен берілген цикл операторлар
Сабақ мақсаты
Білімділік
Студенттерге программалау тілінің цикл операторы жайлы жалпы мағлұмат беру
Циклдік процестерді ұйымдастыру.
Операторлардың түрлерімен таныстыру.
Дамытушылық
Студенттердің цикл операторларын қолдана отырып, Паскаль тілінде программа құра алатынын қадағалау және өздігінен тапсырмаларды орындауы
Циклдік алгоритмдерін программалауға дағдылану
І. Шарты алдын – ала берілген цикл операторы
Көптеген есептерді шығару кезінде есептеу процесі циклдік характерде болады, яғни қайсыбір операторларды айнымалының әр түрлі мәндерінде бірнеше рет орындауға тура келеді. Осындай кезде циклдік операторды қолданамыз.
Паскаль тілінде цикл операторының үш түрі бар:
шарты алдын-ала берілген цикл операторы
шарты соңынан берілген цикл операторы
параметрлі цикл операторы.
Құрамына басқа да операторлар кіретіндіктен цикл операторы күрделі операторы деп аталады.
Егер циклдің қанша ретқайталанатыны алдын-ала белгісіз болса, онда шарты алдын-ала берілген циклді пайдаланамыз.
Шарты алдын-ала берілген цикл операторының жазылу формасы:
While <логикалық өрнек> do
Begin
[циклдік бөлік операторлары]
end.
мұндағы while (әзірше) және do (орында) қызметші сөздер.
Шарты алдын-ала берілген цикл операторының қолданылуынан программа үзіндісін қарастырайық:
A:=1;
N:=1;
While 2*A<=3*N+1 do
Begin
A:=A+2;
N:=N+1
End.
Шарты алдын ала тексеретін қайталану саны белгісіз цикл операторы WHILE шарт ақиқат болғанда ғана орындалады. Егер шарт жалған болса, бұл цикл бір рет те орындалмауы мүмкін. Бұл оператордың орындалу желісі 1.1-суретте келтірілген, ал жазылу түрі:
W
жоқ
HILE <шарт> DO <оператор>;
{бір оператор қайталанады}
немесе суреттегі алгоритмге сәйкес иә
WHILE <шарт> DO
{бірнеше оператор қайталанады}
BEGIN
<1-оператор>;
<2-оператор>;
…
;
END.
1.1-сурет
ІІ. Шарты соңынан берілген цикл операторы
Бұл операторды циклдың қанша рет қайталанатыны белгісіз болған жағдайда қолданамыз. Цикл операторының жалпы түрі:
REPEAT
[циклдық бөлік операторлары]
UNTIL <логикалық өрнек>
Мұндағы repeat (қайталау) және until (болғанға дейін) қызметші сөздер. Мұнда алдымен цикл операторы орындалып шарт соңынан тексеріледі.
Мысалы:
у=х2 функциясының х=8, 6, 4, 2 болғандағы мәндерін есептеп шығарыңыз.
Программа үзіндісі:
x:=8
repeat
y:=sqr(x);
writeln(x:3, y:5);
x:=x-2;
until x<0.
Шарты цикл соңында тексерілетіндіктен REPEAT (қайталау) операторы ең болмағанда бір рет орындалады. Циклдің орындалуы шарт ақиқат болғанда ғана тоқталады. Оның жазылу түрі:
REPEAT <оператор> UNTIL <шарт>; {бір оператор қайталанады}
Ал бірнеше оператор қайталанатын жағдайдағы бейнеленуі 1.2-суретте келтірілген, ал жазылуы:
REPEAT <1-оператор>;
<2-оператор>;
…
UNTIL <шарт>;
Бұл жерде құрамалас оператор REPEAT және UNTIL сөздерінің арасында орналасып, басқа түйінді сөздер жазылмайтыны көрініп тұр. Бұл операторды да WHILE операторын пайдаланған есептерде қолдануға болады, қай операторды пайдалану программалаушының өз еркіне байланысты шешіледі.
жоқ
1.2-сурет
ІІІ. Параметрлі цикл операторы.
Программаның циклдық бөлігі неше рет қайталанатыны алдын-ала белгілі болған жағдайда қолданылады. Цикл операторының жазылу түрі:
FOR I:=M1 TO M2 DO
BEGIN
[циклдық бөлік операторлары]
END.
Мұндағы for (үшін), to (дейін), do (орында) қызметші сөздер; i-цикл параметрі; m1, m2-циклдің алғашқы және соңғы мәндері. Көбінесе параметрлі циклде i-бүтін типті айнымалы ретінде қолданылады, ал оның қадамы +1 немесе –1 болады.
FOR операторы. FOR операторы цикл параметрі (айнымалы) өзінің алғашқы мәнінен соңғы мәніне дейін бірлік қадаммен өзгеру барысында циклге кіретін бір немесе бірнеше операторды қайталау ісін атқарады.
1) Цикл барысында оның параметрінің мәні біртіндеп өсетін болса, TO түйінді сөзі қолданылады. Тек бір оператор қайталанатын кездегі оның жазылу түрі мен орындалуының алгоритмдік схемасы 1.3-суретте көрсетілген.
j=n1, n2, 1
1.3-сурет
Ал егер циклде бір ғана емес бірнеше оператордан тұратын құрмасалс оператор қайталанатын болса, онда оператордың орындалуы 1.4-суретте көрсетілгендей болады да, жазылу түріне BEGIN, END түйінді сөздері кіреді.
2) Цикл параметрінің алғашқы мәні соңғы мәнінен артық болған жағдайда (n1>n2), яғни қадамы –1 болып кемитін кезде FOR операторының жазылу түрі өзгешелеу болады:
FOR i:=n1 TO n2 DO
j=n1, n2, 1 BEGIN
<1-оператор>;
<2-оператор>;
…
;
END;
{бірнеше операторлар қайталанады}
1.4-сурет
FOR i:=n1 DOWNTO n2 DO <операторлар>;
{бір оператор қайталанады}
мұндағы DOWNTO-түйінді сөз, “кері қарай” болып аударылады; BEGIN және END түйінді сөздерімен қоршалған құрмалас оператор қайталанатын жағдайда бұл оператордың төмендегідей болуы тиіс:
FOR i:=n1 DOWNTO n2 DO
BEGIN
<1-оператор>;
<2-оператор>;
…
END;
IV. Циклдік оператор алгоритмдерін программалау
1. Шарты алдын-ала берілген цикл операторына мысалдар:
Мысал 1. S=1+1/22+1/32+..+1/k2+… қатарының қосындысын =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)
e
nd.
1.5-сурет 1.6-сурет
Мысал 2. Sinx функциясын оның қатарға жіктелу формуласы арқылы есептеу керек.
sinx= x-33/3!+x5/5!+…+(-1)n-1*x2n-1/(2n-1)!+…=(-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-сурет) және оған сәйкес программаны құрастырамыз. Қатар мүшелерінің есептеу дәлдігін =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.
Достарыңызбен бөлісу: |