Коммерциялық емес акционерлік қоғам
АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ
Ақпараттық жүйелер кафедрасы

 

АЛГОРИТМДЕУ, ДЕРЕКТЕР ҚҰРЫЛЫМЫ ЖӘНЕ БАҒДАРЛАМАЛАУ
5В070300 - Ақпараттық жүйелер мамандығының студенттері үшін
зертханалық жұмысты жұмысты орындауға арналған әдістемелік нұсқау

 

Алматы 2013

ҚҰРАСТЫРУШЫЛАР: Ни А.Г., Имангалиев Ш.И., Мухашова М.Б. Алгоритмдеу, деректер құрылымы және бағдарламалау 5В070300 - ақпараттық жүйелер мамандығының студенттері үшін зертханалық  жұмысты орындауға арналған әдістемелік нұсқау –Алматы: АЭжБУ, 2013– 46 б.

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

Әдістемелік нұсқау 5В070300 - «Ақпараттық жүйелер» мамандығының барлық оқу түрінің студенттеріне арналған.

Без.7, әдеби көр. – 14 атау.

Пікір беруші: Калиева С.А

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

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

Мазмұны

 

    Кіріспе

4

1

 Зертханалық жұмысқа арналған жалпы нұсқаулар

6

1.1

 Зертханалық жұмысқа арналған әдістемелік ұсыныстар

6

1.2

 Есепті орындау талаптары

7

1.3

 Қорғау талаптары

8

2

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

9

2.1

 Сызықты алгоритмнің құрылымы

9

2.2

 Тармақталған алгоритмнің құрылымы                

15

2.3

 Циклдік алгоритмнің құрылымы

21

2.4

 Біртекті массивтің алгоритмі

26

2.5

 Екітекті массивтің алгоритмі

33

2.6

 Деректерді іздестіру алгоритмі

41

2.7

   Динамикалық өңделуінің құрылымдық алгоритмі  

47

    Қорытынды

53

    А қосымшасы. Сыртқы беттің үлгісі

54

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

55

Кіріспе

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

Беріліп отырған әдістемелік құрал «Алгоритм, Деректер құрылымы және Бағдарламалау» пәні бойынша 5В070300-Ақпараттық жүйе мамандығында оқитын бірінші курс студенттеріне арналған кітап. Бұл әдістемелік құрал базалық деректер құрылымының машықтық жұмыстарын, алгоритмді есептер құрылымын, графикалық және ақпараттық деректер алгоритмін үйренуге мүмкіндік береді.

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

Си тілінде ақпаратты толығымен жақсы жазу үшін басқаратын құралы: топты операторлар шартты түрде қабылданады (if-else) , бірнеше мүмкін нұсқалардың ішінен біреуін таңдау (swith), басында тексерудің циклдық түрі  (while,for), соңында (do), циклдан арнайы шығу (break). Си тілі өзінің кең ауқымды, жоғары әсерлі екенін дәлелдеді.

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

-  сызықты алгоритмнің құрылымы;

-  жинақталатын алгоритмнің құрылымы;

-  циклдік алгоритмнің құрылымы;

-  біртекті массивтің алгоритмі;

-  екітекті массивтің алгоритмі;

-  деректерді іздестіру алгоритмі;

-  динамикалық құрылымның алгоритмі. 

Әр тақырыпта екі лабораториялық жұмыстан. Бірінші зертханалық жұмыс алгоритм есептерін шешу арқылы студенттерді логикалық тұрғыдан дамыту болса, екінші зертханалық жұмыс Си тілін үйрену.

 Зертханалық жұмыс есептің қиындық деңгейіне байланысты А және В деген екі тапсырмаға бөлінген. А тапсырмасын қорғау арқылы студент шекті 80% балын алса, екінші тапсырманы қорғау арқылы 100% ала  алады. Екінші тапсырманы орындау мүмкіндігін алу үшін студент бірінші тапсырманы шекті 80%-ға өткізу қажет. Студент зертханалық  жұмысты орындау арқылы өзінің білімділігін осы пәндер бойынша дәлелдеу қажет:

-  Информатика.

-  Алгебра.

-  Геометрия.

-  Алгоритм және Деректер құрылымы.

Берілген тапсырмалар студенттер осыдан үйренгендерін ары қарай жалғастыру және де алған білімдерін аталған пәндер бойынша, жұмыстарында қолдану.

Зертханалық жұмыстарда тақырыбы, мақсаты, зертханалық жұмыс бойынша қысқаша түсінік берілген және берілген есепке ұқсас есептің шығару үлгісі беріліп, сол есептерге тапсырмалар бойынша нұсқалар беріледі (әр тапсырма 25 нұсқадан тұрады). Есептің нұсқаларын оқытушы береді.

Осы жұмыстарға сонымен қатар зертханалық жұмысқа арналған жалпы нұсқаулар берілген.

1  Зертханалық жұмысқа арналған жалпы нұсқаулар

    1.1  Зертханалық жұмысқа арналған әдістемелік  ұсыныстар

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

Әр зертханалық  жұмыс екі тапсырмадан тұрады және өзінің тапсырмалары бар:

-  есептің шешіміне сәйкес нәтиже жасау;

-  алгоритмнің шешімін суреттеу;

-  алгоритмнің негізі;

-  алгоритмнің сөздік суреттемесі;

-  алгоритмнің блок – сұлбасы;

-  кіру және шығу жүйесі;

-  алгоритмнің Си тіліндегі жазылуы;

-  бағдарламаның тексеру тесті;

-  терілген мәтінде бағдарламаның жұмыс істелуі.

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

Бастысы, берілген дерек студенттің дерегіне сәйкес басшылық ету керек:

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

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

Бағдарлама барысында орындау түрі:

- зертханалық жұмыстың атауы;

- зертханалық  жұмыстың тақырыбы;

- нұсқаның нөмері;

- тапсырманы алуға шақыру;

- тапсырмаға кірісу;

- бағдарламаның нәтижесі;

- бағдарламаның авторы және тобы.

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

Тексеру мысалы, Microsoft Excel– мен есептеу тиіс. Өткізілген тесттілеудің нәтижесі көшірмелі түрінде бақылаулық мысалдың шешілу нәтижесімен көрсетілуі тиіс

 1.2 Есепті безендіру міндеттері

Зертханалық жұмыстарды орындап болғаннан кейін есепті толтыру үшін бірнеше міндеттері бар:

1)  № зертханалық жұмыстың, тақырыбы.

2)  Жұмыстың мақсаты және есептің шарты.

3)  Алгоритмнің сұлбасы.

4)  Есептің математикалық үлгісі.

5)  Алгоритмнің блок – сұлбасы.

6)  Бағдарламаның мәтіні.

7)  Орындалған бағдарламаның нәтижесі.

8)  Орындалған бағдарламаның дұрыстығын тексеру.

9)Нәтижесі.

В қосымша А алғы беттің үлгісі көрсетілген.    

Есеп компьютермен терілген А4 форматы бойынша тек бір жағында жазылған ақ қағаз болуы керек. Шрифт – жай түрде, 14 кегльмен жазылуы керек. Есептің мәтінін баспадан шығарып, келесі міндеттерді сақтау қажет: сол жақ – 30 мм, жоғарға жағы – 20 мм, оң жағы – 1,5 мм, төменгі жағы – 25 мм. Түзуленуі – беттің көлеміне қарай.

Құрылымды элементтердің тақырыптарын жол ортасында үлкен әріптермен жазу керек. «Мазмұны», «Кіріспе», «Қорытынды», «Қолданылған әдебиеттер тізімі», «Қосымша» құрылымды элементтердің тақырыптары ретінде жұмыс істейді

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

Әр бөлімді және құрылым элементтерін жаңа беттен бастау керек.

Кестелер тақ болу керек және нөмірленуі керек. Блок – сұлба және интерфейстің қолдану сұлбасында қол қойылуы және нөмірленуі керек.

Есептің бөлігін араб сандарымен нөмірлеу керек. Беттің нөмірін жол ортасында, бет астында жазу керек. Зертханалық жұмыстың есебі электронды немесе шығарылған түрде жасалынады.

1.3 Қорғауға арналған талаптар

Зертханалық жұмысты қорғау оқытушы есебі тексергеннен кейін жүзеге асады. Жұмысты қорғау кафедраның нұсқауына байланысты оқытушының қарауына қарай тексеріледі. 

Зертханалық жұмыс есептің қиындық деңгейіне байланысты А және В деген екі тапсырмаға бөлінген. А тапсырмасын қорғау арқылы студент шекті 80% балын алса, екінші тапсырманы қорғау арқылы 100% ала алады. Екінші тапсырманы орындау мүмкіндігін алу үшін студент бірінші тапсырманы шекті 80%-ға өткізу қажет.                

          Әр зертханалық жұмысты қорғау күні силлабустың пәніне байланысты белгіленеді. Кешіккен әр күнге 1% зертханалық жұмыстың нәтижесінен алынып отырады.       

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

2.1  Сызықты алгоритмнің құрылымы

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

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

# include  <stdio.h>

# include  <math.h>

                   void main()

                   { локальды хабарландыру, констант;

                     көрініс;

                     функция;

                    операторлар;

 

Форматты функцияның нәтижесі  printf()

Функцияның синтаксисі:

printf(<басқару жолы>, <үзілісті тізім>);

қайда <үзілісті тізім> - үзілісті идентификатор, оның мәнін міндетті түрде экранға шығару керек

<басқару жолы> - жол, өзімен бірге бірнеше мәндер енгізу: %i – белгісі бар бүтін сандарды енгізу, %u – белгісі жоқ бүтін сандарды енгізу, %f – бөлшек сандарды енгізу, – белгі енгізу, %s – жолды енгізу.

Форматты функцияның нәтижесі scanf()

Синтаксис:

scanf(<басқару жолы>, <үзілісті адрестің тізімі>);

мұндағы <басқару жолы> - жол, тек мәндер түрін қамтитын, printf() операторына қолданатын мәндер сияқты;

<үзілісті адрестің тізімі> – үзілісті адресті қамтамасыз ететін, енгізілген функция.

Си тілінде 5 базалық түрі бар:

char – белгі түрі;

int - бүтін түрі;

float - ирек нүктенің дерегінің түрі;

double - екі еселенген ирек нүктенің дерегінің түрі;

viod – бос түр, ешқандай мәні жоқ.

Зертханалық жұмыс №1. Сөздік және кескіндік жазылудың сызықты алгоритмі

Жұмыстың мақсаты: сөздік және кескіндік жазылудың сызықты алгоритмін өңдеп үйрену.

А тапсырмасының нұсқасы:

1. Y=;                  11. Y=;

2. Y=  ;                                  12. Y=;

3. Y=;                          13. Y=;

4. Y= ;                                        14. Y=;

5. Y=;                          15. Y=);

6. Y=;                              16.Y=;

7. Y=;                            17. Y=;

8. Y= ;                     18. ;        

9. ;                    19.;

10. ;                    20.;

21. Y=;                            22. ;        

23. ;                       24.;

25. ;

Б тапсырмасының нұсқасы:

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

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

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

4) Екі сан берілген. Олардың квадраттарының арифметикалық ортасын және модулінің арифметикалық ортасын табу.

5) Тұнық суда қайықтың жылдамдығы V км/сағ, өзен ағысының жылдамдығы U км\сағ (U>V). Қайықтың суда қозғалу уақыты Т1 сағ, ал өзен ағысына қарсы Т2 сағ. Қайықтың жүрген жолын табу керек.

6) Бірінші көліктің жылдамдығы V1 км/сағ, ал екінші көліктің жылдамдығы V2 км/сағ. Олардың арақашықтығы S км. Олар бір – бірінен алшақтағандағы Т уақыт өткеннен кейінгі арақашықтығын табу.

7) Бірінші көліктің жылдамдығы V1 км/сағ, ал екінші көліктің жылдамдығы V2 км/сағ. Олардың арақашықтығы S км. Олар бір – бірінен қарама – қарсы қозғалғандағы Т уақыт өткеннен кейінгі арақашықтығын табу.

8) Тікбұрышты ұшбұрыштың периметрі мен ауданын табу, егер олардың катеттері а және б болған жағдайда.

9) Кубтың қабырғасының ұзындығы берілген. Шегінің ауданын, яғни толық төбесінің ауданын және көлемін табу керек.

10) Радиусы Р болатын шеңбердің ұзындығын және ауданын табу керек. Рі =3,14.

11) Сақинаның ауданын табу, ішкі радиусы R1, сыртқы радиусы R2 (R1<R2).  Рі = 3,14.

12) еңбүйірлі ұшбұрыштың бүйір қабырғалары берілген. Осы ұшбұрыштың ауданын табу керек

13) Шеңбердің ұзындығы берілген.Осы берілген шеңбердің ұзындығы бойынша ауданын табу керек. Рі = 3,14.

14) Шеңбердің ауданы берілген. Оның ұзындығын табу. Рі = 3,14.

15) Табандары а және б (а үлкен б-дан) және үлкен табанынаның alpha бұрышы берілген (бұрыш радианмен берілген) теңбүйірлі трапецияның ауданы мен периметрін табу.

16) Теңқабырғалы трапецияның ауданы мен периметрін табу керек, олардың табандары а және в (а үлкен б-дан) alpha бұрышы.

17) Координаталары (х1, у1) және (х2,у2) нүктелерінің арасындағы арақашықты табу.

18) Кубтың қабырғасының ауданы берілген. Кубтың көлемін және қырының ауданын табу керек.

19) R1, R2, R3 үш кедергі паралель орналасқан. Кедергілердің жалғануын тап.

20) а саны берілген. Көбейтуден  басқа ешқандай амалдарды қолданбай:       а) а10 төрт амалдың көмегімен;

б) а13 5 амалдың көмегімен;

в) а64 алты амалдың көмегімен табу керек.

21) Студент h1 сағат  min1 минутта бағдарламаның жұмысын бастап, h2 сағат  min2 минутта аяқтады. Студент тапсырманы орындаған уақыттың бағдарламасын құру керек.

22) а саны берілген. Көбейтуден басқа ешқандай амалдарды қолданбай:

 а) а4 екі амалдың көмегімен;

 б) а6 үш амалдың көмегімен;

 в) а7 төрт амалдың көмегімен орындау керек.

23) Нөлге тең емес екі сан берілген. Қосындысын, айырмашылығын тап. 

24) Үш санды сан берілген. Қосындысын және берілген сандарды тап.

25) А және  В  екі сан берілген. С санын тап, бастапқы А және В санының бірінші санын қосып, екінші санының қосындысы арқылы тап.

А тапсырмасының үлгісі:

Математикалық көрінісін есептеп шығыңыз.

Тапсырма: есептеңіз

.

Сөздік жазба:

1) үзілісті мәні x,y; 

2) ;

3) ;

4)

5) ;

6) .

2.1 суретте А тапсырмасының блок – сұлбасы кескіндік көрінісінің алгоритмі бейнеленген

2.1 Сурет – А тапсырмасының блок – сұлбасы

4  Зертханалық жұмыс №2. Сызықты алгоритмнің бағдарламалық жүзеге асырылуы

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

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

Үлгі:

Есептеңіз:   .

Алгоритмнің бағдарламалық жазылымы:

#include <stdio.h>

#include <math.h>

int main(void)

{ int x,y;

float dop,a,b,c, rezult,z;

 puts("N1 ЗЕРТХАНАЛЫҚ ЖҰМЫС – СЫЗЫҚТЫҚ БАҒДАРЛАМА ");

puts("============================================");

printf ("енгізіңіз x\nx=");

scanf("%d",&x);

printf ("енгізіңіз y\ny=");

scanf("%d",&y);

printf ("енгізіңіз z\nz=");

scanf("%d",&z);

        dop=fabs(y-x);

       a=pow(x,y+1)+exp(y-1);

       b=1+x*fabs(y-tan(z));

c=0.5*pow(dop,2)-pow(dop,3)/3;

      rezult=a/b*(1+dop)+c;

printf("\a\n ЖАУАБЫ:  rezult =%lf", rezult);

printf (“Жұмыстың нәтижесін алу үшін басыңыз <Enter>”);

getch( );  /* Қалаған түймешені ұстап тұрыңыз */

return 0;

}бағдарламаның шыққан нәтижесі:

N1 ЗЕРТХАНАЛЫҚ ЖҰМЫС – СЫЗЫҚТЫҚ БАҒДАРЛАМА ============================================

енгізіңіз x

x=2

енгізіңіз y

y=3

енгізіңіз z

z=1

ЖАУАБЫ:  rezult =6.84925

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

1)    Сызықты деректер алгоритмі қандай тапсырмаларға дайындалады?

2)    Бағдарламаны жұмыс істеу үшін не істеу керек?

3)    Операторларды бағдарламаның басына және соңына қалай жазамыз?

4)    С тіліндегі бағдарлама қандай бөлімдерден тұрады?

5)    С тілінде тізбектей қалай жазылған?

6)    Экранға шығару үшін С тілінде оператор қалай жазылады?

7)    <басқару жолы> орны қандай?

8)     Базалық түрінің деректерін атап шығыңыз.

4.1  Алгоритмнің тармақталған құрылымы

Жалпы мағлұмат.

Шығару жолы әртүрлі , бірнеше бұтақтың түрін алгоритм тармақталған деп аталады.

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

1)Көшу операторын қолдану арқылы.

2)Шартты операторы.

3)Таңдау операторы.

Көшу операторы GOTO.

Көшу операторының түрі:

GOTO <белгі>;

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

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

Шартты оператор IF екіге бөлінеді:

а) толық түрі

         if (шартты) оператор 1

              else оператор 2

б) қысқарған түрі

         if (шартты) оператор 1

оператор 1, оператор 2 – ке келген шартты және құралған операторлар;  шартты жалпы жағдайда логикалық түрден.

  Егер шарт шынайы болса,  оператор 1, жалған болса,  оператор 2 орындалады.

Таңдау операторы SWITCH CASE.

   Оператор «параметріне» байланысты бірнеше түрден таңдап  алуға мүмкіндік береді.

Таңдау операторы келесі түрлерге бөлінеді:

swich (көрінісі)

{

case константа 1:

        оператор 1;

        break;

…………………………    

case константа N:

        оператор N;

        break

        default: оператор

}

көрінісі – үзілісті бүтін сан немесе біріккен қатынас;

 константаN: - константың көрінісі;

 default – егер константа  бірде – бір оператормен сәйкес келмесе, белгі операторы орындалады;          

      break  - Қосып  - өшіруден шығу операторы.

 

5 Зертханалық жұмыс №3. Сөздік және кескіндік жазудың тармақтық алгаритмі

 

Жұмыстың мақсаты: сөздік және кескіндік жазудың тармақтық алгаритмнің құрылымын өңдеп үйрену.

А тапсырмасының нұсқасы:

 

                           

 

                   

                     6)

 

7)            8)

 

 9)               10)

 

11)     

 

12)         13)  

 

14)         15)        

 

16)              17)    

18)  19)     20)

 

21)                22)           

 

23)

 

 24)              25)

Б тапсырмасының нұсқасы:

1)  Қытай елінің жұлдызнамасында келесі: тышқан, сиыр, арыстан, қоян, ұлу, жылан, ат, қой, маймыл, тауық, ит,шошқа. 1996 – тышқан жылы екенін ескеріп, қай жылдың қай жұлдызнамаға сәйкес келетін бағдарламасын жаз.

2)  Т саны– Жылдың ретті күні. Т күніне сәйкес келетін М айды және D аптасын табу керек. (мысалы, егер Т=365. онда М=12,  D=31).

3)  М ай және D аптасын енгізіп. Күнге сәйкес келетін ретті Т күнін табу керек.

4)  М ай және D аптасын енгізіп. Ай Дүйсенбіден басталатынын ескеріп, М ай мен D аптасын тап.

5)  Төрт сан берілген. Сол сандардың ішінде нешеуі теріс, нешеуі оң екенін тап.

6)  M1(x1,y1) немесе M2(x2,y2) – екі нүктенің қайсысы координата басына жақын екенін тауып, экранның бетіне координатасымен шығар.

7) Теріс сандарды енгізіп, ішінен ең кіші теріс сандарды табатын бағдарлама жазу керек.

8) a, b, c, x, y сандарды берілген. Қабырғалары a, b, c болатын, кірпіш х,у болатын бөгеттен өте ала ма?

9) Теріс сандарды енгізіп ішінен ең үлкен теріс сандарды табатын бағдарлама жазу керек.

10) Нөл санын табатын және енгізілген сандардың ішінен нөлдің ретін табатын бағдарлама жаз.

11) Тәуліктің қай уақыты екенін табатын бағдарлама жаз. Егер 1200 – «таң» дейін, 1800 – «күн» дейін,  000 – «кеш» дейін,  600 – «түн» дейін.

12) Координатаның бойынан екі нүкте берілген. Осы нүктелердің бір – бірінен арақашықтығын тап.

13) Желі бойынша ақпаратты жіберу жылдамдығы  14 кбит/сек-тен  58 кбит/сек-ке дейін. Ортасындағы жылдамдықтан үлкен болатын бағдарлама жаз.

14) Радиусы R болатын шар  қабырғасы P, өткір бұрыш  Q болатын тең қабырғалы ромбыдан өте ала ма?

          15) True немесе False болатын, иә немесе жоқ шарты орындалатын бағдарлама жаз.

               -  Үш белгілі санның квадраты осы сандарды қосындысынң кубына тең .

- Берілген үш белгілі санның ішінде бірдей сандар кездеседі.

16) Бүтін санды сұрайтын бағдарлама  жазу керек, 13 саныннан басқа. Егер берілген сан 13 болса, орнына 77 санын жазу керек

17) Екі пішіннен қайсысының ауданы үлкен болатынын  табу (шеңбер немесе квадрат). Квадраттың қабырғасы а, шеңбердің радиусы  r. Ауданы үлкен пішінның мәнін және пішінның атын экранға шығару.

18) a, b, c үш бөліктің ұзындығы берілген. Егер осы үш бөлікпен ұшбұрыш құруға болса, сол ұшбұрыштың периметрін тап.

19) M(x,y) болатын нүкте  радиусы r болатын  центрлік нүктесі (x0,y0) болатын шеңберге сәйкес келе ма?

20)  Төрт бөліктен параллеграмм жасауға бола алатын бағдарлама жаз.

21) x, y, z оң сандар берілген. Қабырғалары x, y, z болатын ұшбұрыш болатынын тексер.

22) x, y сандары берілген. Егер x, y теріс сандар болса, онда әр мәнін модулмен алмастыру керек; егер бір ғана сан теріс болса, онда екі санды да 0,5 – ке көбейту керек; егер екі санда оң болса және [0.5, 2.0] аралығында болмаса, онда екі санды да 10 – ға көбейту керек; басқа жағдайда х пен у – ті сол қалпында қалдыру керек.

23) М(x,y) нүктесінің квадратын тауып экранға шығару, x және y – берілген сандар.

24) a=sinx, b=cosx, c=ln|x| х –ке мән беру арқылы жоғарғы қосындысын тап.

25. Екі санның қосындысын табатын бағдарлама жаз, егер олардың қосындысы 100 –ден асса, мәні 2-ге көбейтілсін, ал керісінше жағдайда 3-ке көбейтілсін.

Үлгі:

.

Сөздік жазба:

1) үзілісті мәні n,S,e;

2) тексерейік:  егер 3       |n|<s<2|n|  онда есептейміз    K=|, немесе көшеміз б. 3;

3)тексерейік:  егер s≥2|n| , онда есептейміз K=, немесе көшеміз  б. 4;

4) хабарландыру нәтижесі: тапсырманың шешімі жоқ.

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

2.2 сурет – А тапсырмасының блок – сұлбасы

6 Зертханалық жұмыс №4. Тармақталу алгаритмінің бағдарламалық жүзеге асырылуы

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

Бағдарлама құрып, олардың мәнін жазып, жауабын пернетақтамен жазу керек.

№3 зертханалық жұмыстың нұсқалары:

Үлгі:

Тапсырма: бағдарламаны құрастырып, есептеңіз:

.

#include<stdio.h>

#include<conio.h>

#include<math.h>

void main()

{ int S,n;

float K;

printf(“\n деректі енгізіңіз”);

printf(“\n S=”);

scanf(“%d”,&S);

printf(„\n n=“);

scanf(„%d“,&n);

if (fabs(n)<S && S<2*fabs(n))

K=sqrt(fabs(S*exp(2)-n*exp(-2))); else

if (S>=2*fabs(n))

K=sqrt(fabs(S*n)); else

printf(“\n шешімі жоқ”);

printf(“\n Нәтиже K=%f”,K);

getch();

}

 

Орындалған бағдарламаның нәтижесі:

 

Деректі енгізіңіз

S=7

n=1

Нәтиже K=2.6

 

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

1)  Шартты оператордың қандай түрлерін білесіз?

2)  Таңдау операторы қалай орындалады?

3)  Дамыған алгоритмді орындау үшін қандай шарттар керек?

4)  Көшу операторы қалай орындалады?

5)   Көшу операторының толық  түрі қалай орындалады?

6)  Көшу операторының қысқартылған түрі қалай орындалады?

7)  Break операторы не үшін орындалады?

8)  default белгісі не үшін орындалады?

 

 

7 Зертханалық жұмыс №5. Сөздік және кескіндік жазудың циклді алгоритмі

 

Жұмыстың мақсаты: сөздік және кескіндік жазудың тармақтық алгоритмі, алгоритмнің циклдік құрылымын өңдеуді үйрену.

Жалпы мағлұмат.

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

Жұмыс орындалмас  бұрын әртүрлі циклдың ұйымдастырулық сұлбасын және параметрі мен цикл операторын оқып үйрену керек.

Цикл дегеніміз қозғалыстың кезектелуі.

Циклдар:

1)    алдынғы шартпен;

2)    кейінгі шартпен;

3)    параметрмен.

С тіліндегі циклдың операторы;

Алдыңғы шарттың циклдық операторы:

while(шарт)

    {

     //циклдың денесінің операторы

    }

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

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

do

{

     // цикл денесінің операторы

}while(шарт);

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

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

for(циклдың басы; шарт циклдың соңында; цикл қадамының өзгерісі)

{

     //цикл денесінің операторы

}

Параметрлік цикл былай жұмыс істейді: (цикл есеп шоты – j) үзілісті n мағынадан кіші (үлкен) болса, онда цикл операторы орындалады, әр цикл санын басқарушы үзілісті өзінің мағынасын белгілі санға өзгертеді

Енгізілген цикл.

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

Циклмен басқарылатын оператор.

Break операторы. Компилятор break операторын кездестірген кезде, қалған оператордың көлеміне қарамастан ол өзінің циклының орындалуын тоқтатады.

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

 

А тапсырмасының нұсқасы:

Блок – сұлба құрып, бағдарламаның қосындысын есептеңіз:

       1)   ;                          14)   ;   

       2)    ;                              15) ;

3)  ;                                   16)   ;

4)    ;                                                   17)

          5)   ;                                    18);

          6)   ;                                          19) ;

          7)    ;                                           20)  ;

8)  ;                                             21) ;

9)   ;                                               22);

10)   ;                                               23) ;

11)  ;                                              24)  ;                     

12) ;                                         25)         .  

13) ;

 

 Б тапсырмасының нұсқасы:

1) 100 тенгеге 100 бас мал басын сатып алу керек. Егер сиырдың құны 5 теңге, ал бұқаның құны 10 тенге, бұзаудың құны 0,5 тенге болса. (жауабы: сиыр-9, бұқа-1, бұзау-90).

2) Компьютерге N нүктелердің координаталары енгізілді. Солардың ішінде радиусы R болатын шеңберге сәйкес келетін нүктені тап.

3) Қоян мен үйректің барлық аяғы 24-ке тең. Сонда неше қоян және үйрек бар (барлық нұсқаларды жаз).

4) Топ үміткерлерінің  N бойы енгізіліп отыр. Үміткерлердің орта бойын есепте.

5) Бір жасушалы амеба әр үш сағат сайын 2 жасушаға бөлінеді. Амеба 3,6,9,12,…,24 сағатта неше жасушаға бөлінеді (жауабы: 256).

6) N натуралды көрсеткішімен (for, while, do…while циклдың үш түрімен жазу керек). А дәрежелі санына бағдарлама құрып есептеу керек.

7) Бағдарлама жазу керек, 999 бүтін саннан тұратын, егер 999 –інші санын енгізгенде экранға қосындысы шығу керек.

8) WHILE операторымен бағдарлама жазу, 10 санын енгізіп баспаға жіберу.

9) Жаттығуда спортшы, бірінші күні 10 км жүгірді. Ол әр күні алдыңғы күннің нәтижесін 10% - ға арттырып отырды. Спортшы 7 күнде қанша км жүгіреді.

10) WHILE операторын қолданып, 22-ден 100-дің арасындағы барлық жұп сандарды шығаратын бағдарлама.

11) h қадамымен [a,b] бөлігіндегі F(x) функциясын шығару бағдарламасын шығару. Нәтижесін кесте түрінде көрсету. Бірінші баған – аргумент мағынасы, екіншісі F(x)=cosx+ctgx мағынасы.

12) WHILE операторының көмегімен бағдарлама жазыңыз. 1 – ден бізге берілген санға дейінгі сандардың квадратын есепте.

13) 1 – ден 99 – ға дейінгі барлық тақ сандардың қосындысын табу керек.

14) Төрт таңбалы саннан тұратын санды табу керек. Ол санды 133 бөлгенде 125 қалдық қалу керек, ал  134 бөлгенде  111 қалдық қалу керек.

15) Оператор көмегімен әр символ енетін постшартпен бағдарламалық сүзгі жаз, бірақ тек орыс алфавитін оқитын болсын. Жұмыс аяқталуы-«Я» әрпін басу арқылы өшсін.

16) Барлық екі таңбалы саннан тұратын сандарды жазу керек. Олардың қосындысы 2,3,4,5,6,7,8,9 – ке көбейткенде өзгермеу керек.

17) Барлық үш таңбалы саннан тұратын сандарды жазу керек. Олардың сандарының қосындысы санның өзіне тең болу керек.

18) Барлық үш таңбалы саннан тұратын сандарды жазу керек. Олардың сандарының арифметикалық ортасы бірінші немесе үшінші санға тең болу керек.

19) 3 цифрының квадраты және бірінші 2 цифрлыққа айналған санның квадратының арасының түрлілігін көрсетуге болатын барлық 3 мәнді санды табу керек.

20) Квадраты 17 –ге бөлінетін екі саннан тұратын сандарды тап.

21) Банкке салынған алғашқа табыс а тенге. Неше жылдан кейін в тенгеден асады?  Әр жылы салынған табыс 3% - ға артып отырады.

22) Балықтан жылдық табыс 15% - ға өсіп отыр.  Қосымша А тонна балық бар. Жылдық табыс В тонна. Қосымша табысқа неше жылдан кейін жетуге болады?

23) Әр бактерия бір минутта екіге бөлінеді. Басында А бактерия болды. Бактерия Х санынан асу үшін неше жыл керек?

24) (Қолдаушылар есептеледі) кезектегі әр адамға қызмет көрсету ұзақтығы және t уақыты құрайтын жұмыс күні анық, мастер-стилист салонда қанша адамға қызмет атқаратынын анықтау керек.

25)1 –ден Х – ке дейінгі барлық натурал сандардың санын тап.

Үлгі: қосындысын есептейтін алгоритм құр:

 

 

Сөздік жазба:

1) үзілісті мәні  х, n;

2) үзілісті нөлге теңейміз S=0;

3) бастапқы үзілісті мәні k=1;

4)  циклдың басы  k<n :

 -;

 - k=k+1;

5) циклдың соңы;

2.3. суретте А тапсырмасының блок – сұлбасында кескіндік көрінісінің алгоритмі бейнеленген

2.3 сурет – А тапсырмасының блок – сұлбасы

8 Зертханалық жұмыс №6. Циклдық алгоритмнің бағдарламалық жүзеге асырылуы

 

Жұмыстың мақсаты: реализациялық циклдық алгоритмін құратын бағдарлама жазып үйрену, циклдық  for, while, do – while операторларын үйрену.

 

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

 Үлгі:

Тапсырма: есептейтін бағдарлама құрыңыз:

.

Бағдарламаның мәтіні келесі түрде болады:

 

#include <stdio.h>

#include <math.h>

int main()

{int n, x;

float S;

printf („\n Мәнін енгізіңіз  n\n n=“);

scanf (“%d”, &n);

printf (“\n Мәнін енгізіңіз  x\n x=”);

scanf (“%d”, &x);

S=0;

k=1;

while (k<n)

{  S=S+(cos(k*x)/k);

  k=k+1;

}

printf (“\n қосынды S=%f”, S);

getch();

return 0;

}

Орындалған бағдарламаның нәтижесі:

 

Мәнін енгізіңіз  n

 n=4

Мәнін енгізіңіз  x

 x=1

Қосындысы S=0.002231

 

 

 

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

1)    FOR операторы қалай жазылады және қалай орындалады?

2)    FOR операторын қандай циклге қолданамыз?

3)    WHILE операторы мен   DO WHILE операторының айырмашылығы?

4)    Санды қайталау циклы циклдық алгоритммен қалай бағдарламаланады?

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

6)    Бірде бір рет орындалмайтын цикл операторын жаз.

7)    Операторалық жақшалар қандай жағдайда қолданылады?

8)    Басқару циклы операторда қалай жұмыс істейді?

          8.1  Алгоритмнің  біртекті массивке  өңделуі

 

Жалпы мағлұмат.

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

Массивті бейнелеу үшін келесі көрсетулерді орындау керек:

- элементтің түрі;

- массивтің аты;

- массивтің көлемі.

Массивті бейнелеудің жалпы түрі:

Тип массивтің аты [көлем1][көлем 2]….;

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

float   A[5],   B[25];

Массивтің мәтінін жазғанда оның бейнесін енгізуге  болады.

Мысалы:

int   D[5]={23, 45, 32, 12, 88};

 Си тілінде массив нөлден бастап нөмірленеді, яғни бірінші элементтің индексі 0 – ге тең, ал соңғы элементтің индексі – массив өлшемінен төмен.

Көрсеткіштермен массивтер арасындағы байланыс. С тілінде массивтер мен көрсеткіштер өте байланысты.

Көрсеткіш – бұл үзілісті.

Көрсеткіш былайша жазылады:

                            тип *<үзіліс аты>;

Көрсеткі үзіліс тізімінде хабарланады, бірақ олардың атының алдында * қойылады. Көрсеткіш хабарланған үзілістің түрін көрсетеді.

Унарлы операция & үзілістің адресін көрсетеді, оның мағынасын көрсетпейді. Егер uk көрсеткіш болса, онда uk=&x мынаны білдіреді. " x  адресін алып, оның мағынасын uk-ға ауыстырамыз.

 

Көрсеткіштер арқылы массивтің барлық элементіне енуге болады. Егер uk толық көрсеткіш болса, int *uk  сияқты, онда uk операция орындалғаннан кейін uk=&a[0] a[0] адресін құрайды, ал uk+i  i массив элементін көрсетеді. Массив атауы бағдарламада оның бірінші элементінің адресіне бірдей болғандықтан, uk=&a[0] uk=a – ға эквивалентті. Сондықтан a[i] - ді *(a+i) деп жазуға болады. Бұдан &a[i] және a+i шығады.

Осыған байланысты мысалды қарастырайық.

#include <stdio.h>
main()
{
char *uk1,*uk2;
uk1=uk2=”Алгоритм,  деректер құрылымы және бағдарламалау”

  putchar(*uk2++);
putchar('\n');
while(--uk2 >= uk1)
putchar(*uk2);
putchar('\n');
}

Басында uk1 және uk2 көрсеткішіне мына адрес беріледі " Алгоритм, деректер құрылымы және бағдарламалау ". Содан соң жол теріледі және бір уақытта uk2 көрсеткіші жол бойына сыйысады. Соңында uk2 соңғы  белгіні көрсетеді. Екінші циклде while, uk2 көрсеткіші керісінше бағытта өзгереді, массивтің нөлдік элементіне дейін кемиді.

 

 

9 Зертханалық жұмыс №7.  Сөздік және кескіндік жазудың циклді алгоритмінің біртекті массивке өңделуі

 

Жұмыстың мақсаты: біртекті массивтің кескіндік түрін жазу керек.

 

Тапсырманың нұсқалары:

1) А(10) массиві берілген. Элементтерден оң сандардың санын және қосындысын тап.

2) А(20) массиві берілген. Ретті нөмірлерімен массивтегі төменгі және жоғарғы элементтерін табу.

3) А(15) массиві берілген. Элементтердің ішінен төменгі элементті табу керек, массивтің тақ орындарында орналасқан, сонымен бірге нөлге тең элементтердің санын табу керек.

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

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

6) N өлшемді бүтін санды массив берілген. Оны түрлендіріп, бірінші элементін тақ сандарға қосу керек. Массивтің бірінші элементін өзгертпейсіз.

7) N өлшемді бүтін санды массив берілген.   Оны түрлендіріп, соңғы элементін жұп сандарға қосу керек. Массивтің соңғы элементін өзгертпей.

8) N өлшемді бүтін санды массив берілген. Оны түрлендіріп, арифметикалық ортасының бірінші және соңғы элементтерін жұп сандарға қосу керек.

9) N өлшемді бүтін санды массив берілген. Оны түрлендіріп, бірінші элементін жұп сандарға қосу керек. Массивтің бірінші элементін өзгертпей.

10) 10 өлшемді массивтің төменгі және жоғарғы  элементтерінің орнын ауыстыру.

11) A[N] массиві берілген. Барлық оң элементтерді төменгі элементтердің мәніне кішірейту.

12) A[N] массиві берілген. Барлық теріс элементтерді жоғарғы элементтердің мәніне үлкейту.

13) 10 өлшемді массив берілген. Төменгі және жоғарғы  элементтердің арасына  массивтің элементтерін кері ретке ауыстыру керек.

14)  N өлшемді бүтін санды массив берілген. Оң және теріс элементтердің туындыларының мөлшерін табу керек.

15) N өлшемді бүтін санды массив берілген. Оң және теріс элементтердің арасындағы туындаларының мөлшерінің айырмашылығын табу керек.

16) A[N] массиві берілген. A[N] массивінің оң мәндерінің арифметикалық ортасының бүтін бөлігін табу керек.

17) A[N] массиві берілген. A[N] массивінің теріс мәндерінің арифметикалық ортасының бүтін бөлігін табу керек.

18) A[N] массиві берілген. A[N] массивінің жұп мәндерінің арифметикалық ортасының бүтін бөлігін табу керек.

19) A[N] массиві берілген. A[N] массивінің тақ мәндерінің арифметикалық ортасының бүтін бөлігін табу керек.

20) A[N] массиві берілген. Барлық теріс мәнді  элементтерді  төменгі элементтер мәніне кішірейту.

21) A[N] массиві берілген. B[N] массивін A[N] массивінің элементтерімен мына түрде толтыру: басында жұп индекстармен элемент толтырылсын, содан соң – тақ.

22) A[N] массиві берілген. B[N] массивін A[N] массивінің элементтерімен мына түрде толтыру: басында тақ индекстармен элемент толтырылсын, содан соң – жұп.

23) A[N] массиві берілген. A[1] < A[i] < A[10] теңсіздігін қанағаттандыратын A[N] массивінің элементтерін В[N] массивіне толтыру.

          24) A[N]  массиві берілген. Мына теңсіздікті A[1] < A[i] немесе A[i]  < A[10] қанағаттандыратын A[N] массивінің элементтерімен B[N] массивін толтыру керек. Толмай қалған B[N] массивінің элементтерін A[N] массивінің элементтерімен толтырыңыз.

25) N өлшемді бүтін мәнді массив берілген. Оны түрлендіріп, бірінші элементін жұп сандарға қосу керек. Массивтің бірінші элементін өзгертпеу керек.

         Б нұсқасының есептері:

Массивтiң элементтерiн тапсырманың орындауында кездейсоқ сандар генератордың көмегiмен туындату.

1) A[N]  массиві берілген. К позициясына оңға жылжуды орындау, к - оң элементтердің мәні.

2) A[N]  массиві берілген. К позициясына оңға жылжуды орындау, к - теріс элементтердің мәні.

3) A[N]  массиві берілген. К позициясына солға жылжуды орындау, к - A[N] массивінің нөлдік элементтердің мәні.

 4) A[N]  массиві берілген. К позициясына оңға жылжуды орындау, к - A[N] массивінің нөлдік элементтердің мәні.

           5) N өлшемді бүтін санды массив берілген. К позициясына оңға жылжуды орындау,  к - жұп элементтердің мәні.

6) N өлшемді бүтін санды массив берілген. К позициясына оңға жылжуды орындау, к - тақ элементтердің мәні.

7) N өлшемді бүтін санды массив берілген. К позициясына солға жылжуды орындау, к - тақ элементтердің суммасының мәні.

 8) N өлшемді бүтін санды массив берілген. К позициясына солға жылжуды орындау, к - бірінші және соңғы  элементтердің орта арифметикалық мәні.

 9) N өлшемді бүтін санды массив берілген. К позициясына оңға жылжуды орындау, к - жұп элементтердің суммасының мәні.

 10) A[N]  массиві берілген. К позициясына оңға жылжуды жүзеге асыру, к - элементтер саны, минималды және максималды элементтер арасында орналасқан.

11) A[N]  массиві берілген. Барлық оң элементтерді минимал мәнге кішірейту. К позициясына оңға жылжуды жүзеге асыру, к -   оң элементтердің мәні.

12) A[N]  массиві берілген. Барлық теріс элементтерді максимал мәнге үлкейту.  К позициясына солға жылжуды жүзеге асыру, к -   теріс элементтердің мәні.

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

14) N өлшемді массив берілген. К позициясына солға циклдық жылжуды жүзеге асыру, к -  минималды элементтің индексі.

15) N өлшемді массив берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - максималды элементтің индексі.

16) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің оң мәндерінің арифметикалық ортасының бүтін бөлігі.

17) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің теріс мәндерінің арифметикалық ортасының бүтін бөлігі.

18) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің жұп мәндерінің арифметикалық ортасының бүтін бөлігі.

19) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің тақ мәндерінің арифметикалық ортасының бүтін бөлігі.

20) A[N]  массиві берілген. Барлық теріс мәнді элементтерді төменгі элементтің мәніне өзгерту. К позициясына оңға жылжуды жүзеге асыру, к - оң элементтердің мәні.

 21) N өлшемді массив берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - жоғарғы элементтердің саны.

22) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің оң элементтерінің орта арифметикалық мәнінің қалдығы.

23) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің теріс элементтерінің орта арифметикалық мәнінің қалдығы.

24) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің жұп элементтерінің орта арифметикалық мәнінің қалдығы.

25) A[N]  массиві берілген. К позициясына оңға циклдық жылжуды жүзеге асыру, к - A[N]  массивінің тақ элементтерінің орта арифметикалық мәнінің қалдығы.

Мысал 1. A[n] массиві берілген. A[n] массивінің соңғы элементінен бастап B[n] массивін толтыру. B[n] массивіндегі оң элементтердің санын табу керек.

Сөз жазба:

Алгоритмнің басы:

 1)  Массивке өлшем беру, яғни тұрақты n-ге мән беру;

 2)  A[n] массивін кез-келген сандармен толтыру;

 3)  Айнымалыны нөлге теңестіру pol және j=n;

 4)  Берілген параметрлермен цикл құру i=1; n;1. Циклдың ішінде:

- B[n] массисінің элементіне A[n] массивінің элеменін иелендіру, яғни      B[j]= A[i];

-   J= j-1;

- Тексеру: егер B[j]>=0, онда оң элементтердің санын 1-ге үлкейту, яғни pol= pol+1, немесе келесі циклға көшу;

5)  B[n] массивінің оң элементтерінің санын шығару;

6)  B[n] массивінің элементтерін шығару;

7)  алгоритмнің соңы.

 

2.4 суретте А есебінің шешудегі кескіндік алгоритмінің блок-сұлбасы келтірілген

2.4 сурет – А есебінің блок-сұлбасы

Мысал 2. A[n] массиві берілген. К позициясына оңға жылжуды жүзеге асыру.

Сөз жазба:

1)  алгоритмнің басы;

2)  массивке өлшем беру, яғни тұрақты n-ге мән беру;

3)  a[n] массивін кез-келген сандармен толтыру;

4)  жылжуға сан мәнін беру;

5)  берілген параметрлермен i=1; k;1 цикл құру. Циклдың ішінде:

- Соңғы элементті есте сақтау buf=a[n];

-  Берілген параметрлермен j = n; 1;-1 цикл құру. Циклдың ішінде:Келесі элементке алдындағыға иелену, яғни a[j]=a[j-1];

-  j бойынша циклдың соңында бірінші элементке соңғысын иемдену, яғни a[1]= a[n];

7)   і бойынша циклдың соңында a[n] массивінің элементін шығару;

8)   алгоритмнің соңы.

 

2.5 суретте Б есебінің графикалық алгоритмдік шешуінің блок-сұлбасы келтірілген.

2.5 сурет. Б есебінің блок-сұлбасы

10 Зертханалық жұмыс №8. Бір өлшемді массивтердің өңдеу алгоритімінің бағдарламалық өңделуі

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

№7 зертханалық жұмыста берілген тапсырманың нұсқалары

Мысал 1. A  массиві берілген. В  массивін A  массив элементтерімен толтыру , соңынан бастап. В  массивінің теріс элементтерінің санын тап.

Бағдарлана мына түрде болуы мүмкін:

#include <stdlib.h>

# include <conio.h>

# include <stdio.h>

#define n 10

int main ()

{  int buf,j,pol,I,b[n], a[n];

       for (I = 0; I < n; i++)

         a[i]=rand()%10-5;

 pol=0;

   printf (“\n \n a[n] Шығарылған массив \n”);

  for (i=0;i< n;i++)

   printf (“%d “,a[i]);

   j=n-1;

  for (i=0;i< n;i++)

    {b[i]=a[n-1];

      n=n-1;

       if (b[i]>=0)pol++;    }

printf («\n Оң таңбалы элементтер саны\n pol=%d»,pol);

printf («\n \n b[n] Массивты шығару \n»);

for (i=0;i< n;i++)                           

   printf (“%d “,b[i]);

     for (i=0;i<pol;i++)

return 0;}

 

 

 

Бағдарламаның орындалу нәтижесі:      

a[n] Шығарылған массив

2      2  3 -4 -5 -1 -2 -3 -7 9

Оң таңбалы элементтер саны 

pol=4                               

b[n] Массивті шығару

9 -7 -3 -2 -1 -5 -4 3 2 1

Мысал 2. A  массиві берілген. Оң жаққа К позициясы жылжу керек. Бағдарлама мына түрде болуы мүмкін:

#include <stdlib.h>

# include <conio.h>

# include <stdio.h>

#define n 10

int main ()

{  int buf,j, K,I, a[n];

       for (I = 0; I < n; i++)

         a[i]=rand()%10-5;

    K=4;

                      printf («\n \n a[n] Шығарылған массив \n»);

 for (i=0;i<n;i++)

   printf (“%d “,a[i]);

     for (i=0;i<K;i++)

   { buf=a[n-1];

      for(j=n-1;j>0;j--)

      a[j]=a[j-1];

      a[0]=buf;    }

       printf (“\n \n  а  массивін %d позициясына жылжыту \n”, K);

    for (i=0;i<n;i++)

      printf (“%d “,a[i]);

    printf (“\n”);

  system(“PAUSE”);

  return 0;}

                  

Бағдарламаның орындалу нәтижесі:

                       

a[n] Шығарылған массив

9 -7 -3 -2 -1 -5 -4 3 2 1

  а  массив элементтерін4 позицияға жылжыту

-4 3 2 1 9 -7 -3 -2 -1 -5

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

1)  Айнымалы массив түрлері қалай анықталады?

2) Массив элементтерін өңдеуде Си тілінің қандай операторлары қолданылады?

3) Сілтеуші көмегімен матрицаның жеке элементіне бару жолы қалай жүзеге асады?

4)  Матрицаның элементтері экранға қалай шығарылады?

5)  Унарлы операциясының мәні қандай?

6)  Унарлы операциясының мәні қандай?

7)   өрнегі uk=a өрнегіне балама бола ала ма?

8)   өрнегі мен   өрнегі бірдей ме?

10.1  Екі текті массив алгоритмін өңдеу

Жалпы мәліметтер

Массив- бұл бірдей атқа ие болатын жад ұяшықтарының тізбектелген тобы. Массивтің жеке элементіне бару жолы элементтің реттік номері (индекс) мен массив атын сілтеу әдісімен жүзеге асады. Индекс массивтің басына қатысты элементтің жағдайын анықтайды. Қарапайым түрі екі өлшемді массив және массив элементі ретінде массив болғандықтан көп өлшемді массивті анықтауға болады. Екі өлшемді массивті матрица деп атайды. Массивті  сипаттау барысында оның бірінші өлшемі оның жолын, екінші-бағанының    санын сипаттайды. Екі өлшемді массив int a .

а[0][0] a[0][l] a[0][2] a[0][3]

а[1][0] a[1][l] a[1][2] a[1][3]

Бірінші индекс-жол номері екінші индекс-баған нөмері.

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

#include<stdio.h>

#include<stdlib.h>

#define n 10            

void main()

{  int a[n][n],i,j,k,*pa,s1;

    pa=&a[0][0];

    for(i=0;i<n;i++)       

   {for(j=0;j<n;j++)

      {*pa=rand()%9; 

         printf("%d  ",*pa);   pa++;  }

  printf("\n");}               

     getch();

}

11 Зертханалық жұмыс №9. Екі текті массив алгоритмін өңдеудің сөздік және кескіндік жазбасы

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

А тапсырмасының нұсқалары:

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

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

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

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

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

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

7) A [6, 6] массив берілген. Келесi ереже бойымен В(6) массивін құрастыру: Егер нөлдiк элементтердi сан нөл емес элементтердi сан ал массивтiң J бағанасында артық болса, (J ) 1 берсiн, (J ) басқа жағдайда 0 беру.

8) A [8, 8] массив берілген. Жоғары қосымша қиғаш сызық орналасқан элементтердi ара-арасындаларды ең жоғары элементтi табу. Жолдың элементi және қиылысуында ең жоғары элементте болатын бағананың орындарымен алмастыру.

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

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

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

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

13) A [7, 7] массиві берілген. Массивтiң элементтерi жолма-жол ретке келтiру.

14) A [6, 6] массиві берілген. Бiр реттен астам қайталанған элементтердi ара-арасындаларды сермеудi табу.

15) A [8, 8] массиві берілген. Массивтiң жергiлiктi төменгі санын табу.

16) A [7, 7] массиві берілген. Жұп бойынша әр түрлi элемент қосып жасалған бағаналардың санын табу.

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

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

19) A [8, 8] массиві берілген. Қиғаш сызықтардың нөл емес элементтерi, қатарлас бас қиғаш сызықтың ең жоғары шығармасын табу.

20) A [7, 7] матрицасы берілген. Арасында элементi бас және қосымша қиғаш сызықтарда тұрған ең үлкен табылсын және бұл қиғаш сызықтардың қиылысу тұрған элементi бар оның орындарымен алмастыру керек.

21) Бүтiн сандардың екi өлшемдi массивi берілген. Массивтiң максимумы оның минимум болатын жолмен болатын жол орынды алмастыру.

22) Бүтiн санды элемент тұратын екi өлшемдi массивте модулға және соңғы оң элементтер бойымен әр бағанада орын ең үлкен алмастыру;

23) Бүтiн санды элемент тұратын екi өлшемдi массивте бiрiншi және соңғы терiс элементтер әр бағанада орынды алмастыру;

24) Бүтiн санды элемент тұратын екi өлшемдi массивте әр жолда орын ең үлкен алмастырсын және ең кiшi элементтер;

25) Бүтiн санды элемент тұратын екi өлшемдi массивте әр бағанасында орындарымен [a, b] кесiндiге және бiрiншi терiс элемент тәуелдi бiрiншi алмастыру;

 

Б тапсырмасының нұсқалары:

1) Бүтiн санды тiк төртбұрышты матрица берілген. Тап қалған матрицада бiр реттен астам кездесетiн сандардың ең жоғарысын анықтау.

2) Бүтiн санды тiк төртбұрышты матрица берілген. Бүтiн санды матрицаны жолдың сипаттамасымен оныңның оң жұп элементтерiнің қосындысын атаймыз. Тап қалған матрицаны жол қайта орналастыра, сипаттамаларды өсуi бар сәйкестiкте оларды орналастыру.

3) Бүтiн санды тiк төртбұрышты матрица берілген. Элемент бiрдей топтамада ең ұзын болатын жолдың нөмiрiн анықтау.

4) Бүтiн санды квадрат матрицасы берілген. Қиғаш сызықтардың элементтерi, матрицаның қатарлас бас қиғаш сызығының сомаларды ара-арасындаларды максимумын анықтау.

5) Бүтiн санды квадрат матрицасы берілген. Қиғаш сызықтардың элементтерiнiң модульдары, матрицаның қатарлас қосымша қиғаш сызығының сомаларды ара-арасындағыларды минимумын анықтау.

6) Бүтiн санды тiк төртбұрышты матрица берілген. Жолдың нөмiрi және матрицаның барлық қайқы нүктелердiң бағаналарын анықтау.

Ескерту:

Егер Aij i-шi жолда және ең жоғары j ең төменгi элемент болып табылса – m- олардың бағаны болса, ал матрица Аij  нүктесi болады.

7)  8-шi өлшемдiмен тап қалған матрица үшiн денелiк элемент ең болмаса, бiр матрица болатын жол элементтер қосындысы  8-ді табу керек.

8) Бүтiн санды матрицаны бағананың сипаттамасымен оның терiс тақ элементтерiнiң модульдарының сомасын атаймыз. Денелiк элемент бiр отрица ең болмаса болатын бағана элементтердi сома сол табу.

9) Бүтiн санды тiк төртбұрышты матрица берілген. Төменде орналасқан қосымша қиғаш сызықтардың оң элементтердің қосындысын анықтау.

10) Реті n ақиқат квадрат матрицасы берілген. Жоғары бас қиғаш сызықта орналасқан элементтердiң модулдерінің қосындысын табу керек.

11) Теңдеулердiң сызықтық жүйенiң еселiктерi тiк төртбұрышты матрицаны өңдеу тапсырылған. Қалған мөлшердiң орташа арифметикалық элемент жолдардың санын табу.

12) Рет n нақты квадрат матрицасы берілген.  Ең болмаса бiр оң элемент болатын жолдардың бiрiншi нөмiрiн табу.

13) Рет n нақты квадрат матрицасы берілген. Бiр нөл емес элемент ең болмаса болатын жолдардың соңғы нөмiрін табу.

14) Рет n нақты квадрат матрицасы берілген. Тақ жолдардың оң элементтерiн қосындысын табу.

15) Бүтiн санды тiк төртбұрышты матрица берілген. Бiр нөлдiк элемент ең болмаса болатын бағаналардың бiрiнші нөмiрін анықтау.

16) Бүтiн санды тiк төртбұрышты матрица берілген. Бiр де бiр терiс элемент болмайтын бағаналардың бiрiншi нөмiрін табу.

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

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

19) Бүтiн санды квадрат матрицасы берілген. Қиғаш сызықтардың элементтерi, матрицаның қатарлас бас қиғаш сызығының қосындыларының арасындағы төменгісін анықтау.

20) Матрицада Аij элементтiң көршiлерiмен Аi элементтi атаймыз. - 1, j-1. Аi-1, j, Аi - 1, j+ 1, Аi, j-1, Аi, j+ 1, + 1-шi Аi, j-1. Аi+ 1, j, + 1, j+ 1-шi Аi. Матрицаның тегiстеуiн операция бастапқы матрицаны тиiстi элементтiң орташа арифметикалық бар көршiлерiн тегiстелген матрицада әр элементi төменде бас қиғаш сызық орналасқан элементтердiң модульдарының қосындысын  табылуы сияқты алынатын сол мөлшердiң жаңа матрицасын бередi.

21) Теңдеулердiң сызықтық жүйенiң еселiктерi тiк төртбұрышты матрицаны өңдеу тапсырылған. Аз мөлшерлі орташа арифметикалық элементтің бағаналарының санын табу.

22) Рет n ақиқат  квадрат матрицасы берілген. Элементтің ең болмаса бiреуі оң болатын бағаналардың бiрiншi нөмiрін табу.

23) Рет n ақиқат квадрат матрицасы берілген. Элементтің ең болмаса бiреуі нөл болмайтын бағаналардың соңғы нөмiрін табу.

24) Рет n ақиқат квадрат матрицасы берілген. Жұп жолдардың оң элементтерiнің қосындысын табу.

25) Бүтiн санды тiк төртбұрышты матрица берілген. Элементтің ең болмаса бiреуі нөл болатын жолдардың бiрiншi нөмiрін анықтау.

 Мысал. 8-де 8-шi мөлшерiмен бүтiн санды матрица берілген. Мұндай матрицаның жолы k дәл келедi – бағана ретiнде k табу керек. Мұндай жолдардың нөмiрiн шығару керек.

Сөз жазба:

1)  алгоритмның басы;

2) массивтiң өлшемдiгiн жасауға жөн сiлтеп отыру, онда n және m    тұрақты 8-шi мән беруге болады;

3) [m ] [n ] a массивтi толтыру;

4) бойымен сыртқы оралым k = 1 ұйымдастыру n;1. K: бойымен iшiнде оралым

 - p тура келудiң белгiсiне 1-шi мәндi беру, яғни

 - бойымен iшкi оралым j = 1 ұйымдастыру m;1. J: бойымен iшiнде     оралым

- k элементтерi бар жолдың элементтерiн тура келуге тексеру k бағана. Егер элементтер дәл келмесе, онда :, онда, яғни [j ] [k ] a [k ] [j ] a тең:

 - p тура келудiң белгiсiне p = 0 -шi мәндi беру

 - j бойымен iшкi оралымды үзу

 - k бойымен сыртқы оралымға өтсiн, басқа жағдайда iшкi оралымды жалғастыру;

- iшкi оралымды аяқтау арналған тексеру: егер p = 1, онда k жолдың нөмiрiн алып шығу;

- сыртқы оралымды аяқтау арналған 5-шi тарауға өту.

5) алгоритмның аяғы.

Суретте 2.6 блок-сұлбасы, тапсырманың шешiмiнiң алгоритмін кескіндеу түрiнде жазба келтiрiлген.

2.6 сурет - А тапсырмасының блок-сұлбасы

 

Мысал. 8-де 8-шi мөлшерiмен бүтiн санды матрица берілген. Бiр терiс элемент ең болмаса болатын жол элементтерiнің қосындысын табу.

          Сөз жазба;

1) алгоритмның басы;

2) массивтiң өлшемдiгiн жасауға жөн сiлтеп отыру, онда n және m тұрақты 8-шi мән беруге бар

3) [m ] [n ] a массивтi толтыру;

4) бойымен сыртқы оралым i = 1 ұйымдастыру n;1. I: бойымен iшiнде оралым;

 - терiс элемент P1-дің белгiсiне 0-шi мәндi беру, яғни P1 = 0 және s айнымалыны нөлге теңестiру;

 - бойымен iшкi оралым j = 1 ұйымдастыру m;1. J: бойымен iшiнде оралым;

 - k  бағананың элементтерi бар жолының элементтерiн тура келуге тексеру. Егер элементтер дәл келмесе, онда : онда, яғни [j ] [k ] a [k ] [j ] a тең;

- p тура келудiң белгiсiне p = 0 -шi мәндi беру - j бойымен iшкi оралымды үзу;

 - k бойымен сыртқы оралымға өтсiн, басқа жағдайда iшкi оралымды жалғастыру;

 - iшкi оралымды аяқтауға  арналған тексеру: егер p = 1, онда k жолдың нөмiрiн алып шығу; сыртқы оралымды аяқтауға арналған 6-шы тарауға өту.

 5 ) алгоритмның аяғы.

 

 Суретте 2.7 шешiмнiң алгоритмнің кескін түрiнде жазба келтiрiлген.

2.7 сурет-Б тапсырмасының блок-сұлбасы

12 Зертханалық  жұмыс №10. Екі өлшемді массивтерді өңдеу алгоритмін бағдарламалы жүзеге асыру

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

Тапсырма.

Матрицаны өңдеудің бағдарламасын жазу. Кездейсоқ сандар генераторы функциясын пайдалана отырып массивтің элементтерін толтырыңыз.

№ 9 зертханалық жұмыста берілген тапсырманың нұсқалары.

Мысал.  8 -де 8 өлшемді матрицасы берілген. Матрицаның k-ші бағанымен сәйкес келетін k-ші жолды табу керек. Сол жолдарлың нөмерін шығару керек.

 #include <stdio.h>

#include <stdlib.h>

#define m 8

#define n 8

int main()

{  int     a[n][m];    /* nхm матрицаны жариялаймыз */

   int     k, j, p;  /* Сәйкестіктің санауы және белгісі */ 

/* Кездейсоқ сандар генераторы ретінде матрицаны толтырамыз */

    for (k = 0; k < m; k ++)

    for (j = 0; j < n; j++)

     a[k][j]=rand()%10-1;

printf("\n \t\t\t Шығарылатын массив мына түрде болады:\n ");

 /* Матрицаның қорытындысы*/

for (k = 0; k < m; k ++)

   { for (j = 0; j < n; j++)

      printf(“%d  “,a[k][j]);

      printf("\n ");

    }

        printf("\n \t\t\t Шешімнің нәтижесі:");

     for (k = 0; k < m; k ++)

      { p=1;         

         for (j = 0; j < n; j++)

       { if (a [k][j] != a [j][k])

            { p=0; 

                break;

            }

        }

    /* р=1 жағдайда экранға тиісті жолдың нөмерін енгіземіз */

      if (p==1) printf("\n Сәйкес келген жол мен бағаның нөмері= %d ", k);

    }

 

if (p==0) printf("\n Бірдей жол мен баған жоқ

");

getchar();                

}     

 

 

Бағдарламаның орындалу нәтижесі:

шығарылған массив мына түрде болады:

2 7 2 7 1 4 0 3                              

1 0 7 6 0 -8 3 5

2 7 1 8 1 4 9 3

9 2 8 5 2 0 0 6

7 1 1 3 9 3 9 1

8 2 4 9 1 -6 4 9

0 3 9 0 9 4 8 8

1 8 3 2 8 2 8 0

                        

шешімнің нәтижесі:

Сәйкес келген жол мен бағанның нөмері= 2

Сәйкес келген жол мен бағанның нөмері=6

Мысал. 8-де 8 өлшемді бүтін санды матрица берілген. Ең болмағанда бір теріс элементі бар  жолдардағы элементтердің қосындысын табу керек.

#include <stdio.h>

#include <stdlib.h>

#define m 8

#define n 8

int main()

{  int     matrix[n][m];    /* nхm  Матрицаны жариялаймыз */

   int     i, j, p;  /* Сәйкестіктің санауы мен белгісі*/ 

int  p1, iSumm; /* Қосындыны санау үшін        

теріс элемент пен айнымалылыны табудың сипаты */

/* Кездейсоқ сандар генераторы ретінде матрицаны толтырамыз */

    for (i = 0; i < m; i++)

    for (j = 0; j < n; j++)

      matrix[i][j]=rand()%10-1;

printf("\n \t\t\t  ШЫҒАРЫЛАТЫН МАССИВ МЫНА ТҮРДЕ БОЛАДЫ:\n ");

 /* Матрицаның қорытындысы:*/

for (i = 0; i < m; i++)

   { for (j = 0; j < n; j++)

      printf(“%d  “,matrix[i][j]);

      printf("\n ");

    }

printf("\n \t\t\t ТАПСЫРМАНЫҢ ЕКІНШІ БӨЛІМІНІҢ НӘТИЖЕСІ:");

    printf("\n\n");

    for (i = 0; i < m; i++)

    {

        /* Айнымалыларға бастапқы мән береміз*/

        iSumm = 0;

        p1=0;

        for (j = 0; j < n; j++)

        {   /* і- ші жолдың мәндерін қосамыз */

                iSumm += matrix [i][j];

/* Қосындыны экранға шығару үшін, қажеттілігін сипаттайтын ең болмағанда бір теріс элемент табатын санды p1=1 деп жазамыз */

           if (matrix [i][j] < 0) p1=1;                                    

        }       

        /* Ең болмағанда бір теріс элемент табылған жағдайда і-ші жолдың элементтерінің қосындысын экранға шығарамыз */

    if (p1==1) printf("Жол элементтерінің қосындысы #%d = %d\n", i+1, iSumm);

    }

system("PAUSE");/* Экранның тоқталуы */       

      return 0;       

}

 

Бағдарламаның орындалу нәтижесі

шығарылған массив мына түрде болады:

2 7 2 7 1 4 0 3

1 0 7 6 0 -8 3 5

2 7 1 8 1 4 9 3

9 2 8 5 2 0 0 6

7 1 1 3 9 3 9 1

8 2 4 9 1 -6 4 9

0 3 9 0 9 4 8 8

1 8 3 2 8 2 8 0                      

тапсырманың екніші бөлімінің нәтижесі:

1-ші жолдың элементтерінің қосындысы #1 = 14

5-ші жолдың элементтерінің қосындысы #5 = 31

 

 

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

1)  Айнымалы массив түрлері қалай анықталады?

2) Массив элементтерін өңдеуде Си тілінің қандай операторлары қолданылады?

3) Сілтеуіш көмегімен матрицаның жеке элементіне бару жолы қалай жүзеге асады?

4)  Матрицаның элементтері экранға қалай шығарылады?

5)  & унарлық операциясының нәтижесі қандай?

6)  * унарлық операциясының нәтижесі қандай?

7)  теңдігі қандай?

8)  -ға балама бола ала ма?

9)   мен бірдей мәні бола ма?

 

12.1   Деректерді іздеу алгоритмі

 

Жалпы мәліметтер.

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

Біртіндеп сызықты іздеу - қарастырылып отырған мәннің ізделініп отырған мәнмен сәйкес келмейтін кезекті салыстыру жолымен жүзеге асатын іздеудің қарапайым түрі.

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

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

Қорыта келгенде бұл әдістің ойы төмендегідей болады. Реттелген массивтің элементтерінің арасынан керекті мәнді іздеу (өсу бойымен немесе азаю бойымен) сол массивтің орталық элементінің мәнін табудан басталады. Бұл элементтің мәні ізделініп отырған мәнмен теңеседі және салыстырудың нәтижелерінен тәуелділікте нақтылы іс-әрекеттер қабылданады. Егер ізделініп отырған элемент пен орталық мәндер теңескен жағдайда іздеу сәтті аяқталады. Егер ізделініп отырған мән орталық мәннен үлкен немесе кіші болса, онда тиісінше орталық мәннің оң немесе сол жағында орналасқан элементтерден массив құрылады. Содан соң іздеу жаңа массивте қайталанады.

13  Зертханалық жұмыс  №11. Іздеу алгоритмдерінің сөзбе сөз және кескіндік сипаттамалары

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

А тапсырмасы.

 № 7-8 зертханалық жұмыстарда А тапсырмасын орындау кезінде қол жеткізген массивтің алғашқы және соңғы элементтер қосындысының орташа мәніне тең элементті кезекті іздеу алгоритмін сөзбе -сөз және кескіндік тұрғыда сипаттау.

А тапсырмасының нұсқалары.

 Тапсырмаларда № 7-8 зертханалық жұмыстардағы мәліметтер  А тапсырмасының нұсқаларына сәйкес келеді.

Б тапсырмасы.

№ 7-8 зертханалық жұмыстарда Б тапсырмасын орындау барысында қол жеткізілген k санына тең элементті бинарлық іздеу алгоритмін сөзбе - сөз және кескіндік тұрғыда сипаттау.

Б тапсырмасының нұсқалары:

Тапсырмаларда № 7-8 зертханалық жұмыстардағы мәліметтер Б тапсырмасының нұсқаларына сәйкес келеді.

14 Зертханалық жұмыс №12. Массив элеметтерін іздеу алгоритмдерінің бағдарламалық жазбалары

Жұмыстың мақсаты: іздеу алгоритмдерінің массив элементтерін Си тілінде бағдарламалап үйрену.

А тапсырмасы:

№ 7-8 зертханалық жұмыстарда А тапсырмасын орындау кезінде қол жеткізген массивтің бірінші және соңғы элементтері қосындының орташа мәніне тең элементін кезекті іздеу алгоритмін бағдарламалық тұрғыда сипаттау.

А тапсырмасының нұсқалары:

Тапсырмалар  № 7-8 зертханалық жұмыстарда А тапсырмасының нұсқаларына сәйкес келеді.

Б тапсырмасы:

№ 7-8 зертханалық жұмыстарда Б тапсырмасын орындау барысында қол жеткізілген k санына тең іздеу элементінің бинарлы алгоритмін бағдарламалық тұрғыдан сипаттау.

Б тапсырмасының нұсқалары: Тапсырмалар  № 7-8 зертханалық жұмыстарда Б тапсырмасының нұсқаларына сәйкес келеді.

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

1) Сызықтық құрылымда іздеу алгоритмдерінің алуан түрлілігін қалай түсіндіруге болады?

2) Кезекті іздеумен салыстырғанда шектеулі іздеудің ерекшелігі неде?

3) Сызықты жиында нешінші ретті элемент (бiрiншi, соңғы) тікелей іздеу алгоритмін кепiлдiк бередi? Осы жағдайда қарап шығу қалай орындалу керек?

4) Сызықты жиында нешінші ретті элемент (бiрiншi, соңғы) бинарлы іздеу алгоритмін кепiлдiк бередi? Жауабыңызды дәлелдеңіз.

5)Дискреттi жиындағы бинарлы iздеу алгоритмінің еңбек сыйымдылығы қалай жиынның қуатынан бағынышты болады?

6) Заттық жиындағы бинарлы iздеуi алгоритмін орындау уақыты нелiктен элементтер санына бағынышты болмайды?

7) Бинарлы іздеу алгоритмінің мәні?

8) Кезекті іздеу алгоритмінің мәні?

14.1    Деректердің динамикалық құрылымын өңдеу алгоритмі

Жалпы мәліметтер.

Деректердің статиcкалық құрылымы былай сипатталады:

-       Оның өзіне қарататын аты бар.

-       Оған бағдарлама көрсетілімі процесінде жады бөлінеді.

-       Күрделі құрылымдағы элементтер көлемі оны сипаттау барысында белгіленеді.

-       Кұрылым көлемі бағдарламаны орындау барысында өзгертіле алмайды.

Деректердің динамикалық кұрылымы былай сипатталады:

-       Оның аты болмайды.

-       Оған бағдарламаны орындау процесінде жады бөлінеді.

-       Құрылым элементтерінің көлемі белгілене алмайды.

-       Құрылым көлемі бағдарламаны орындау процесінде өзгертіле алады.

-       Бағдарламаны орындау процесінде құрылым элементтері арасында байланыс өзгере алады.

Мәлiметтердi әр динамикалық құрылым (оның мәнi - бұл объектiнiң мекен-жайы) арқылы динамикалық құрылымға бару жолын жүзеге асырылатын «көрсеткiш» статикалық айнымалы түрiндегi салыстырады. Динамикалық объектiнiң жасауы үшiн new: унарлық операцияны пайдаланады

new есiм_ түрiндегi

немесе

инициализатор new есiм_ түрiндегi

New операция мөлшерлерi есiм түрiндегi анықталатын мәлiмет түрге сәйкес келген (динамикалық ) негiзгi жадта бөлiмше еркін шығаруға мүмкiндiк бередi.

Көрсеткiш - бұл басқа айнымалы немесе жадтың бөлiмшесiнiң мекен-жайын сақтайтын айнымалы.

Көрсеткiш төмендегiше жариялайды:

<айнымалының есiмi> * түр;

Көрсеткiш айнымалылардың тiзiмiнде жариялайды, бiрақ олардың есiмiн алдында * таңбаға тұрғызылады. Көрсеткiш ол үшiн жариялайтын түрiндегi әрқашан айнымалыға көрсетедi.

 Кейбiр айнымалы қолданылған унарлық операцияның керек бұл айнымалының мекен-жайы бiзге көрсетедi, ал оның ағымдағы мәнi емес. Егер uk айнымалы көрсеткiш сияқты жарияласа, онда uk=&x енгiзу операторын бiлдiредi: "айнымалы x мекен-жайын алсын және айнымалы оның мәнiн - uk көрсеткiшке" берсiн.

* көрсеткiш қолданылған унарлық операция көрсеткiш сiлтейтiн iшiндегi жады  ұяшығына бару жолын қамтамасыз етедi. Мысалы, *uk "онда, uk көрсететiн мекен-жай бойымен болатын" сияқты сөз сипаттауға болады.

Динамикалық объектiнiң тiршiлiгiнiң ұзақтығы - бағдарлама немесе анық оның жойылуына дейiн, new операция оның жасалуының нүктесiн аяқтайды.

(Динамикалық айнымалы шыққан жадының босауы) динамикалық объектiнiң жойылуы delete: операциямен жүзеге асырылады

есiм__ көрсеткiш delete;

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

Массив үшiн шығарылған жадының босауы үшiн бұл операцияның келесi түрлендiруiн пайдаланады:

есiм__ көрсеткiш [] ] delete;

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

struct list

{ int n;

type elem [ k ]; }

Егер n 0 тең, онда болса бос тiзiм болса n k тең, n бұл жерде есiммен элемент (элементтер) мәлiметтер тiзiмінде нақты санды анықтаса,  онда тiзiм толық; (массив бұл жағдайда) elem есiмнің элементтерінің тiзiм  жиыны, type өзi анықтайтын  тiзiм элементiнiң түрi.     

Динамикалық тiзiм - бұл көрсеткiш өзара сабақтас мәлiметтердiң жиыны.

Онда сызықты тiзiмді құрайтын элемент (тiзiм элементi) осы және (басқа барлық элементтер үшiн бұл әдiл бiрiншi және соңғы) келесi элементтің алдыңғысы боп тұр.

Сызықты бiр қисынды тiзiмi - бұл әр элементi кеңістіктің екiлiктерiнен тұратын динамикалық тiзiм. Бiр кеңістік (немесе онда сiлтеменi) ақпаратты, басқа кеңістікте келесi тiзiм элементiне сiлтемеде болады. Тiзiм элементi  «буын» деп аталады. Қорыта келгенде, тiзiм - бұл буындардың бiрiншiден соңғысына дейiн өзара тiркес сабақтасы болады.

 Тiзiмдердi өңдеудiң негiзгi операциялары болып табылады:

 1) оның мәнiмен немесе реттiк нөмiрі бойымен элементтiң берiлген мәнін iздестiру. Операциялық элементтің (егер элемент жоқ) барлық тiзiмі табылып немесе қаралып бiтедi. Егер  операцияда элемент нәтижесi тiзiмде немесе жоқ болып және анықтау керек болса, онда оның мекен-жайы немесе мәні болуы мүмкiн;

2) алдынғы жаңа элементтi тiзiмге (қыстырма ) енгізу немесе (бiрiншi элементтiң алдына сол санды немесе соңынан кейiн) элементтiң соңынан кейiн енгізу. Кейiн және/немесе алдында енгізуге болғанда, элементтi iздестiруде  кезінде енгізуге болады. Тiзiмнiң басы бiрiншi тiзiмге енгенде, алдынғы элементтiң енуі бас буынсыз айырбасталады. Элемент енгенде кейбiр сiлтемеден кейiн, элемент сiлтемесiн анықтау керек болған енгізуде анықталатын элементке айырбасталады;

3) тiзiмнің берiлген элементтерін (алып тастау ) шығару(бiрiншi элементтi алып тастау сол санда немесе соңғы). Элементті шығаруда iздестiру алдында болатын шығару. Iздестiру нәтижесінде элемент сiлтемесi алдына шығарылатын болуы керек, өйткенi сiлтеме кеңістіктен алып тасталатын  элементтегі тiзiм элементіне айырбастайды. Тiзiмде бiрiншi элементтi алып тастауда, тiзiмнiң басы бас буынсыз айырбасталады;

4 ) тiзiм буындарының саннын анықтау;

5 ) ақпараттық кеңістікте мән бойымен тiзiм элементтерiнiң реттiлеуi.

 

15 Зертханалық жұмыс №13. Сөздік және кескіндік жазудың алгаритмін динамикалық құрылымның мәліметін өңдеу. Сызықты бірбағытты тізім.

 

Жұмыстың мақсаты: көрсеткiш түрін зерттеу, бiрбағытқа бағыталған тiзiмдердi өңдеу және ұйымдастыруды білу.

 

Тапсырманың нұсқалары

1) X1, x2 нақ сан берілдi, . . . , (n = 2 және алдын ала белгiсiз) xn. (x1 - xn) тiзбекгi алынсын, (x2 - xn), . . . , ( xn-1 – xn ).

2) A1, a2 нақ сандардың тiзбегi берілген, . . . , (n = 2 және алдын ала белгiсiз) an . Егер тiзбегi кемiмеу бойымен ретке келтiрiлген болса, онда an, an-1 тiзбектi алу, онда оны өзгерусiз қалдырамыз, . . . , a1 .

3) X1 нақ сан берілген, ..., xn, p1, ..., pn. (n = 2 және мәні белгiсiз). X1 тiзбек, ..., xn және p1, ..., pn түзуге n материалдық нүктелердiң жүйесiн анықтайды: xi - координата, рi - i-шi нүктенiң салмағы i = 1, ..., n).  Тартылу орталығы  жүйесіне  жақын орналасқан   нүктені корсету. Егер мұндай нүктелер бiрнеше болса, онда олардан кез-келгенін алуға болады .

4) S1, s2 нышандарының тiзбегi берілген, . . . , n sn = 2 (және алдын ала белгiсiз). Сол нышандардың  бойымен бiр рет енген тәуелдi тiзбектердi алу.

5) S1, s2 нышандарының тiзбегi берілген, . . . , n sn = 2 ( және алдын ала белгiсiз). Нышандардың олардыңның бастапқы өзара ретiнiң сақталу  жолына әр нышанның тек қана соңғы енуі болатын тiзбегiн алу.

6) S1, s2 нышандарының тiзбегi берілген, . . . . S1 нүктеден не болғанын ажырату, s2 арасында s3 болғаны  белгiлi, . . . бiр нүкте ең болмаса ие болады. Егер S1, s2 , . . . , sn - бір нүкте нышандары. S1, s3 тiзбектi алу, . . . , егер n тақ және s2, s4 тiзбек болса sn, . . . , егер n жұп болса sn.

7) A1 нақ сандардың тiзбегi  берілген, ..., an. n = 2 және алдын ала белгiсiз. Егер a1 тiзбек болса, ..., an , өйткенi кему бойымен ретке келтiрiлген. егер a1 болса, a2 неге тең? … ? an ), онда оның өзгерусiз қалдырамыз. Әйтпесе an қолдаушыны алу, ..., a1.

8) X1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) xn. Есептеп шығару: x1xn + x2xn-1 + … + xnx1.

9) X1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) xn. Есептеп шығару: (x1 + xn)(x2 + xn-1) … (xn + x1).

10) X1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) xn. Есептеп шығару: (x1 + x2 + 2xn)(x2 + x3 + 2xn-1)(xn-1 + xn + 2x2).

11) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. (a1 - a2n)(a3 - a2n-2)(a5 - a2n-4) … (a2n-1 - a2) мәнін алу.

12) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. a1a2n + a2a2n-1 + … + anan+1 мәнін алу.

13) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. min(a1 + an+1, a2 + an+2, …, an + a2n) мәнін алу.

14) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. max (min(a1, a2n), min(a2, a2n-1), …, min(an, an+1)) мәнін алу.

15) A1 нақ сан бердi, ..., an. (n = 2 және алдын ала белгiсiз). a1-ге ие болатын ара-арасындағы сандарды, ..., an дәл келетiнін айқындау керек,.

16) R1 нақ сан берілген, ..., rn. (n = 2 және алдын ала белгiсiз). r1, ..., rn, r1, ..., rn тiзбектi алу керек.

17) R1 нақты сан берiлген, ..., rn. (n = 2 және алдын ала белгiсiз). r1, ..., rn, rn, ..., r1 тiзбекін алуалу керек. 

18) R1 нақты сан берілген, ..., rn. (n = 2 және алдын ала белгiсiз) rn, ..., r1, r1, ..., rn тiзбектi алу керек.

19) A1 нақты сан берілген, ..., (n = 2 және алдын ала белгiсiз) a2n. X1, y1, x2, y2 тiзбектi алынуға талап етiледi, xk, x1 yk, ..., xm - тiзбек a1 жұп мүшелерi ретте алынған, ..., an, y1 ал, ..., yl - тақ мүшелер, (m, l) k = min.

20) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. Дұрыс айқындасын, i = l үшiн, ..., n атқарылған:  ал ) ai = an+i болып табыл ) ai = 2an-i + 2a2n-i+ 1 ) 17нiң ai + a2n-i+ 1i г ) a2n-i+ 1 ai a2n-iлер.

21) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. Дұрыс айқындасын, i = l үшiн, ..., n атқарылған:  ai = an+i.

 22) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. Дұрыс айқындасын, i = l үшiн, ..., n атқарылған:  ai = 2an-i + 2a2n-i+1.

23) A1 нақ сан бердi, ..., (n = 2 және алдын ала белгiсiз) a2n. Дұрыс айқындасын, i = l үшiн, ..., n атқарылған: ai + a2n-i+1 > 17.

24) A1 нақты сан берілген, ..., (n = 2 және алдын ала белгiсiз) a2n. Дұрыс айқындасын, i = l үшiн, ..., n атқарылған:          a2n-i+1 < ai < a2n-i. Мәлiметтердiң динамикалық құрылымдарын өңдеуге алгоритмдердік бағдарламалау өткiзіледі.

 

16 Зертханалықлық жұмыс№14  . Сызықты бiр жаққа бағыталған тiзiмдер.

 

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

 

Мысал. A1 нақ сан берілген, ..., an (n = 2 және алдын ала белгiсiз). Егер a1 тiзбек болса, ..., an  бойымен кему ретімен  келтiрiлген. Егер a1 болса, (a2  … an), онда ол өзгеріссiз қалады. Әйтпесе an қолдаушыны аламыз, ..., a1.

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

struct st      

        {struct st *pc1;

        int c;

        struct st *pc;

        };

 int main()

{ struct st *str;

  struct st *beg=NULL;

  struct st *end=NULL;

   struct st *end1=NULL;

   struct st *buf=NULL;

  int min,P=0;

  char pr[4];

  printf("berilgen kurilimdi engiziniz");

   /*tizimnin kurilu jane engizu cikly*/

   do

    {   str= new st;//(struct stud*)malloc(sizeof(struct stud));

        printf("\n vvedi c=");

        scanf("%d",&str->c);

            /*tizim men buindi kosu

*/

         if(beg==NULL && end==NULL)

            {beg=str;str->pc1=NULL;buf=str;}

          else

  int min,P=0;

  char pr[4];

  printf("berilgen kurilimdi engiziniz");

   /* tizimnin kurilu jane engizu cikly */

   do                   

          { end1=str;end->pc=str;

            end1->pc1=buf;

          }

          end=str;

          end->pc=NULL;buf=str;

            printf("\n kelesi mandy engiz?");

      scanf("%s",pr);

      if (strcmp(pr,"no")==0)

          break;

       

     }while(1);

     printf("\n tizimnin kurami:");

      str=beg;min=str->c;

       while(str!=NULL)

          { if(str->c<min){P=1;break;}

           str=str->pc;

           } printf("\n tizim\n ");

       

        if(P==0)

        {str=beg;

           while(str!=NULL)

            { printf("  %d ",str->c);

            str=str->pc;

           }

       }

         else

         {str=buf;

           while(str!=NULL)

            {

              printf(" %d ",str->c);

            str=str->pc1;

         }

         }

          free(str);

          system("PAUSE");        

  return 0;

 

Бағдарламаның орындалу нәтижесі:

Berilgen kurilimdi engiziniz

 engiz c=7      

 kelesy mandi engiz?y

 engiz c=8

 kelesy mandi engiz?y

 engiz c=6

 kelesy mandi engiz?y

 engiz c=4

 kelesy mandi engiz?y

 engiz c=5

 kelesy mandi engiz?no

            tizimnin kurami:

 tizim          

 5 4 6 8 7              

                

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

1)  Көрсеткiш ұғымының түрлерін түсіндір.

2) Көрсеткiш айнымалы түрлері. Көрсеткiштермен жасалынатын операция түрлері.

3)  Статикалық және динамикалық объектiнiң ұғымы.

4) Жасау және динамикалық объектiнiң жойылуы. Динамикалық объектiмен жасалынатын  операция.

5) Тiзiмнiң ұғымы.

6) Сызықты бiр қисынды тiзiмiнiң ұғымы.

7) Бiр қисынды тiзiммен жасалынатын операция.

8) Бiр қисынды тiзiмiнiң тапсырмасы.

                                         

Қорытынды

                               

Негiзгi зертханалық жұмыстарды орындауда студенттерге көрсетiлген өзiндiк жұмысты орындауына  арналған. Теориялық материал және есептердiң шешiмiнiң толық мысалдары материалды зерттеп және тапсырманы ойдағыдай орындауға өз алдына дайындалады. Студенттердiң зертханалық жұмыстарын орындау нәтижеде блок-сұлба құрылымы және тiлдiң операторларын тиiмдi қолдануға арналған жаттығу бағдарламаларын көрсетеді.

 

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

 

1.  Эпштейн М.С. Программирование на языке С. - М.: «Академия», 2011.         

2. Эпштейн М.С. Практикум по программированию на языке С. - М.: «Академия», 2007.

3. Уэйт М и др. Язые Си. Руководство для начинающих. - М.: «Мир», 1988.

4. Керниган Б. Язык программировния Си. - М.: «Финансы и статистика», 1992.

5. Вирт Н. Алгоритмы и структуры данных. - М.: «Мир», 1989.

6. Березин Б.И. Начальный курс С и С++. - М.: «Диалог-Мифи», 2004.

7. Архангельский А.Я. Язык С++ в С++ BUILDER. - М., 2008.

8. Ишкова Э.А. С++ начала программирования. - М.: «Бином», 2011.

9. Коплиен Дж. Программирование на С++. - СПб., 2005.

10 Либерти Дж. Освой самостоятельно С++ за 21 день. - М., 2007.

11. Павловская Т.А. С/С++. Структурное  программирование. - СПб.: «Питер», 2010.

12. Подбельский В.В. Программирование на языке Си. – М., 2000.

13. Полубенцева М. С/С++ процедурное программирование. - СПб., 2008.

14. Культин Н. С/С++ в задачах и примервх.-СПб.: «БХВ-Петербург», 2011.

                 

 

А қосымшасы
Есеп беру қағазының үлгiсi
Коммерциялық емес акционерлiк қоғамы
АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ
«Ақпараттық технологиялар» факультеті
«Ақпараттық жүйелер» кафедрасы

 

№1, №2 зертханалық  жұмыстар бойынша есеп беру қағазы
«Алгоритмдеу, мәлiметтер құрылымы және бағдарламалау» пәні бойынша
Тақырыбы: «Сызықтық құрылымның алгоритмдері»
№1-нұсқа

 

               Орындаған: БИС-12-2 тобының
студенті Петров И.И
Тексерген: к.т.н. доцент
_______________Ни А.Г.
“______”__________2013

 

Алматы 2013г

 

Жиынтық жоспар 2013ж. реті193

Анна Генадивна Ни
Шынар Ихсанович Имангалиев
Мулдир Бертилековна Мухашова

 

АЛГОРИТМДЕУ, ДЕРЕКТЕР ҚҰРЫЛЫМЫ ЖӘНЕ БАҒДАРЛАМАЛАУ
5В070300 - Ақпараттық жүйелер мамандығының студенттері үшін
зертханалық  жұмыстарды жұмысты орындауға арналған
әдістемелік нұсқау

Редактор Қасымжанова Б.С
Стандарттау бойынша маман Н. Қ. Молдабекова

___.___.___. басуға қол қойылды
Пішімі 60х84 1/16
Таралымы 30 дана.
№1 типографиялық қағаз
Көлемі    оқу.-бас.ә.
Тапсырыс___.Бағасы360т.

«Алматы энергетика және байланыс университеті»
коммерциялық емес акционерлік қоғамының
көшірмелі-көбейткіш бюросы
050013, Алматы, Байтұрсынұлы көшесі, 126