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

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




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

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

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

Мысалдар:

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 операторын қолданған шақта оның қатарына жүйелі жақша ішіне неліктен басқа қатарға көшу қажет екендігін түсіндіріп кету керек немесе шартты тексеріп көшу операторын пайдаланған абзал.

Бос оператор

Бос оператор ешқандай да әрекеттің орындалмайтынын көрсетеді, кейде 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

 

 

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

 

Дәріс жоспары

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

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

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

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

 

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

Білімділік

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

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

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

Дамытушылық

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

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

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

І. Шартты оператор

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

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

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

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

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

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

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

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

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

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

<n-оператор>

end;

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

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

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

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

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

 

<n-оператор>

end

else

begin

<n+1-оператор>;

<n+2-оператор>;

<n+k-оператор>

end;

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

 

 

Мысал 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<b then

if a<c then min:=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<b then min:=a else min:=b;

if c<min then min:=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<min then min:=b; if c<min then min:=c;

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: <n-оператор>;

[else <k-оператор>]

END;

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

Мысал 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-сурет

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

Білімділік

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

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

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

Дамытушылық

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

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

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

І. Шартты оператор

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

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

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

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

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

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

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

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

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

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

<n-оператор>

end;

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

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

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

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

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

 

<n-оператор>

end

else

begin

<n+1-оператор>;

<n+2-оператор>;

<n+k-оператор>

end;

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

 

 

Мысал 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<b then

if a<c then min:=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<b then min:=a else min:=b;

if c<min then min:=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<min then min:=b; if c<min then min:=c;

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: <n-оператор>;

[else <k-оператор>]

END;

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

Мысал 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-сурет

 

Өзін тексеру сұрақтары

1. Тармақталған алгоритмдеген не?

2. Метка (белгі) деген не? Меткалар қандай бөлімде сипатталады?

3. goto шартсыз көшу операторының жазылу форматы және қызметі?

4. if…then…else…шартты көшу операторының жазылу форматы және қызметі?

5. Қысқа форматта жазылған, шартты көшу операторы қалай жұмыс істейді?

6. Толық форматта жазылған шартты көшу операторы қалай жұмыс істейді?

7. Қарапайым оператор деген не?

8. Құрамды оператор деген не? Құрамды оператор не үшін қолданылады?

9. case… of… нұсқадағы оператордың жазылу форматы және қызметі?

 

Әдебиет: (1) стр. 61-71

Апта

 

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

 

 

Дәріс жоспары

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

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

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

 

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

Білімділік

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

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

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

Дамытушылық

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

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

Поделиться:





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





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



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