«Алгоритмдер, мәліметтер құрылымы және программалау»


m2: array [1..10, 1..10] of real



бет5/12
Дата30.06.2016
өлшемі0.74 Mb.
#167015
1   2   3   4   5   6   7   8   9   ...   12

m2: array [1..10, 1..10] of real;

мұндағы алғашқы сөз – массивтердің атауы; N, M – массивтің төменгі және жоғарғы индекстерінің мәндері, const бөлімінде анықталған тұрақтылар; Т – type бөлігінде сипатталған массивтің типі.

Айнымалылар сипатталған соң, процедуралар мен функциялар жазылуы тиіс. Олардың саны бірнешеу де болуы ықтимал.





    1. Программаның операторлар бөлігі

Операторлар программаның ең соңғы жағындағы begin және end түйінді сөздерінің аралығында орналастырылады. Оператор дегеніміз – алгоритмді жүзеге асыру барысында орындалатын іс-әрекеттерді анықтайтын тілдің қарапайым сөйлемі. Олар жазылу ретіне қарай бірінен кейін бірі тізбектеліп орындалады. Операторлар бір-бірінен нүктелі үтір (;) арқылы бөлініп жазылады. Оқуға, түсінуге ыңғайлы болуы үшін бір қатарға көбінесе бір оператор жазылады. Қағазға программа текстін басып аларда орын үнемдеу үшін немесе экран бетіне көбірек мәлімет орналастыру кезінде бір қатарға бірнеше оператор жазуға болады.

Қатарлар арасына не соңына жүйелі жақшаға алынған түсініктеме сөздер жазып отыру керек. Оларды қазақша не орысша, жалпы ұттық әріптермен жазуға рұқсат етілген.

Операторлар қарарпайым және құрмалас болып екіге бөлінеді. Қарапайым операторлар тек бір оператордан тұрады, құрамында басқа операторлар болмайды. Оларға мысал ретінде меншіктеу, көшу, процедураны шақыру және бос операторларды келтіруге болады.

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

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

Мысалы:


begin

a:=beta/5.25;

c:=2*beta+sin(a);

write(a:6:2, c:8:3)

end;

Операторлар орындайтын қызметтеріне байланысты 1.1-суретте келтірілген топтарға жіктеледі. Енді осы көрсетілген операторлардың жазылу жолдарын, олардың ерекшеліктерін қарастырамыз.




1.1-сурет


ІІ. Программалау тілінің операторлары

Паскаль тілінің операторларын жай және күрделі операторлар деп екі топқа бөлуге болады. Жай операторлардың ішінде ешқандай оператор болмайды. Күрделі операторлар бірнеше жай операторлар конструкциясынан құралады.


2.1 Меншіктеу операторы

Меншіктеу операторы кез келген программалау тілінің негізгі операторы. Меншіктеу операторы жазылған өрнектердің мәнін есептеп, оны айнымалыға телу үшін қолданылады. Өрнек мәнінің типі айнымалының типіне міндетті түрде сәйкес келуі тиіс. Кейде нақты түрдегі айнымалыға бүтін сан мәнін меншіктеуге болады, ондайда бүтін сан нақты санға айналып кетеді. Меншіктеу операторының жазылу ережесі төмендегідей болады:



<айнымалы>:=<өрнек>;

мұндағы := - меншіктеу белгісі, яғни айнымалының мәні өрнектің есептелген сан мәніне тең болуы тиіс.



Мысалдар:

i:=i+1;


x1:=(-b+sqrt(b*b-4*a*c))/(2*a);

a[2,3]:=m-n;

fun:=false; (fun айнымалысының типі – boolean)

l:=2*pi*r;



2.2 Көшу операторы

Көшу операторы қатарларының рет-ретімен орындалуын бұзып, белгісі бар операторға көшу ісін атқарады. Ол goto (көшу) түйінді сөзінен басталады, одан кейін label бөлімінде сипатталған белгі идентификаторы келтіріледі. Оның жазылу форматы

GOTO _ <белгі>;

Мұндағы <белгі> - белгі идентификаторы, _ - бір бос орын қалдыру белгісі.



Мысалдар:

goto 20;


goto n1;


Жалпы құрылымдық программалау тәртібі бойынша бұл операторды қолданбауға тырысу керек. Ол программаны оқып түсіну ісін қиындатады.

Goto операторын қолданған шақта оның қатарына жүйелі жақша ішіне неліктен басқа қатарға көшу қажет екендігін түсіндіріп кету керек немесе шартты тексеріп көшу операторын пайдаланған абзал.


2.3 Бос оператор

Бос оператор ешқандай да әрекеттің орындалмайтынын көрсетеді, кейде goto операторы бос операторға көшу ісін атқаратын сәттер болады. Бос оператор begin, end сөздерінен немесе ешбір мәнді өзгертпейтін өрнектен тұрады.



Мысалы:

A:=A;


10: BEGIN END; {мұндағы 10 белгі рөлін атқарады}

WHILE A <> ‘ ‘ DO;


ІІІ. Енгізу-шығару процедуралары
Паскаль тілінде енгізу-шығару операторлары процедура болып анықталады.

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

read (a1, a2, … , an),

мұндағы а1, а2, ... , аn енгізу ретімен мәндер қабылдайтын айнымалылар. Егер айнымалы нақты деп сипатталып, ал оның қабылдайтын мәні бүтін сан болса, онда бүтін санды да, сол сияқты нақты санды да енгізе беруге болады. Мәліметтерді енгізу барысында жаңа жолға көшіретін readln параметрсіз енгізу операторын қолдануға рұқсат етіледі.

Енгізілетін айнымалылардың мәндері integer, real, char, string (сөз тіркестері) типтеріне жатуы мүмкін. Логикалық айнымалылардың мәндерін енгізуге болмайды.

Егер енгізу перне арқылы жүзеге асырылмай, дискілік файл арқылы жүргізілсе, онда жақша ішінде бірінші болып файл аты жазылады.

Read (FN, b1, b2, … , bn);

Read (FN, b1, b2, … , bn);

Readln (FN);

Мұндағы FN – мәндер енгізілетін дискідегі файл аты; bi – айнымалылар идентификаторлары, файлдарда да мәндер бір қатардан немесе келесі қатардан оқыла береді, сол себепті мұнда да операторлардың үш түрі де қолданылады.Файлдағы мәліметтер бір-бірінен «бос орын» не «енгізу» пернесі арқылы бөлінуі тиіс, яғни файлға әрбір мән енгізілгеннен кейін «_», ал қатар соңына «» таңбасы қойылады.

Мәліметтерді ЭЕМ есінен дисплей экранына басып шығаруға арналған шығару операторы write. Оператордың жазылу формасы:

Write (a1, a2, … , an);

Нақты және бүтін сандарды экранға шығару үшін write операторында оның форматын көрсетуге болады. Нақты сандар үшін формат екі бөліктен тұрады. Бірінші бөлікте санның таңбасымен қоса есептегенде оның алатын орнының саны, екінші бөлікте бөлшек бөлігінің алатын орыны көрсетіледі. Паскаль тілінде writeln параметрсіз шығару операторын қолдануға болады. Бұл оператордан кейін келетін параметрлі шығару операторы мәліметтерді жаңа жолына шығарады.

Нақыт сандар үшін оның жалпы енін, сонан соң бөлшегі алатын орынды көрсету қажет, сол себепті аралас сандарды бейнелеуде оның ені қос нүктемен бөлінген екі бүтін сан арқылы жазылады. Мысалы, С=-145.7865 болғанда WRITE(C:8:3) операторы экранға –145.786 мәнін шығарады, мүндағы жалпы орындар саны – 8, ал бөлшек үш санмен бейнеленгендіктен соңғы бір сан жазылмай қалып отыр. С айнымалысының берілген мәнін толық бейнелеу үшін WRITE(C:9:4) операторын жазу керек еді. Жалпы нақты санды экранда бейнелеу операторының жазылу түрі:

WRITE(C:n:m);

Мұндағы n – C мәнінің бүтін бөлігіне белгіленген орын саны; m – C мәнінің бөлшек бөлігіне белгіленген орын саны. n-нің мәні таңбаны, бүтін мен бөлшекті бөлетін нүктені және бүтін сандар орнын бөлшекке қосып көрсететіндіктен, ол n>m+3 болуы тиіс. Экранға шығаратын сандардың арасында қалдырылатын бос орындар санын да осы жолмен көрсетуге болады. Ол үшүін екі апостроф жазып, одан кейін қос нүктемен бөлінген бүтін сан арқылы қалдырылатын бос орындар санын өрнектейміз. Мысалы:

WRITE(b:8:3, ‘ ‘: 4, c:12:4);

Мұндағы 4 – b мен с сандарының арасындағы бос орындар саны.



Мысалы:

PROGRAM A(input, output);

VAR

x, y, z:string[10];



a, b, c: real;

m, n: integer;

BEGIN

x:=’f’;


y:=’j’;

z:=’jan’;

a:=23.5;

b:=23.456789;

m:=1444;

n:=6785;


WRITE(x:2, y:2, z:4, a:5:2, b:9:6, m:6, n:5:0)

END.


Программа тақырыбындағы жақша ішіндегі екі сөз (input, output) керекті мәліметтер пернелерден енгізілетінін, ал нәтиже экранға шығарылатынын мәлімдейді. Паскальдың стандарты бұл екі сөзді жазуды міндетті түрде талап еткенімен Паскальда оларды жазбауға рұқсат етілген, сондықтан мысалдарда бұл параметрлерді көрсетпейміз. Енгізу және шығару операторлары іс жүзінде барлық программаларда қолданылады.
IV. Сызықты құрылым алгоритмдерін программалау
Қарапайым алгоритмдік құрылым операцияның сызықтық жүру реті болып табылады. Мұндай алгоритмдік құрылымның программалық жүзеге асуын сызықтық программа деп атайық. Сызықтық алгоритм және сызықтық программа қарапайым есептерді шешуге арналған. Онда бірнеше мүмкін альтернативалардың ішінен таңдауы және қандай да бір операциялардың циклдік қайталануы қарастырылмаған.

Мысалы: Герон формуласы бойынша а, в, с қабырғаларымен берілген үшбұрыштың ауданын есептеуге арналған программаны құру керек.

мұндағы

PROGRAM М 1 (input, output);

VAR A, B, C, P, T, HA, HB, HC:REAL;

BEGIN

READ(A, B,C);



P:=(A+B+C)/2;

T:=2*sqrt(p*(p-A)*(p-B)*(p-C));

HA:=T/A;

HB:=T/B;


HC:=T/C;

WRITELN(‘HA=’,HA);

WRITELN(‘HB=’,HB);

WRITELN(‘HC=’,HC);

READLN;

END.



Тексеру сұрақтары

  1. Оператор деген не?

  2. Операторды жазу форматы?

  3. айнымалыларға мәндер меншіктеу операторының жазылу форматы және оның қызметі?

  4. Ақпаратты енгізу деген не?

  5. Ақпаратты шығару деген не?

  6. Input және Output стандарттық операторларының қызметі?

  7. Мәндерді шығару процедурасын жазу форматы және оның қызметі?

  8. Ақпараттың форматты шығарылуы не үшін қолданылады?


Әдебиет: (1) бет. 29-61

6 апта



Тақырып 5. Шартсыз және шартты көшу операторлар және тармақталған құрылым алгоритмдерін программалау
Дәріс жоспары

  1. Құрамды оператор.

  2. Шартсыз көшу операторы.

  3. Шартты көшу операторы.

  4. case…of таңдау операторы.



Сабақ мақсаты

Білімділік


  • Студенттерге шартты және таңдау операторлары жайлы жалпы мағлұмат беру.

  • Шартты және таңдау операторларын жазу әдістерін көрсету.

  • Тармақталған құрылым алгоритмдерін программалауды үйрету.


Дамытушылық


  • Студенттердің операторларды қолдана отырып программалар құра алатынын қадағалау және өздігінен тапсырмаларды орындауы

  • Әрбір оператордың жазылу формасын білу.

  • Студенттердің қабілетін дамыту.

І. Шартты оператор
Паскаль тілінде тармақталудың негізгі алгоритмдік құрылымының жүзеге асыратын екі операторы бар. Олар шартты оператор және таңдау операторы.

Шартты оператор. «Иә» немесе «Жоқ» деп жауап беруге болатын белгілі бір логикалық шартты тексереді. Егер оның нәтижесі ақиқат, яғни құптарлық болса, онда бір программалық тармақ орындалады. Тексеру нәтижесі жалған болған жағдайда, программаның басқа бір тармағы жүзеге асырылады. Мұнда есептің шартына байланысты тармақталу алгоритмдерінің «Таңдау» не «Аттап өту» мүмкіндіктерінің бірі орындалуы тиіс. Бұл оператордың жазылу түрі төмендегі төрт үлгінің біріне сәйкес келуі қажет:

а) If <шарт> then <1-оператор>;

{шарт орындалмағанда <1-оператор>-ды аттап өту}

ә) If <шарт> then <1-оператор>else <2-оператор>;

{<1-оператор> және <2-оператор>-дың бірін таңдау}

б) If <шарт> then {шарт орындалғанда}

begin {құрмалас операторлар}

<1-оператор>; {орындалып, шарт орындал-}

<2-оператор> {маса, оларды аттап өту}



end;

в) If <шарт> then {шарттың орындалуы немесе}



begin {орындалмауына байланысты}

<1-оператор>; {құрмалас операторлардың}

<2-оператор>; {бірін таңдап, ал}

… {екіншісін аттап өту}


end


else

begin


;

;



end;

Мұндағы if – оператордың аты (егер); then – түйінді сөз (онда); else – түйінді сөз (әйтпесе); <шарт> - логикалық өрнек; <1-оператор>,..., , ,..., - кез келген орындалатын оператор.



Мысал 1:

Берілген a, b, c сандарының ең кішісін табу қажет болсын.




иә жоқ иә иә
жоқ жоқ

иә
жоқ
1.1-сурет
Есепті шешудің алғашқы тәсілінің блок-схемасы 1.1-суретте көрсетілген. Бұл тәсіл онша ықшам болмағанымен түсінуге ыңғайлы. Паскаль тілінің мүмкіндіктерін толық көрсету үшін осы алгоритмнің басқа жолдары да түсіндірілген.

2-блок пернелер тақтасынан кез келген үш санды енгізу жұмысын атқарады. 3-, 4- және 5-блоктар шарттарды тексере отырып, ең кіші санды анықтайды. 6-дан 9-блокқа дейін min айнымалысына ең кіші мән меншіктеледі. 10-блок нәтижені экранға шығарып, 11-блок тағы да үш сан енгізу қажет болған жағдайда, «Y» (Yes-Иә) немесе алгоритм жұмысын аяқтау үшін «N» (No-Жоқ) әріптерін енгізуді өтінеді. Келесі блок енгізілген t айнымалысының мәнін тексеріп, қажет болса алгоритмді қайта орындайды. Осы блок-схемаға сәйкес келетін программа мәтіні төменде көрсетілген:

Program min (input, output);

Label 10;

Var a, b, c, min: real;

t: char;


begin

10:write(‘бос орындармен бөлінген 3 сан енгізіңіз:’);

readln(a, b, c);

if a

if a

else min:=c

else

if b>c then min:=b



else min:=c;

writeln(‘Ең кіші сан:’, min:8:2);

write(‘Тағы енгізесіз бе? («Yes»-иә, «No»-жоқ)’);

readln(t);

if (t=’Y’) or (t=’y’) then goto 10

end.


Осы есепті шығарудың мұнан гөрі қысқалау екінші тәсілі 1.2-суретте көрсетілген Бұл схемаға сәйкес программа мәтіні төмендегідей болады:

Program min (input, output);

Label 10;

Var a, b, c, min: real;

t: integer;

begin

10:write(‘a, b, c=’); readln(a, b, c);



{3 санды енгізy}

if a

if c

Writeln(‘үш санның кішісі:’,min:6:2);

Write ('тағы енгізесіз бе? (1-иә,

0-жоқ)’);

Read(t); if t=1 then goto 10

End.

1.2-сурет

Программаның ең ықшам түрі төмендегідей болады:

Program min;

Label 10; Var a, b, c, min: real; t: integer;

begin

10:write(‘a, b, c='); readln(a, b, c); {3 сан енгізy}



min:=a;

if b

writeln(‘үш санның кішісі:’, min:6:2);

end.
Мысал 2: Санды кез келген бүтін оң дәрежеге (n) шығаратын программа құру қажет. Бұл есепті де бірнеше тәсілмен шығаруға болады.

Бірінші тәсіл:

Program stepen;

Label 10, 20;

Var n,i: integer;

a, p: real;

begin


write(‘санды және бүтін оң дәрежені енгізіңіз’);

readln(a, n);

p:=1; i:=1;

if n=0 then goto 10;

20: p:=p*a; i:=i+1;

if i<=n then goto 20;

10:writeln(a:8:3, n:4, ‘дәреже’,`````p:12:4)

end.


Екінші тәсіл (1.3-сурет):

Program stepen;

Label 10;

Var n,i: integer;

a, p: real;

begin


write(‘a санын енгізіңіз:’); readln(a); 1.3-сурет

write(‘n оң бүтін дәрежені енгізіңіз:’); readln(n);

p:=1; i:=1;

10: if i<=0 then

begin

p:=p*a; i:=i+1; goto 10



end;

writeln(‘p=’, p:8:3)

end.

Енді n оң не теріс бүтін сан болған жағдайды, яғни үшінші тәсілді қарастырайық.



Program stepen;

Label 10, 20, 30;

Var n,i: integer; a, p: real;

begin


write(‘a,n=’); readln(a, n);

p:=1; i:=1;

if n>=0 then

begin


if n>0 then

begin


10: p:=p*a; i:=i+1;

if i<=n then goto 10

end

else goto 30



end

else


begin

20: p:=p/a; i:=i+1;

if i<=abs(n) then goto 20

end;


30: writeln(‘p=’, p:8:3)

end.
ІІ. Таңдау операторы


Таңдау операторы (case) бірнеше операторлардың ішінен таңдау жолымен көп тарамды тармақталуды ұйымдастырады. Тармақталу берілген шартты тексеруден басталады, шарт мәндері таңдап алынған типтердің бірі болатын бүтін, символдық, логикалық өрнек түрінде жазылады. Бұл өрнек оператор орындалар кезде белгілі бір мәнге ие болуы тиіс. Сол мән оған байланысты орындалатын оператордың белгісі рөлін атқарады. Егер өрнектің есептелген мәні көрсетілген мәннің біріне сәйкес келсе, сол қатардағы оператор орындалады. Жазылу форматы

Case <өрнек> of

C1: <1-оператор>;

C2: <2-оператор>;

...

CN: ;



[else ]

END;


мұндағы <өрнек>-тексерілетін шарт не таңдау индексі; С1,..., CN-тұрақтылар, яғни өрнектің мүмкін мәндері; <1-оператор>, <2-оператор>,..., -тілдің кез келген операторлары; -өрнектің мәні көрсетілген мәндерден басқаша болғанда орындалатын тілдің кез келген операторы. Тік жақшаның ішіндегі сөз тіркесі болмауы да мүмкін, ондай жағдайда, яғни өрнектің мәні көрсетілген тұрақтылардың ешбір мәніне сәйкес келмесе, операторды орындау бірден аяқталады. Сонымен, таңдау операторы селектор мен тұрақты мәндерінің сәйкес келуіне байланысты бір ғана операторды орындауы тиіс. Кейде өрнектің мәні тұрақтының көрсетілген мәндерінің аралығында болуы ықтимал, мұндайда тұрақтының мәні кесінді тәрізді сандар бірлігін қамтуы тиіс.

Мысал 1:

PROGRAM DAY;

VAR kyn: integer; {Бұл программада бірден}

BEGIN {жетіге дейінгі кез келген}

Read(kyn); { сан енгізіліп, егер ол}

Case kyn of

1: Writeln(‘дүйсенбі’); {1-ге тең болса, “дүйсенбі”}

2: Writeln(‘сейсенбі’); {2-ге тең болса, “сейсенбі”}

3: Writeln(‘сәрсенбі’); {3-ке тең болса, “сәрсенбі”}

4: Writeln(‘бейсенбі’); {4-ке тең болса, “бейсенбі”}

5: Writeln(‘жұма’); {5-ке тең болса, “жұма”}

6: Writeln(‘сенбі’); {6-ға тең болса, “сенбі”}

7: Writeln(‘жексенбі’); {7-ге тең болса, “жексенбі”}

end {деген сөз жазылып шығады}

END.
Мысал 2. Келесі программада 1917 жылдан 1992 жылға дейінгі сандар енгізіліп, сол жылдары бұрынғы КСРО-да кімнің ел басқарғаны анықталды. Мұнда өрнектің мәні белгілі бір кесіндіге кіретін сан болатыны тексеріліп, сол арқылы бір оператор таңдап алынып отыр.

PROGRAM god;

VAR god: integer;

BEGIN


Write(‘жыл мөлшерін енгізіңіз:’);

Readln(god);

Write(god:4, ‘жылы’);

Case god of

1917..1924: Writeln(‘Ленин басқарды’);

1925..1953: Writeln(‘Сталин басқарды’);

1954..1956: Writeln(‘Маленков басқарды’);

1957..1964: Writeln(‘Хрущев басқарды’);

1965..1985: Writeln(‘Брежнев басқарды’);

1985..1991: Writeln(‘Горбачев басқарды’);

1991..1992: Writeln(‘Ельцин басқарды’)

end


END.

Мысал 3. Кез келген жыл мерзімін енгізіп, сол жылдың шығыс каленьдары (қазақша жыл санау) бойынша қай жануардың атына сәйкес келетінін анықтау программасы төмендегідей болады:

PROGRAM gil;

VAR

gil: integer;



BEGIN

Write(‘жыл мөлшерін енгізіңіз:’); readln(gil);

Write(gil:4, ‘жыл’);

Case (gil mod 12) of

0: write(‘мешін’);

1: write(‘тауық’);

2: write(‘ит’);

3: write(‘доңыз’);

4: write(‘тышқан’);

5: write(‘сиыр’);

6: write(‘барыс’);

7: write(‘қоян’);

8: write(‘ұлу’);

9: write(‘жылан’);

10: write(‘жылқы’);

11: write(‘қой’)

end;

writeln(‘жылы болды’)



END.
Мысал 4. Кез келген айдың бірінші жұлдызы аптаның қай күні екені белгілі болғанда, сол айдың енгізілген күнінің аптаның қандай күні болатынын анықтау керек.

PROGRAM casel;

Label 10;

Const k=1; {айдың бірі дүйсенбі болған}

{егер айдың бірі сейсенбі болса, k=2, егер айдың бірі сәрсенбі болса, k=3 т.с.с.}

VAR den, n: integer;

t: char;

BEGIN


10: write(‘айдың күнін енгізіңіз:’); readln (den);

n:=den mod 7+k-1; if n>7 then n:=n-7;

write(‘айдың’, den:3, ‘күні’);

CASE n of

1: write(‘дүйсенбі’);

2: write(‘сейсенбі’);

3: write(‘сәрсенбі’);

4: write(‘бейсенбі’);

5: write(‘жұма’);

6: write(‘сенбі’);

7: write(‘жексенбі’)

end;


writeln(‘болады’);

writeln(‘тағы енгізесіз бе? (иә-«у», жоқ-«n»)’);

readln(t);

if (t=’Y’) or (t=’y’) then goto 10

END.

ІІІ. Тармақталған құрылым алгоритмдерін программалау
Тармақталу операторына мысал келтірейін:

Квадрат теңдеуді шешу үшін арналған программаны құру (1.4-суретте блок-схемасы көрсетілген)

PROGRAM М1 (input, output);

VAR X1, X2, X, D, a, b, c:REAL;

BEGIN

WRITELN(‘a, b, c коэффициенттерін енгіз’);



READLN(A, B, C);

D:=SQR(B)-4*a*c;

IF D<0 THEN WRITELN(‘түбірі жоқ’);

IF D=0 THEN BEGIN

X:=(-b)\(2*A);

WRITELN(‘X=’,X);

END;

IF D>0 THEN BEGIN



X1:=(-b+SQRT(D))\(2*a);

X2:=(-b-SQRT(D))\(2*a);

WRITELN(‘X1=’,X1, ‘X1=’,X2);

END;

END.

жоқ иә


1.4-сурет

7 апта



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


План лекции

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

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

  3. Параметрмен берілген цикл операторлар


Сабақ мақсаты

Білімділік


  • Студенттерге программалау тілінің цикл операторы жайлы жалпы мағлұмат беру

  • Циклдік процестерді ұйымдастыру.

  • Операторлардың түрлерімен таныстыру.


Дамытушылық


  • Студенттердің цикл операторларын қолдана отырып, Паскаль тілінде программа құра алатынын қадағалау және өздігінен тапсырмаларды орындауы

  • Циклдік алгоритмдерін программалауға дағдылану

І. Шарты алдын – ала берілген цикл операторы

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

Паскаль тілінде цикл операторының үш түрі бар:


  1. шарты алдын-ала берілген цикл операторы

  2. шарты соңынан берілген цикл операторы

  3. параметрлі цикл операторы.

Құрамына басқа да операторлар кіретіндіктен цикл операторы күрделі операторы деп аталады.

Егер циклдің қанша ретқайталанатыны алдын-ала белгісіз болса, онда шарты алдын-ала берілген циклді пайдаланамыз.

Шарты алдын-ала берілген цикл операторының жазылу формасы:

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.

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

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

END.



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   12




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет