АЛГОРИТМДЕР ЖӘНЕ ДЕРЕКТЕР ҚҰРЫЛЫМЫ

Коммерциялық емес акционерлік қоғам

АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ

Ақпараттық жүйелер кафедрасы

 

 

АЛГОРИТМДЕР ЖӘНЕ ДЕРЕКТЕР ҚҰРЫЛЫМЫ

5В060200 – “Информатика” және 5В070300 – «Ақпараттық жүйелер» мамандықтарының студенттері үшін
зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар

 

 

Алматы 2013

 

Құрастырушы: С.Р. Рақымбергенов. Алгоритмдер және деректер құрылымы. 5В060200 – “Информатика” және 5В070300 – «Ақпараттық жүйелер» мамандықтарының барлық оқу түрінің  студенттері үшін зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар. – Алматы: АЭжБУ. – 36 бет.

 

     Әдістемелік нұсқауларда ұсынылып отырған жұмыстар 5В060200 –“Информатика” және 5В070300 – «Ақпараттық жүйелер» мамандықтарының «Алгоритмдер және деректер құрылымы» пәнінің оқу материалын мазмұны жағынан толық қамтыған зертханалық жұмыстар келтірілген. Олар мамандарға қойылған квалификациялық талаптарға, Мемлекеттік стандартқа, зертханалық жұмыстарды жүргізудің педагогика-психологиялық негіздеріне сәйкес құрастырылған. Ұсынылған жұмыстар Паскаль программалау тілінің есептерін шешуге арналған.

     Зертханалық жұмыстарға дайындалған әдістемелік нұсқаулар 5В060200 – “Информатика” және 5В070300 – «Ақпараттық жүйелер» мамандықтарының барлық оқу түрінің  студенттеріне арналған. Оларды өзге мамандықтарда оқылатын мазмұны жағынан ұқсас пәндерде де пайдалануға болады.

     Без. 3, әдеб. көрсеткіші – 10 атау.

 

     Пікір беруші: тех. ғыл. канд., О.Е. Елеуқұлов

 

     “Алматы энергетика және байланыс университеті” коммерциялық емес акционерлік қоғамының 2012 ж. басылым жоспары бойынша шығарылады.

 

     ©  “Алматы энергетика және байланыс университеті” КЕАҚ, 2013 ж.

 

Кіріспе

 

          Әдістемелік нұсқауларда ұсынылып отырған жұмыстар 5В060200 –“Информатика” және 5В070300 – «Ақпараттық жүйелер» мамандықтарының «Алгоритмдер және деректер құрылымы» пәнінің оқу материалын мазмұны жағынан толық қамтыған зертханалық жұмыстар келтірілген. Олар мамандарға қойылған квалификациялық талаптарға, Мемлекеттік стандартқа, зертханалық жұмыстарды жүргізудің педагогик-психологиялық негіздеріне сәйкес құрастырылған. Ұсынылған жұмыстар Паскаль программалау тілінің есептерін шешуге арналған.

Зертханалық жұмыстарға дайындалған әдістемелік нұсқаулар 5В060200 – “Информатика” және 5В070300 – «Ақпараттық жүйелер» мамандықтарының барлық оқу түрінің  студенттеріне арналған. Оларды өзге мамандықтарда оқылатын мазмұны жағынан ұқсас пәндерде де пайдалануға болады.

Оқу-әдістемелік нұсқау пәнге қысқаша түсініктеме беруден, дәрістік материалдардан, практикалық сабақты өткізу әдістемесінен, зертханалық жұмыстар тапсырмаларынан тұрады. Мұнда пән бойынша тақырыптар толық қамтылып, әрбір тақырыпқа теориялық және сондай-ақ практикалық түсінік берілген.

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

Әдістемелік нұсқауда жеті зертханалық жұмыстар кетірілген:

     - арифметикалық операциялар;

     - циклдық операторлар;

     - бірөлщемді массивтер;

     - екіөлшемді массивтер;

     - қатарлық айнымалылар;

     - жазбалар мен файлдар;

     - процедуралар  мен функциялар.

 

1 Зертханалық жұмыс №1

 

1.1 Арифметикалық операциялар. IF шартты операторы

 

Алгоритмдерді компьютерде орындау үшін оларды алдын ала жазып алу керек, яғни ол белгілі бір заңдылықпен өрнектелуі тиіс. Жалпы алгоритмді өрнектеу түрлеріне:

1) табиғи тіл арқылы жазу;

2) белгілі бір түйінді сөздер – терминдер (псевдокодтар – жалған кодтар) арқылы қысқаша тізбекті түрде жазу, мұны қарапайым алгоритмдік тіл деп те айтады;

3) график жолымен (блок-схема арқылы) жазу;

4) программалау тілдерінде жазу жолдарын жатқызуға болады.

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

Алгоритмдерді график жолымен жазу, онан кейін оны программалау тілін­дегі программаға айналдыру істері мемлекеттік стандартпен бекітіліп ақпа­рат өңдеу жұмысында кеңінен қолданылып келеді.

Сонымен, прог­раммалау тілдері есептерді шығару жолын баяндау-өрнектеу үлгісі, белгілі бір проблеманы шешу негізінде орындалатын әре­кеттерге бас­шылық, ой еңбегін үнемдеуге мүмкіндік беретін әдіс, есеп шешімін табу­ды автоматтандыруға қажетті іс-әрекет, жаңа проблеманы шешу кезінде қолданылатын тәсілдер, күрделі процестерді өрнектеу және математикалық дәлдікпен анық етіп жазу құралы бола алады.

Тұрмыста жиі кездесетін алгори­т­­м­дердің бір түріне есептегі белгілі бір шарттың орындалуына не орын­дал­мауына байланысты командалар тізбегінің тармақталып бірнеше жолдарға бөлінетін тобы жатады. Тармақталу алгорит­мі­н­де көбінесе арифметикалық теңсіздік (теңдік) түрінде берілген логикалық шарт тексеріледі. Егер ол орындалса, онда алгоритм бір жолмен, ал орындалмаса екінші жолмен жүзеге асырылады да, соңында екі тармақ  қайта бірігеді. Мұндай алгоритмдерде шартты тексеру тармақталу коман­дасы деп аталады. Оны алгор­итм­дік тілде өрнектегенде  егер, онда, әйтпесе, бітті түйінді сөз­дері пайдаланылады. Орындалу тәсіліне байланысты тармақ­талу командасы "таңдау" (толымды) және "аттап өту" (толымсыз) болып екі түрде кез­деседі.Тармақталу командасының толымды түрде өрнектелуі (1.1 суретті қара):

 

 

 

 

 

 

 

                                                     

            

Алгоритмді атқару үшін алдымен тармақталу команда­сының шарты тексе­ріледі. Шарт орындалған жағдайда онда және әйтпесе түйінді сөздерінің ара­сындағы 1-серия командалары орындалады. Ал шарт орындалмаған жағдайда әйтпесе және бітті түйінді сөздерінің арасындағы 2-серия командалары орындалады.

Тармақталу алгоритмі схемасының бұл түріне міндетті түрде шартты тексеру блогы кіреді. Ол ромб түрінде кескінделіп, басқа блоктармен 1 кіру және 2 шығу сызықтары арқылы байланысады. Тармақталу алгоритмдерінің толымды түрі екі серияның бірін ғана таңдауды іске асырады, мұнда берілген шарт тексеріледі, егер ол шарт орындалса (орындалуы анық, ақиқат болса), онда 1-серия жүзеге асырылып, содан кейін келесі амал­дар­ға көшеді. Ал, егерде шарт орындалмаса, яғни оның орындалу мүмкіндігі жалған болса, онда 2-серия атқарылып, содан кейін ғана алгоритм әрі қарай орындалады. Сонымен, шарттың ақиқат немесе жалған болуына байланысты 1-серия немесе 2-серия орындалады.

Тармақталу командасының толымсыз түрде өрнектелуі (1.2 суретті қара):

 

 

 

 

 

 

 

 

 

 

 

 

Алгоритм мұндай командадан құрылса, шарт орындалған жағдайда СЕРИЯ орындалады да, одан соң алгоритм атқарылуы ары қарай жалғастырылады. Шарт орындалмаса, онда бірде бір СЕРИЯ командалары орындал­май, "аттап өту" әрекеті атқарылады. Алгоритм схемасында да тармақталу кезеңінде шарт орындалса, алгоритм сериясы жүзеге асырылады да, ал шарт жалған болғанда, серия атталып өтеді.

Енді осыларға нақты мысалдар келтірейік.

1-мысал. Y  функциясын төмендегі формула бойынша есептеу керек.                           .

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

Бұдан кейін енгізілген мәннің оң немесе теріс екендігі үшін­ші шартты тексеру блогы арқылы айқындалады. Шарттың "ақи­қат" (иә) немесе "жалған" (жоқ) болуына байланысты тек 4- немесе 5-блоктардың бірі ғана орындалып, "таңдау" жүзеге асырылады. 6-блок енгізілген х айнымалысының және у функциясының сан­дық мәндерін экранға  немесе қағазға басып шығарады.

 

 

 

 

№1 зертханалық жұмысқа арналған тапсырмалар келтірілген есептерді х – аргументіне берілген мән бойынша y = f (x) функциясын есептеу программасын құру. Y = f (x) функциясы Паскаль тілінің ережелері бойынша есептеледі.

     1.

     2.

 

     3.

     4.

     5.

     6.

     7.                               

     8.

     9.

     10.

     11.

     12.

     13.

     14.

     15.

     16.  

     17.

     18.

     19.

     20.

Бақылау сұрақтары:

1) Паскаль-программада қолданылатын айнымалылардың типтерін атаңыз?

2)   Айнымалыларды баяндау бөлімі қандай бастапқы сөзбен басталады?

3) Паскаль-программаларда қандай математикалық функцияларды пайдалануға болады?

4)    Құрамдас оператор дегеніміз не?

5)    IF шартты операторының құрылымын келтіріңіз?

 

 

2 Зертханалық жұмыс № 2

 

2.1 Циклдық операторлар

 

Алгоритмдердің циклдық құрылымын программалау FOR, WHILE и REPEAT циклдық операторлары арқылы орындалады.

Бұл операторлар әрекетті бір рет орындауға ғана арналған. Мұндай операторлардың көмегімен қарапайым есептеу әрекеттерін орындауға ғана мүмкіндік бар.

Мысалы: Y=1+2+3+4+. . .+n қатарындағы n санының қосындысын табу керек. Жоғарыда келтірілген операторлардың көмегімен біз тек n -ге тұрақты мән бергеннен кейін ғана оны есептей аламыз. Егер n алдын-ала тиянақталмаған болса не істей аламыз? Паскаль программа (. . .) көп нүкте ұғымын түсінбейді. Егер n тиянақталған болсын, бірақ оның мәні үлкен (50) делік. Егер мәні үлкен болса есептеу процесінің ұзаққа созылары сөзсіз.

1+2=3

3+4=7

. . .

. . .

. . .+50=X

Бұл екінші жағынан көп уақыт алады. Осындай ұзындықтарды жою үшін Паскаль жүйеде цикл операторларын қолдану қарастырылған.

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

1) FOR TO . . DO

2)WHILE . . DO

3)Repeat . . Until

FOR циклдық операторларының форматы:

FOR <цикл_параметрі>:=<бастапқы мән> TO <соңғы мән> DO <оператор>.

FOR, TO, DO- қордағы сөздер

 

 

 


   үшін,          дейін, орындау – деген мағыналарды білдіреді.

<цикл_параметрі> - Integer типті параметр.

<оператор> - Паскальдағы еркін енгізілген оператор.

FOR  операторын орындауда алдымен <бастапқы мән>есептеледі де, <цикл параметрі>:=<басты мән>.

<цикл параметрі> -не  меншіктеледі. Содан соң цикл қайталанады;

<цикл параметрі>:= <соңғы мән>; егер шарт орындалмаса FOR өз жұмысын аяқтайды.

<оператор> жұмысы орындалады.

<цикл параметрі> 1-ге ұлғайып отырады.

Мысалы: 1+2+…+n

S:=0;

For i:=1 to n do

S:=S+I;

Ерекшеліктер: FOR операторы орындайтын шарт <оператор> операторының алдында тексеріледі. Егер шарт FOR операторы жұмысының басында орындалмаса, онда жұмыс нәтижесіз болмақ.

Цикл параметрінің қадамы тұрақты, үнемі 1-ге (+1) ұлғайып отырады.

Оператордың екінші түрі:

FOR <цикл параметрі>:=<бастапқы мән> DOWNTO <соңғы мән> DO

<оператор>.

Мұнда қадам (-1)-ге тең.

Басқару шарты <цикл параметрі>:=<соңғы мән>.

Мысалы: оң және теріс сандарды қосу.

S:=0;

If  n1>= -1 downto n do

S:=S+I;

DOWNTO - азайтылу деген мағынаны білдіреді.

Егер i-цикл параметрі n1-ден бастап n2-ге дейін кемуге тиісті жағдайда FOR мынадай Мысалмен көрініс табады;

FOR j:=7 DOWNTO 1 DO

Q:=q+a[8-j,j];

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

Алдын ала тексеру шарты WHILE форматы:

 

WHILE <шарт> DO <оператор>

 

 


әзірге                            орындау

 

<шарт>- логикалық тип;

<оператор>- еркін оператор.

Егер <шарт>=TRUE болса, онда <оператор> орындалады да, шарт қайталанады. Егер <шарт>=FALSE болса, онда WHILE операторы жұмысын аяқтайды да, программаның орындалу бағыты цикл денесінен кейінгі орналасқан нұсқауға ауысады.

Мысалы:

I:=1; {меншіктеу нұсқаулары}

X:=0.1;

While X:=2.0 DO

BEGIN

Y[i]:=X-sin(X);

i:=i+1;

X:=X+0.1;

END.

X<2 болса, қайталану орындалады.

Бұл қайталау операторы қайталаудың саны белгісіз болған жағдайда қолданылады.

Келесі шарт бойынша орындалатын цикл операторы:

REPEAT . ...........UNTIL

 

 

Қайталау              осы шарт орындалғанша

 

<цикл денесі> операторы ең болмағанда бір рет орындалуы керек. Содан соң ғана <шарт> есептеледі. Егер мән =FALSE болса, онда <цикл денесі> операторы қайталанады, егер мән =TRUE болса, онда REPEAT . . .UNTІL операторы жұмысын аяқтайды. UNTІL түйінді сөзінің алдындағы оператор соңына (;) нүктелі үтір қою міндетті емес.

Анықталған өрнектердің жиынында белгіленген конструкцияларға сәйкес программаларды жазудың келесі принциптері құрылымдық программалаудың негізін құрайды.

1-қағида. Кез келген Паскаль программасы негізгі үш конструкция көмегімен құрылады:

а) тізбек;

б) тармақталу;

в) қайталау.

2-қағида. Кез келген программа берілген есептің нәтижесін табуға керекті нұсқаулар жиыны (бастапқы деңгей) ретінде қарастырылады. Программалаудың келесі сатысы - осы жобаны нақтылау қадамдарынан тұрады. Жоба бірнеше ішкі бөлімдерге бөлініп (1-ші деңгей), әрбір ішкі бөлімдер әрі қарай нақтылана берілуі мүмкін (2-ші деңгей).

а) Тізбек –программа құрылымының негізгі конструкциясы, ол бір немесе бірнеше функционалдық блоктардан тұрады. Әрбір функционалдық блок –оператор немесе белгілі бір басқа функционалдық блок болуы мүмкін. Тізбек констукциясының схемасы:

P1 P2 . . . PM.

Мұндағы, P1, P2, . . . PM - функционалдық блоктар.

BEGIN P1; P2; . . . PM END;

б) Тармақталу конструкциясы екі немесе одан да көп функционалдық блоктардың. Берілген шартқа сәйкес таңдап орындалуына ұйымдастыру үшін керек.

Тармақталу конструкциясының екі түрі бар:

 

 


1)

 

 

 

 
                                                        2)

 

 

 

 

 

 

1) Констукция түсіндірмесі:

(B) логикалық шарт = TRUE, онда Р1 блогы орындалады.

(B) логикалық шарт = FALSE, онда Р2 блогы орындалады.

2) Констукцияның түсіндірмесі:

(B) логикалық шарт = TRUE, онда Р1 блогы орындалады.

(B) логикалық шарт = FALSE, онда ешқандай амал орындалмайды.

Қайталану констукциясы –кейбір функционалдық блоктың қайта орындалуын ұйымдастырады. Оның үш түрі бар:

 

 


1)              FOR TO DO

 

 

 

 

 

 

 

 

I-цикл құруға қажетті айнымалы. <бастапқы мәннен>, <соңғы> мәнге дейін <қадамға> өсіп отырады да, P1-функциональдық блок қайталанып орындалады.

 

2) WHILE DO

 

 

 

 

 

 

3) REPEAT UNTIL

 

 

 

 

P1 функционалдық блок логикалық шарттың (B) мәні дұрыс болғанша қайталанып орындалады. Егер ең басында шарт бұрыс болса, онда P1функционалдық блок бір рет қана орындалады.

 

№2 зертханалық жұмысқа арналған тапсырмалар.

Берілген n - бүтін және x - нақты сандары үшін берілген өрнекті есептеу алгоритмінің блок-сұлбасын және программасын құру. Өрнектердің мәні циклдік операторлар көмегімен есептеледі. №11 тапсырмадан бастап өрнектерді есептеу берілген дәлдікпен жүргізіледі. Программа құру барысында әртүрлі циклдік операторларды қолдану қажет.

Есептің варианттары (№1ден №10 варианттар үшін берілген n мен x үшін өрнектерді есептеу):

1) ;                  2) ;   3);   4) ;

5);   6) ;    7) ;    8) ;

9);      10) .

 

№11ден №20 варианттар үшін берілген n мен e (e=10-6, берілген дәлдік) үшін қосындыларды есептеу

11) ;          12) ;       13);              14);

15) ;          16) ;            17) ;

18) ;     19) ;    20).

 

Бақылау сұрақтары:

1) Цикл деген не?

2) Циклды ұйымдастыруда қолданылатын қандай операторларды білесіз?

3) For to do операторының қолданылу мақсатын атаңыз?

4) While..do операторының жазылу форматын көрсетіңіз.

6)             Repeat..until шартты ұйымдастыру операторының басқаларынан айырмашылығы қандай?

 

3 Зертханалық жұмыс №3

 

3.1 Бір өлшемді массивтер

 

Мәліметтердің күрделі типтері қарапайым (скалярлы және шектелген) типтерден құралады. Күрделі типті айнымалылар және элементтерден (компоненттерден –құрастырушылардан) тұрады. Элементтер типі анықталған күрделі типтің негізгі типіне жатады. Паскаль тіліндегі күрделі типтер:

- массивтер;

- жазбалар;

- файлдар;

- жиындар ([ ]).

Массив дегеніміз –бірнеше  бір типті элементтер жиынын қамтитын объект.

Массивке тән сипаттамалар:

1) Массивтің әрбір компоненті анық белгіленуі керек және оған түрлі әрекеттер қолдануға мүмкіндік болуы керек;

2) Массив компоненттерінің саны оны баяндағанда анықталуы қажет және жұмыс барысында өзгермеуге тиіс.

Синтаксисі:

Массив типі: “ARRAY” [индекс] of <типі>

Массивті баяндағанда массивке кіретін сан толығымен берілуі керек және элементтер типі көрсетілуі қажет.

Массив –VAR тарауында, келесі түрде баяндалады:

VAR

a: ARRAY [Тип1, Тип2, . . . ТипN] OF Тип негізі;

Мұндағы:

a- массивтің идентификаторы (аты);

Тип1, Тип2, . . .ТипN –индекстер;

Тип негізі –массив элементтерінің негізгі типі.

Индекс саны N – массивтің өлшемін анықтайды. Индекстер типі –кез келген скалярлы тип (REAL типінен басқа) болуы мүмкін, олар бір –бірінен (,) үтір арқылы ажыратылып, квадрат жақшаға [ ] алынып жазылады.

Мысалы:

VAR

a: array [1. .10] of real;

b: array [0. .50] of real;

c: array [3. .4] of Boolean;

Программа денесінде массивті атауы арқылы пайдаланады.

A= [1, 2, 3, 4, 5] массив компоненттерін I индексімен белгілеп алсақ, I индексіне сәйкес A массивінің компонентін A[I] деп белгілеу қажет.

Массивті бір өлшемді және көп өлшемді деп жіктеуге болады.

Бір өлшемді массивтің синтасисі былайша көрсетіледі:

Мысалы:

X [10]

X [I+J]

Y [қызыл]

Көп өлшемді массивтер синтаксисі былайша көрсетіледі:

VAR M: ARRAY [A . . B] OF ARRAY [C . . D] OF Tипі;

Бұл синтаксистің ыңғайлы жазылу формасы:

VAR M: ARRAY [A . . B, C . . D] OF Tипі;

Көп өлшемді массивті матрица түрінде қарастыруға болады.

Мысалы:

M [I, J];

I –баған,

J – қатар.

Олай болса I~i –қатарындағы M массивінің элементі;

J~j –қатарындағы M массивінің элементі.

Массивті басқа деректер құрылымы сияқты алдымен баяндау қажет. Баяндаудың екі түрі бар:

1) TYPE VEKTOR=ARRAY [1 . . 10] OF REAL;

Содан соң айнымалыны көрсету қажет:

VAR V: VEKTOR;

2) Типін анықтамай-ақ тікелей де көрсетуге болады:

VAR V: ARRAY [1 . . 10] OF REAL;

Мысалы: 8*10 өлшемді матрицаны баяндау:

VAR MATRIX: ARRAY [1 . . 8, 1 . . 10] OF REAL.

Сонымен қатар массивті баяндағанда символдық тұрақтыларды қолдануға да болады.

Мысалы: const N=8, M=10, онда

VAR MATRIX : ARRAY [1 . . N, 1 . . M] OF REAL;

. . .

FOR I:=1 TO N DO;

FOR J:=1 TO M DO;

BEGIN

<элементтерді өңдеу>

END.

Мысалы: const n=10, m=20.

TYPE macc 1= ARRAY [1 . . 10] of  REAL;

Macc 2= ARRAY [1 . . n, 1 . . m] of  BOOLEAN;

VAR a, b, c: macc 1;

d, e: macc 2;

Векторды (бір өлшемді массивті) енгізу процедурасы:

FOR I:= 1 TO N

READ (A [i]) түрінде берілсе.

Мысалы: [1 2 -4 6 -7].

FOR I:=1 TO N

READLN (A[i]).

 

Матрицаны (екі өлшемді) енгізу процедурасы:

FOR I:=1 TO N

FOR J:=1 TO N DO

READ (A[I, J]) түрінде болмақ.

Шығару процедурасы.

Бір өлшемді массивті шығару процедурасы:

FOR I:= 1 TO N DO

WRITE (A[I] :6 :2);

Екі өлшемді массивті баспаға шығару:

FOR I:=1 TO N DO

BEGIN

FOR J:= 1 TO N DO

WRITE (A[I, J] :4);

WRITELN (A);

END.

түрінде болмақ.

 

 

№3 зертханалық жұмысқа арналған тапсырмалар.

Бір өлшемді массивтерді өңдеу есебін шешу алгоритмінің блок-сұлбасын және программасын құру. Берілген есептерді программалау кезінде әртүрлі циклдік операторларды қолдану ұсынылады.

Есептің варианттары:

1)    А(10) массиві берілген. Бірінші нөл элементіне дейінгі оң элементтердің қосындысы мен санын табу.

2)    А(20) массиві берілген. Массивтің ең үлкен және ең кіші элементін және олардың реттік нөмірін табу.

3)    А(15) массиві берілген. Массивтің тақ позициясында орналасқан ең кіші элементті тауып, сонымен қатар ең кіші элементтен кейінгі, нөлге тең емес элеметтердің көбейтіндісін және санын табу.

4)    А(30) массиві берілген. Массивтің ең үлкен және ең кіші элементі арасында тұрған оң элементтердің қосындысы мен санын табу.

5)    Егер А(30) массивінде В-ға тең элемент болса, онда Х айнымалысына бірінші кездескен осы элементке дейінгі барлық жұп оң сандардың қосындысын меншіктеу, әйтпесе Х айнымалысына 0 меншіктеу.

6)         Егер А(20) массивінде соңғы элементтің квадратына тең элемент бар болса, онда осы элементтен кейінгі элементтерді квадраттау, кері жағдайда массивті өзгеріссіз шығару.

7)         Егер В(40) массивінің элементтері өсу ретімен болса, Х айнымалысына 1 меншіктеу, қарсы жағдайда 0 мәнін меншіктеу.

8)         А(10) массиві берілген. Массивтің ең үлкен элементін тауып, одан кейінгі элементтерді кему ретімен реттеу.

9)         Берілген екі массив элементтерінен үшінші массив құрылады: басында бірінші массив элементтері, ал соңында екінші массив элменттері.

10)     Берілген екі массивтің сәйкес элементтерінің ең үлкенінен тұратын үшінші массив құру.

11)     В(20) және С(30) массивтерінің элементтерінен А (50) реттелген массивін құру. В(20) және С(30) массивтері алдын-ала өсу ретімен реттелген.

12)     А (40) массиві берілген. Массивтің элементтерін кему ретімен реттеу.

13)     А (50) массиві берілген. Жұп позицияда тұрған теріс элементтердің санын және тақ позицияда тұрған оң элементтердің қосындысын табу.

14)     А (50) массиві берілген. Әр бесінші элементтің бесінші дәрежесін шығару.

15)     А (20) массиві берілген. Массивтің ең үлкен элементін тауып, сол элементке дейін тұрған элементтерді кему ретімен орналастыру.

16)     А (30) массиві берілген. Егер массив элементтерінің ішінде белгілі бір М санына тең элемент болса, онда осы санға дейін орналасқан нөл емес элементтердің көбейтіндісін тауып, Х айнымалысына меншіктеу, ал егер ондай сан болмаса Х айнымалысына 0 меншіктеу.

17)     Бірінші нөл элементіне дейінгі элементтердің қосындысы мен санын табу.

18)     А (50) массиві берілген. Бірінші нөлге тең  элементке дейінгі оң және тақ элементтердің қосындысы мен санын табу.

19)     А (50) массиві берілген. Ең көп қатар тұрған оң тақ элементтердің санын табу.

20)     А (40) массиві берілген. Жұп позицияда тұрған теріс сандарды реттеп жазу.

 

Бақылау сұрақтары:

1)    WHILE және REPEAT циклдық операторларының қандай ерекшеліктері бар?

2)    Қандай жағдайда WHILE циклдық операторы шексіз болып табылады?

3)    Қандай жағдайларда міндетті түрде TYPE бөлімінде мәліметтерді баяндау қажет етіледі?

4)    Бірөлшемді массивтерді іріктеу әдістерін атаңыз.

5)    Бірөлшемді массивтерді іріктеуде қанша циклдық операторларды пайдалануға болады?

4 Зертханалық жұмыс №4

 

4.1 Екіөлшемді массивтер

 

Массивтерге байланысты мәліметтерді Зертханалық жұмыс №3 - тен

қараңыз.

 

№4 зертханалық жұмысқа арналған тапсырмалар.

Екі өлшемді массив қолданылатын есептерді шешудің алгоритмінің блок-сұлбасын және программасын құру. Берілген есептерді программалау кезінде әртүрлі циклдік операторларды қолдану ұсынылады.

Есептің варианттары:

                 1)       A [5,5] массиві берілген. Массивтің тақ жолында орналасқан элементтердің арасындағы ең кіші элементті табу.

                 2)       A [6,6] массиві берілген. Егер массив элементтерінің ішінде белгілі бір В санына тең элемент болса, онда осы санның сол жағында орналасқан оң элементтердің қосындысын тауып, Х айнымалысына меншіктеу, ал егер ондай сан болмаса Х айнымалысына 0 меншікте.

                 3)       A [5,5] массиві берілген. Келесі ережемен В(5) массивін тұрғызу: А массивінің J бағанындағы кіші элементті B(J) –ға меншікте.

                 4)       A [7,7] массиві берілген. Бас диагональдің үстінде жатқан жұп оң элементтердің көбейтіндісі мен қосындысын табу.

                 5)       A [6,6] массиві берілген. Жолдың оң элементтерінің қосындысын тауып, қосымша диагональдің сәйкес элементтеріне меншіктеу.

                 6)       A [5,5] массиві берілген. Келесі ережемен В(5) массивін тұрғызу: егер I жолында ең болмағанда бір теріс элемент болса, онда B(I)-ға 1 санын меншіктеу, кері жағдайда B(I)-ға 0 меншіктеу.

                 7)       A [6,6] массиві берілген. Келесі ережемен В(6) массивін тұрғызу: егер А массивінің I жолындағы нөл емес элементтердің саны нөл элементтерінің санынан көп болса, онда B(I)-ға 1 санын меншіктеу, кері жағдайда B(I)-ға 0 меншіктеу.

                 8)       A [8,8] массиві берілген. Қосымша диагональдің үстінде жатқан элементтердің ең үлкенін табу. Қиылысында ең үлкен элемент тұрған жол және баған элементтерінің орнын ауыстыру.

                 9)       A [7,7] массиві берілген. Келесі ережемен В(7) массивін тұрғызу: егер А массивінің I жолындағы элементтер өсу ретімен орналасса, онда B(I)-ға 1 санын меншіктеу, кері жағдайда B(I)-ға 0 меншіктеу.

               10)     A [6,6] массиві берілген. Келесі ережемен В(6) массивін тұрғызу: В(1) –ге бас диагональдің нөл элементтерінің санын меншіктеу, В(2)-ге бас диагональдің үстіндегі параллель диагональдің нөл элементтерінің санын меншіктеу.

               11)     A [5,5] массиві берілген. Қосымша диагональға параллель диагональдардың оң сандарының кіші қосындысын табу.

               12)     A [6,6] массиві берілген. Әр жолдың ең үлкен элементін және әр бағанның ең кіші элементін табу. Табылған элементтердің сәйкес жолдары мен бағандарының орнын ауыстыру.

               13)     A [7,7] массиві берілген. Массив элементтерін жол бойынша өсу ретімен орналастыру.

               14)     A [6,6] массиві берілген. Бір реттен көп қайталанатын элементтердің ішінен ең үлкен элементін табу.

               15)     A [8,8] массиві берілген. Массивтің әр бағанындағы максимумды табу;

               16)     A [7,7] массиві берілген. Сәйкес элементтері бар бағандардың санын табу.

               17)     A [8,8] массиві берілген. Өсу бойынша немесе кему бойынша орналасқан жол элементтерінің ішінен ең үлкен элементті табу.

               18)     A [7,7] массиві берілген. Массивтің жолындағы үлкен элементтен бастап, кему ретімен орналастырып шығару.

               19)     A [8,8] массиві берілген. Бас диагональге параллель диагональдің нөл емес элементтерінің көбейтіндісін табу.

               20)     A [7,7] массиві берілген. Бас және қосымша диагональда орналасқан элементтердің ең үлкенін тауып, оны осы диагональдің қиылысындағы элементпен алмастыру.

 

Бақылау сұрақтары:

1) Қандай жағдайларда міндетті түрде TYPE бөлімінде мәліметтерді баяндау қажет етіледі?

2) Екіөлшемді массивтерді жолдары бойынша іріктеуде қанша циклдық операторларды пайдалануға болады?

3) Екіөлшемді массивтерді бағаналары бойынша іріктеуде қанша циклдық операторларды пайдалануға болады?

4) Екіөлшемді массивтерді жолдары бойынша монитор экранына шығару үшін қанша циклдық операторларды пайдалануға болады?

5) Екі матрицаны бір-біріне көбейту үшін бірінің ішіне бірі салынған циклдық операторларды ұйымдастырыңыз.

 

 

5 Зертханалық жұмыс №5

 

5.1 Қатарлық айнымалылар

 

Символдық және қатарлық айнымалыларды баяндау. Қатармен жұмыста қолданылатын процедуралар мен функциялар. Қатарларды өңдеу.

Қатарлық тип (String) Турбо-Паскальда мәтіндерді өңдеу үшін кеңінен қолданылады.

Қатар дегеніміз – символдар тізбегі.  Қатардағы символдардың максимальды саны  (қатар ұзындығы деп те аталады) 1-ден 255-ке дейін өзгере алады.

Қатарлық типті айнымалыны Type типтерді баяндау бөлімінде немесе тікелей айнымалыларды баяндау бөлімінде де баяндауға болады.

Type

ТипАты=string[қатардың максимальды ұзындығы];

Var

Идентификатор,...: ТипАты;

Типті алдын-ала баяндамай-ақ қатарлық айнымалыны былай беруге болады:

Var

Идентификатор,...:string[қатардың max ұзындығы];

немесе

Var

Идентификатор,...string;

Егер қатардың максимальды ұзындығы көрсетілмесе, онда ол 255 байтқа тең.

Қатарлық деректерді программада сонымен қатар, тұрақтылар түрінде де қолдануға болады.

Мысалы:

Const

Str adress = ‘yl.Mira, 35’; {қатарлық тұрақты}

S adr: string[12]= ‘yl.Mira’;   {типтелген тұрақты, оны жәй айнымалы ретінде қолдануға болады}

Type str125=string[125]; {типін беріп баяндау}

Var Str1: str125;

St1:string; {ұзындығы жасырын түрде 255-ке тең}

St2, st3: string[50];

Strnazv: string[280]; /*Дұрыс емес, ұзындық 255-тен аспау керек*/

Турбо Паскальда қатар символдар массиві ретінде беріледі. N символды қатар үшін жадыдан n+1 байт орын бөлінеді.

N байт – қатар символдарын сақтауға, ал n+1 байт қатар ұзындығының мәнін беру үшін бөлінеді. Бұл қосымша байттың нөмірі 0-ге тең.

Қатардағы кез келген символға бір өлшемді массивтің элементі сияқты қатынас құруға болады.

Array[0..n] of char;

Қатардағы символдарға нөмірі бойынша (индексі) қатынас құрылады.

Қатарды енгізіп/шығару үшін readln(st1), writeln(st2) операторлары қолданылады.

Қатарды енгізген кезде ондағы символдар саны автоматты түрде анықталады да, нөлдік байт автоматты түрде толтырылады.

 

String типті деректермен орындалатын операциялар.

Қатынас операциялары: =, <>, >, <, >=, <=.  Бұлар екі қатарлық операндаларды  салыстырып, негізінен шартты тексеруде қолданылады. Қатарды салыстыру солдан оңға қарай, бірінші сәйкес емес символ кездескенге дейін жүргізіледі.

 

Мысалы,

Өрнек                                            Нәтиже

‘Иванов’=’ИвановИ.И.’                   false

Иванов’<’Иванов И.И. ‘                           true

‘program‘>’PROGRAM ‘                            true

Мұндай салыстыру тәсілі Лексикографиктік деп аталады.

Қатарлық деректерді салыстыру операциясы қатарлық массивін өңдеуде жиі қолданылады.

Мұндай массивтермен орындалатын маңызды әрекеттерге мыналар жатады:

- лексографиктік тәртіпте массивті сұрыптау;

- сұрыпталған массивтен деректерді жылдам іздеу;

- екі сұрыпталған массивті біріктіру.

Бұл тапсырмаларды шешуде сандық массивтегі алгоритм қолданылады, тек массив элементтерінің типін string деп белгілесе жеткілікті.

Қатарлық процедуралар мен функциялар system модулінде орналасқан, сондықтан оны қосудың қажеті жоқ.

 

Қатармен жұмыста қолданылатын стандартты функциялар мен процедуралар:

1) Length (str1) – str1 қатарының ұзындығын анықтайды, функция типі Integer.

Мысалы:

FAM:=’Оралбаев

Length (FAM)=8.

2) Concat  (S1,S2,..,Sn) – string типті функция. Қатарды тіркестіру үшін қолданылады.

Мысалы:  STR1:=concat (‘Ленин’,’град’);

STR1=Ленинград.

3) POS (SUBST,ST) – integer типті функция. ST қатарына кіретін SUBST жолының сол жақ шеттегі бірінші позициясын анықтайды да, позициялық нөмірін көрсетеді. Егер SUBST мәні ST мәніне кірмейтін болса, онда POS функциясының мәні 0-ге тең.

Мысалы: POS (‘да’,’правда’)=5  /*‘да’ бесінші орында тұр*/

4) Copy (ST,INDEX,COUNT) -  функция типі STRING.ST қатарынан COUNT символдарды INDEX нөмірлі символдан бастап көшіреді. Мысалы, Copy (‘издание’, 2,6)=’здание’

5) DELETE(ST,INDEX,COUNT) – процедура. INDEX- нөмірлі позициядан бастап COUNT символды өшіреді.

Мысалы, DELETE(‘алгоритм’, 1, 4)=’ритм

6) INSERT(SUBST,ST,INDEX)  - процедура. ST қатарына SUBST ішкі қатарды INDEX нөмірінен бастап қою.

Мысалы, INSERT(‘smab’, ‘соление’, 3)=’составление’

7) STR(STR1,A)-  функция. A мәнін қатарға түрлендіру.

8) VAL(ST,number,Code) – процедура. ST мәнін бүтін немесе нақты типті шамаға түрлендіріп, нәтижені number –ға жазады. Code—бүтін санды айнымалы.

Мысалы:

Program st;

Var str1,str2,str3,str: string;

Begin

Writeln(‘енгізу’);

Readln(str1);

Readln(str2);

Readln(str3);

Str:=concat(str1,str2,str3);

Writeln(str);

End.

Мысалы: а-дан басталатын сөздер санын анықтау керек.

Program st;

Var s: string; I, k:integer;

Begin

Writeln (‘S’);

Readln (S);

For I:=1 to length (s) do

If s[I]=’a’ then k:=k+1;

Writeln(k); end.

 

 

№5 зертханалық жұмысқа арналған тапсырмалар.

Символдар қатарын қолданатын есептерді шешудің алгоритмі мен программасын құру. Берілген есептерді программалау кезінде жоғарыда келтірілген символдар қатарын өңдеуге арналған стандартты процедуралар мен функцияларын қолдану ұсынылады.

1)    Символдар жолы берілген. “а” әрпінен басталатын сөздердің санын тауып, “а” әрпінен басталатын ең ұзын сөзді баспаға шығару.

2)    Символдар жолы берілген. Жолдарды түрлендіріп анықтау.

а) барлық леп белгілерін нүктемен; б) әр нүктені үш нүктемен ауыстырып, жолды түрлендіру.

3)    Символдар жолы берілген. Әрбір “*” символ өшіріп, “*”символынан басқа символдарды қайталау.

4)    Символдар жолы берілген. Әріп топтарының қанша рет қайталанатынын анықтау:

а) abc; б) aba.

5)    Символдар жолы берілген. Бірінші және соңғы символдары өзара сәйкес келетін сөздердің санын анықтау.

6)    Ішінде ең болмағанда бір нүктесі бар символдар жолы берілген. Бірінші кездескен нүктеге дейінгі үтірлердің бәрін өшіріп, нүктеден кейінгі “5” цифрын “+” белгісімен ауыстыру.

7)    Символдар жолы берілген. “я” әрпінен басталатын ең ұзын сөзді тауып, кері ретпен шығару.

8)    Символдар жолы берілген. Дауыссыз әріптен басталатын ең ұзын сөзді тауып, жолдағы ең соңғы сөзбен орынын ауыстырып шығару.

9)    Символдар жолы берілген. “а” әрпінен басталатын ең қысқа сөзді тауып, жолдағы ең бірінші сөзбен орынын ауыстырып шығару.

10)         Символдар жолы берілген. Жолдағы әріп емес символдардың бәрін өшіріп, кіші әріптерді сәйкес бас әріптермен ауыстыра отырып, түрлендіру.

11)         Символдар жолы берілген. (a, e, i, o, u) латын дауысты әріптері көп кездесетін барлық сөздерді табу.

12)         Мәтін берілген. Ең ұзын цифр тобын тауып, оны соңғы цифр тобымен ауыстыру.

13)         Мәтін берілген. “а”, “в” әріптері ең көп кездесетін сөздерді тауып, тексттен өшіру.

14)         Мәтін берілген. “а” әрпі  кемінде екі рет кездесетін сөздерді табу.

15)         Мәтін берілген. “9” санынан басталатын ең қысқа сөзді тауып, жолдағы ең бірінші сөзбен орынын ауыстырып шығару.

16)         Бос орындармен бөлінген мәтін берілген. “я” әрпінен басталып, “я” әрпінен аяқталатын сөзді тауып, мәтіннен өшіру.

17)         Бос орындармен бөлінген мәтін берілген. “я” әріпінен басталып, “я” әрпінен аяқталатын ең ұзын сөзді табу.

18)         Бос орындармен бөлінген цифр топтарынан тұратын текст берілген. “1” санынан басталып, “1” санынан аяқталатын ең ұзын цифр тобын тауып, бірінші цифр тобымен алмастыру.

19)         Мәтін  берілген. Мәтіннің  алғашқы үш сөзінде “р” қанша рет қайталанатынын табу.

20)         Мәтін берілген. Егер мәтінде “*” символы болмаса, тексті өзгеріссіз қалдыру, кері жағдайда “*” символына дейін орналасқан кіші латын әріптерін “5” цифрымен алмастыру.

 

Бақылау сұрақтары:

1)    CASE операторында таңдау белгісінің типі қай типке жатуы мүмкін?

2)    Жолдарды біріктіру үшін стандартты процедуралар мен функциялардың қайсысы қолданылады?

3)    VAL стандартты процедурасы не үшін пайдаланылады?

4)    S жолының элементтерінің бас әріптерін сәйкесінше кіші әріпке айналдыратын функцияны атаңыз.

5)    А санының бүтін мәнін S жолына айналдыратын функцияны атаңыз.

6)    INSERT стандартты функциясы неге арналған?

 

 

6 Зертханалық жұмыс №6

 

6.1 Жазбалар мен файлдар

 

Мәндердің  үлкен көлемін өңдеу тапсырмаларын шешуде массив қолданылады. Дегенмен, массивпен жұмыс кезінде массив элементтері бір типке жату керек деген шектеу қойылады. Кей жағдайда түрлі типті деректерді өңдеп, сақтау қажеттілігі туындары сөзсіз. Ондай жағдайда сол элементтерді типтері бойынша жіктеп, жеке-жеке массив ретінде қарастыруға болады. Ал, олардың арасындағы сәйкестікті индекстердің көмегімен жүзеге асыруға болады. Осындай күрделі әрекеттерді қарапайым түрге келтіріп, жұмыста қолдануға болады. Ол үшін жазбалар қолданылады. Жазба дегеніміз -  бір немесе бірнеше типті компоненттердің тиянақталған санынан тұратын деректердің құрылымдық типі. Жазба компоненттері - өрістер деп аталады. Жазбаның компонентіне сілтеме жасау үшін, әр өріске берілген атқа сілтеме жасау қажет (массивтегідей нөміріне емес).

Жазбаны баяндау синтаксисі.

Алдымен жазба типі анықталады:

Type

ӨрісАты=record

ӨрісАты1: ӨрісТипі1;

ӨрісАты2: ӨрісТипі2;

....

ӨрісАтыN: ӨрісТипіN;

End;

Сонан соң сәйкес типтің айнымалылары баяндалады:

Var

Айнымалы Аты: ТипАты;

Мысалы,

Type auto = record
           number: integer ;          
{автомобиль нөмірі}

Marka: string[20];         {автомобиль маркасы}

Fio: string[40];              {автомобиль иесінің аты-жөні}

Address: string[60];       {автомобиль иесінің адресі}

End;

Var m,v:auto;

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

Const car:auto=(number:1000; marka: ‘volga’; fio: ‘Ivanov I.I.’; address: ‘yl. Lenina, d.1, kb.9’);

Жазба өрісінің мәндерін өрнекте қолдануға болады. Өріс мәндеріне қатынас айнымалы атымен және нүктемен (.) бөлінген өріс атының көмегімен жүзеге асырылады. Мұндай комбинация құрамдас атау деп аталады.

Мысалы, auto жазбасының өрістеріне қатынас құру үшін былай жазу керек:

m.number,

m.marka,

m.fio,

m.address.

Өрістерге мәндер меншіктеу үшін меншіктеу операторы қолданылады:

Мысалы,

m.number:=1964;

m.marka:=’Aydi-100’;

m.fio:= ‘Ivanov I.I.’;

m.address:= ‘yl. Lenina, d.1, kb.9’;

Құрамдас атауларды енгізу/шығару операторларында қолдануға болады.

Readln(m.number, m.marka, m.fio, m.address);

Write(m.number:4, m.marka:10, m.fio:13, m.address:23);

 

WITH операторы.

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

Синтаксисі:

WITH  <ЖазбаТиптіАйнымалы> do Оператор

Мұндағы, ЖазбаТипті Айнымалы – жазба типті (record) айнымалының атауы.

With, do – Паскаль тілінің түйінді сөзі.

S <Оператор> – Паскаль тілінің операторы (құрамдас оператор болуы да мүмкін).

With нұсқауын қолданғаннан кейін, s нұсқауының денсінде А жазбаның өрістерін енгізгенде, өріс идентификаторларының алдында А идентификаторы жазылмайды.

Мысалы: Баланың туған күнін, айын, жылын енгізу үшін мынадай жазба берілсін делік:

Z[son1].day:=11;

Z[son1].month:=May;

Z[son1].year:=1971;

With операторын қолданып, оны былайша жазуға болады:

With Z[son1] do

Begin

day:=11;

month:=May;

year:=1971;

end;

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

Мысалы:

With a do ...

With b do…..

немесе

With a,b do….

 

Таңдамалы өрісті жазбалар.

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

Кітап – қай қалада, қандай баспада.

Журнал – журнал аты, шығарылған мерзімі.

Паскаль тілінде жазбалардың құрамын құрайтын мәліметтер:

-   тұрақты өрістер бөлімі;

-   айнымалы өрісті бөлім. Осы екеуінен таңдамалы өрістер бөлімі құрылады.

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

Таңдамалы өрісті жазбаның синтаксисі:

Type

ТипАты=record

Тиянақты бөлім

Case БелгіӨрісі: ТипАты of

Таңдау Тұрақтысы1:(Өріс:Тип,...);

ТаңдауТұрақтысы2:(Өріс:Тип,...);

End;

Толығырақ қарастыратын болсақ, келесі түрде жазылады:

Type za_id=record

Id11, id12,…id1n1:тип_1;

Id21, id22,…id2n2:тип_2;

Idk1, idk2,…idkn1:тип_k;

Case N:Тип_өріс_белгісінің_типі of;

C1:(T11:тип11; Т12:Тип12...);

C2:(T21:тип21; Т22:Тип22...);

Cк:(Tк1:тип к1; Тк2:Тип к2...); end;

Мұндағы, TYPE, RECORD, CASE, END – түйінді сөздер;

Id11, id12,…idкNk – тұрақты өрістер бөлімін құрайтын элементтер (өрістер) идентификаторлары;

T11, Т12, Тк1, Тк2...- таңдамалы өрістер бөлімін құрайтын өрістер идентификаторлары;

N – CASE нұсқауының өріс белгісі;

тип_1,.. тип_к, тип11... Тип к2 – тұрақты және таңдамалы өрістер типтері;

C1,.. C2,.. Cк- таңдау тұрақтылары. N өріс белгісінің (айнымалы) типіне сәйкестелген.

za_id - жазба атауы.

 

Ескеру керек:

1)             Кез келген таңдамалы жазбада тек бір таңдамалы өріс болуы мүмкін (Case сөзінен басталып, End-пен аяқталады).

2)             Таңдамалы өрістер бөлімі – тұрақты өрістер бөлімінен кейін орналасады.

3)             Таңдамалы өрістер бөліміндегі өрістердің идентификаторлары тұрақты өрістер бөлімінде де, таңдамалы өрістер бөлімінде де қайталанбауы керек.

Мысалы,

TYPE әдебиет_түрі=(кітап, журнал);

әдебиет_дерегі= RECORD

автор:array[1..18] of char;

аты:array[1..35] of char;

баға: real;

case дерекәдебиет_түрі of

кітап: (қала: array[1..12] of char;

баспа:array[1..20] of char;

кітап_жылы:integer;

журнал:(журнал аты: array[1..15] of char;

мерзімі:integer; end;

Осы әдебиеттер тізбегі туралы массивтің бесінші элементіне кітап туралы жаңа мәліметтерді жазу үшін келесі нұсқауларды пайдалану керек:

Var әдебтізбек: array[1..10] of әдебдерегі;

Begin

With әдебтізбек [5] do

Begin

Автор: =’Перминов’;

Аты: =’програм.на языке Паскаль’;

дерек: =’кітап’;

қала: =’Москва’;

баспа: =’радио и связь’;

кітап жылы: =’1988’; end;

 

№6 зертханалық жұмысқа арналған тапсырмалар.

Жазба типтерін пайдаланып есептерді шешудің алгоритмі мен программасын жазу.

1)    Топтың студенттері туралы мәліметтер берілген: студенттің аты-жөні, студенттің туылған күні және туған жері. Студенттердің туған жылдарының кемуі бойынша топ тізімін шығару.

2)    Аттестация нәтижелері туралы мәліметтер берілген: студенттің аты-жөні, бес пәннің аты мен әр пәннен алған балдары. Барлық пәндерден аттестация алған студенттердің тізімін шығару.

3)    Алдыңғы есептегідей аттестация нәтижелері туралы мәліметтер берілген. Пәндерден аттестация алмаған студенттердің тізімін шығару.

4)    Кітапханаға түскен кітаптар туралы мәліметтер берілген: автордың аты-жөні, кітаптың аты, баспаның аты, шыққан жылы, кітаптың кітапханаға келіп түскен күні. “Мир” баспасынан шыққан, соңғы бес жылда кітапханаға келіп түскен кітаптар туралы мәліметтерді шығару.

5)    Сессия нәтижелері туралы мәліметтер берілген: студенттің аты-жөні, төрт пәннің аты мен әр пәннен алған бағалары. Жалпы баллдарының кемуі бойынша топ тізімін шығару.

6)    Алдыңғы есептің шарттары сақталады. Жалпы балдары максималды жалпы балдан 2 балға ғана айырмашылығы бар студенттердің тізімін шығару.

7)    Алдыңғы есептің шарттары сақталады. Балдары берілген пәннің орташа балынан 0,5 баллға жоғары студенттердің тізімін шығару.

8)    Экспорттық тауарлар туралы мәліметтер берілген: мемлекет аты, шетелдерге шығарылатын (импортталатын) тауар, тауар аты, келіп түскен партияның данасы. Берілген экспортталатын тауар бойынша мемлекет атын, экспорттың жалпы көлемін табу.

9)    Алдыңғы есептің шарттары сақталады. Берілген экспортталатын тауар көлемінің кемуі бойынша экспортталатын тауар тізімін шығару.

10)         Алдыңғы есептің шарттары сақталады. Берілген мемлекет бойынша экспортталатын тауар туралы мәліметтер шығару.

11)         Топ студенттері туралы мәліметтер берілген: студенттің аты-жөні, топ аты, студенттің туған жылы. Ағымдағы фамилиялары бірдей студенттер тізімін шығару.

12)         Алдыңғы есептің шарттары сақталады. Берілген топтағы фамилиялары бірдей студенттер тізімін шығару.

13)         Фирма қызметтері туралы мәліметтер берілген: қызметкердің аты-жөні, туған жылы, мекен- жайы, телефон нөмірі. Жастары қызметкерлердің орташа жастарынан аспайтын қызметкерлердің тізімін шығару.

14)         Автомобильдер туралы мәліметтер берілген: иесінің аты-жөні, бағасы, автомобильдің маркасы мен нөмірі.

15)         Алдыңғы есептің шарттары сақталады. Автомобильдің бағасының өсу ретімен автомобильдер тізімін шығару.

16)         Әртүрлі дата туралы мәліметтер берілген. Әрбір мерзім (дата) – бұл күн, ай, жыл. Ең кеш датаны шығару.

17)         Алдыңғы есептің шарттары сақталады. Жыл мезгілдеріне топтай отырып датаны шығару (алдымен көктемдік даталар т.с.с.).

18)         Кубик туралы мәліметтер берілген: кубиктің өлшемі, оның түсі, материалы. Берілген материал бойынша қабырғасы 3 см-ден аспайтын кубиктар санын табу.

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

20)         Кітаптар туралы мәліметтер берілген: автордың аты-жөні, кітаптың аты, баспаның аты, шыққан жылы. “Программирование” атты кітаптың шыққан жылының өсуі бойынша мәліметтерді шығару.

 

Бақылау сұрақтары:

1)    Жазбалардың массивтерден айырмашылығы неде?

2)    Біріктіру операторы дегеніміз не? Мысал келтіріңіз.

3)    Жазбаларды өңдеуде «,» операциясы не үшін қолданылады?

4)    Қандай стандартты процедура тек қана текстік файлдар үшін пайдаланылады?

5)    EOLN функциясы неге арналған?

6)    Файлда керекті компонентті іздеу қандай процедураның көмегімен орындалады?

7)    Типтелмеген файлдарда қандай процедуралар мен функциялар қолданылады?

 

 

7 Зертханалық жұмыс №7

 

7.1 Процедуралар мен функциялар

 

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

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

Ішкі программаның артықшылықтары:

1)  Ішкі программаны кірістіріп жазылған программаны тестілеу, түзету жеңілірек, олардың логикалық құрылымы анықталады.

2)  Ішкі программаның тәуелсіздігі. Ішкі программаны өзгерту негізгі программаны өзгертуге әкелмейді.

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

Турбо Паскальда  ішкі программалар процедуралар мен функциялардың көмегімен құрылады.

Процедура дегеніміз – тәуелсіз ат берілген программаның бөлігі. Бір рет баяндап, бірнеше мәрте аты бойынша шақыруға болады. Процедураны өрнектегі операнда ретінде қолдануға болмайды.

Синтаксисі:

<Проц баяндалуы>:=<проц.тақырыбы>;<блок>

Мұндағы: <блок> (немесе процедура денесі) – процедурамен баяндалатын программа фрагменті.

<Проц.тақырыбы> - procedure қызметтік сөзінен басталады, процедураға берілген атты қамтиды.

Процедураны активтендіру үшін (яғни, процедурамен баяндалған программа фрагментін орындау үшін) қажетті жерде процедура операторы қызмет етеді.

Синтаксисі:

<Проц операторы>:=<проц.аты>;

<проц.аты> - нақты параметрлер тізімі;

Нақты параметрлер тізімінің көмегімен процедураны орындау үшін шақырылатын әрекеттер нақтыланады.

Процедураны активтендіру операторлардың көмегімен жүзеге асырылатындықтан, мұндай процедуралар процедура-операторлар деп аталады.

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

Параметрлер-айнымалылар.

Параметр-айнымалыны параметр-мәндерден ажырату үшін формальды параметрлер тізімінде Var қызметтік сөзі жазылады. Формальды параметр-айнымалыдан кейін оның типі көрсетіледі.

Мысалы:

Program MAXС (input, output);

Var X, Y, U, V: real;

Procedure MAX2D (r1, r2:real; var res:real);

Begin

If r1>r2 then res:=r1 else res:=r2; end;

Read (X, Y);

MAX2D (X+Y, X*Y, U);

MAX2D (0.5, U, V);

Writeln (‘U=’, U, ‘V=’, V);

End.

MAX2D (X+Y, X*Y, U) Эквивалентті:

var r1, r2:real;

Begin

R1:=X+Y, r2:=X*Y;

Begin

If r1>r2 then U:=r1 else U:=r2; end;

End.

 

Процедураның синтаксисі:

Параметрсіз процедура: procedure MAXA;

Формальды параметрлі процедура: procedure MAXA (a: integer; b: char);

Процедура денесінің құрылымы:

Procedure <ПроцАты>(ФормальдыПараметрлер);

{Процедураны баяндау бөлімі}

begin

{Процедураның орындамалық бөлімі}

end;

Процедураны шақырған кезде басты программаның жұмысы тоқтатылады да, шақырылған программа (процедура) орындалады.

Процедура өз міндетін орындағаннан кейін программа процедураны шақырушы оператордан кейін орналасқан оператордан бастап жұмысын жалғастыруға мүмкіндік алады. Процедурадан мәжбүрлі  шығу үшін exit  аяқтау операторы қолданылады.

Параметр-айнымалы процедура синтаксисі:

Procedure MAX2D (a: real; var y: вект);

Ескертпелер:

1) Процедура операторындағы нақты параметрлер саны процедура баяндалуындағы формальды параметрлердің санына тең болу керек. Егер процедура параметрсіз болса, онда оның тек аты (MAX2A) жазылады.

2) Процедура операторын жазған кезде нақты және формальды параметрлер арасындағы сәйкестік оларды солдан оңға қарай сәйкестендіру жолымен орнатылады.

1-ші нақты параметр → 1-ші формальды параметрге сәйкес,

2-ші нақты параметр → 2-ші формальды және с.с.сәйкес болу керек.

3) Әрбір нақты параметрдің типі формальды параметрдің типіне сәйкес болу керек.

Функция. Математикада функция түсінігі жақсы танымал, функцияның көмегімен бір мәннің басқа мәннен түрлі тәуелділігі беріледі.

Бұл тәуелділік түрлі тәсілдермен берілуі мүмкін:

-кестелік түрде:

-графиктік түрде:

-аналитикалық түрде және т.б.

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

1) Функция программаға өз жұмысының нәтижесін береді, жалғыз мәнді қайтарады.

2) Функция аты өрнекке операнд ретінде кіре алады.

Қолданушы арқылы анықталған функция - функцияның атынан және денесінен тұрады.

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

Синтаксисі:

Function Функция аты (Формальды параметрлер): нәтиже типі.

Мысалы:

Function fibo (n: integer): integer;

{n- формальды параметр}.

Function instep (a, b: real): real;

{a, b-формальды параметрлер}.

Function почта: double;

{формальды параметрлері жоқ}.

Функция аты программа шегінде уникальды.

Функция денесі құрылымы бойынша жәй программаға ұқсас:

function Функция аты (формальды Параметрлер): нәтиже типі;

{функцияның баяндамалық бөлімі}

begin {Функцияның орындамалық бөлімінің инструкциясы}

Функция Аты:-Нәтиже:

End;

 

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

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

Мысалы:

Writeln (fibo (i));   {параметр- айнымалы мәні}.

C:=INSTEP (2, 8);         {параметрлер-тікелей мәндер}.

Write (почта: 10: 3);     Нақты параметрлер көрсетілмеген, себебі функцияның формальды параметрлері жоқ.

Мысалы: Аргумент ретінде алынған екі бүтін санының максимумын қайтаратын функция:

Function max (a, b: integer): integer;

Begin

If a>b then max:=a else max:=b;

End.

Параметрлердің әрекет ету аймағы.

Процедураны қолданатын кезде, мынаны ескеру қажет: Процедура атынан кейін баяндалатын барлық объектілер (меткалар, тұрақтылар, типтер, айнымалылар, процедуралар және функциялар) локальды объектілер деп аталады. Бұл  объектілер осы процедура аумағында ғана қолданылады да, шақырылатын программаға қатыспайды. Оларға жадыдан орын процедураға қатынас құрған кезде бөлінеді, жадының осы арнайы бөлігі программалық стек деп аталады. Процедура жұмысы аяқталған кезде бұл жады көлемі босайды да, процедураның локальды айнымалыларына орын береді. Сондықтан барлық локальды объектілер процедураға кірген кезде құрылып, одан шыққан кезде жойылып отырады.

Егер бірнеше процедурада бір ат анықталған болса, онда әрбір процедурада осы атқа сәйкес өзіндік локальды объект болады.

Шақырылатын программалардағы баяндалған барлық объектілер глобальды деп аталады. Глобальды айнымалыларға жадыдан орын программаны компиляциялау кезінде бөлінеді. Жадының бұл аймағы деректер сегменті деп аталады. Глобальды айнымалылар деректер сегментінде программаның орындалуы басынан аяғына дейін сақталады, сондықтан оларды программада да, және программа қатынас құратын процедураларда да қолдануға болады.

Білу керек:

-   Программа мен ол арқылы шақырылатын процедура арасында деректер алмасу глобальды айнымалылар арқылы жүзеге асырылады.

-   Егер программада да, және шақырылатын процедурада да бір ат анықталған болса, онда программада оған глобальды объект сәйкес болады, бірақ процедура ішінде глобальды объектпен жұмыс жасауға мүмкіндік жоқ (ол локальды объектілермен экрандалады, өзі аттас).

Неге глобальды айнымалыны ғана пайдаланбасқа деген сұрақ туындайды. Дегенмен, локальды айнымалыларды қолдану программаны оптимизациялауға мүмкіндік береді, көрнекі етеді және қателердің пайда болу ықтималдығын азайтады.

Глобальды айнымалыларды қолданбайтын процедура автономды болып табылады. Онымен басты программаға тәуелсіз әрекеттер орындап, басқа программаларда да қолдануға болады.

Турбо Паскальда процедура мен функцияны орналастырудың кез келген деңгейіне рұқсат етіледі.

№7 зертханалық жұмысқа арналған тапсырмалар.

Процедура мен функция қолданылатын есептерді шешудің алгоритмі мен программасын құру. Төменде келтірілген есептерді программалау үшін кей жағдайларда есептердің өзін процедура немесе функция ретінде шешіп, программаның жеке фрагменттері ретінде сипаттау керек.

1)             s, t нақты сандары берілген. Есептеу керек:

f(t, -2s, 1.17)+f(2.2, t, s-t),  мұндағы .

2)             s, t нақты сандары берілген. Есептеу керек:

g(1.2,s)+g(t,s)-g(2s-1,st), мұндағы .

3)             a, b, c нақты сандары берілген. Есептеу керек:    .

4)             n натуралды саны берілген. n, n+1,…, 2n сандары арасында егіз сандар яғни, айырмашылықтары 2 –ге тең жай сандар бар ма, соны анықтау. (Жай сандарды анықтайтын процедура жазу).

5)             n, m натуралды сандары және a1,...,an, b1,…,bm, c1,…,c30   бүтін сандары берілген. Есептеу керек:

6)             n натуралды саны берілген. 1, 2,..., n сандары арасында екі натуралды сандардың квадраттарының қосындысы ретінде көрсететін сандарды табу.

7)             x1,y1,x2,y2,…,x7,y7 нақты сандары берілген.

Координаттары (x1,y1), (x2,y2), ..., (x7,y7) сәйкес келетін жеті бұрыштың периметрін табу

 

 

8)             a, b, c, d нақты сандары берілген. Суретте бейнеленген бесбұрыштың ауданын табу. (Берілген үш қабырға бойынша үшбұрыштың ауданын табатын процедурасын анықтау).

9)             Бірінші жолдан екінші жолда қайталанатын символдарды өшіретін процедура жазу.

10)         А(10), В(10) екі массиві берілген. А(10), В(10) массивтеріндегі бірінші нөл элементіне дейінгі элементтерді 0,5 санына ауыстыру.

11)         А(5,5), В(5,5), С(5,5) үш массиві берілген. Тақ жолдарда орналасқан нөл емес элементтердің ең кіші көбейтіндісін табу.

12)         А(5,5), В(5,5), С(5,5), D(5,5), Ғ(5,5) бес массиві берілген. Массивтердің көбейтіндісін табу. Екі массивтің көбейтіндісін процедура ретінде сипаттау.

13)         А(5,5), В(5,5), С(5,5), D(5,5), төрт массиві берілген. Осы массивтердің қосымша диаганолінің үстіндегі минималды элементтерінің көбейтіндісін табу.

14)         Координаттары (x1,y1), (x2,y2), ..., (x7,y7) сәйкес келетін жетібұрыш табу. Максималды ауданы бар үшбұрышты баспаға шығару. Үшбұрыштың ауданын Герон формуласымен анықтайтын функция жазу.

15)         А(5,5), В(5,5), С(5,5) үш массиві берілген. Жұп бағандарда орналасқан оң элементтердің ең үлкен көбейтіндісін табу.

16)         A[7,7], B[7,7], C[7,7] үш массиві берілген. Осы массивтердің оң және 5-ке қалдықсыз бөлінетін элементтерінің жалпы қосындысын табу.

17)         A[6,6], B[6,6], C[6,6], D[6,6] төрт массиві берілген. Осы массивтердің жұп бағаналарында орналасқан минимальды элементтерінің қосындысын табу.

18)         A[8,8], B[8,8], C[8,8] үш массиві берілген. Осы массивтердегі локальды максимумдардың жалпы санын табу.

19)         A[5,5], B[5,5], C[5,5], D[5,5] төрт массиві берілген. Қосымша диагоналінің астында орналасқан тақ элементтерінің қосындысы ең кіші массивті баспаға шығару.

20)         A[5,5], B[5,5], C[5,5], D[5,5] төрт массиві берілген. Осы массивтердің тақ жолдарында орналасқан оң жұп элементтерінің қосындысының ең кіші мәнін есептеу.

 

Бақылау сұрақтары:

1) Процедуралар мен функциялардың айырмашылықтарын атаңыз.

2) Формальды параметр-айнымалыларды қолдану мысалдарын келтіріңіз.

3) Функциядағы есептеулердің нәтижесі программаға қалай беріледі?

4) Неліктен функцияны өрнектен шақыруға болады?

5) Процедуралық типтер не үшін пайдаланылады?

 

 

 

 

 

 

 

 

Әдебиеттер тізімі

 

Негізгі әдебиет

1)    Бөрібаев Б.  Программалау тілдеріне кіріспе: Жоғары оқу орындарына арналған оқулық. –Алматы: АЭСА, 2008. -376 б.

2)    Құралбаев З.Қ. Алгоритмдеу және программалау тілдері. –Алматы: «TST-company» баспасы, 2008. -354 б.

3)    Вирт Н. Алгоритмы и структуры данных: Пер. с англ. -М.: Мир, 2009.-360 с.

4)    Абрамов С.А., Гнездилова Г.Г., Капустина Е.И., Селюн М.И. Задачи по программированию. -М.: Наука, 1988. -224 c.

5)    Павловская Т.А. Программирование ная языке высокого уровня. –СПб.: Питер, 2006. -461 с.     

6)    Культин Н.Б.  С/С++ в задачах и примерах. –СПб.: БХВ-Петербург, 2004. –288 с.

 

Қосымша әдебиет

7)    Юркин А.Г. Задачник по программированию. -СПб.: Питер, 2002.

8)    Бөрібаев Б. Компьютердің арифметикалық негіздері: Оқу құралы. –Алматы: Қазақ университеті, 2009. -80 б.

9)    Анисимов А.Е., Пупышев В.В. Сборник заданий по основаниям програм­ми­рования. 2007.

10)              Интернетке сілтемелер: http://oop.rosweb.ru/cetus/software.html

http://www.unn.ru/vmk/graphmod/

http://pmi.ulstu.ru/new_project/korobov/index.htm

http://dcprograms.narod.ru/

 

Мазмұны

 

Кіріспе  

1 Зертханалық жұмыс №1

2 Зертханалық жұмыс №2 

3 Зертханалық жұмыс №3 

4 Зертханалық жұмыс №4

5 Зертханалық жұмыс №5 

6 Зертханалық жұмыс №6 

7 Зертханалық жұмыс №7

Әдебиеттер тізімі 

 

Жинақ жоспар 2012 ж.,  210 реті.