Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Dim i As Integer, f As Integer



Блок II

1. Программалаудыңпарадигмалары: құрылымдық, модулдік және объектілі-бағытталған программалау.

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

Құрылымдық бағдарламалау

Оларға жататын бағдарламалау тілдері: Fortran, Pascal, C. Директивті бағдарлама іс-әрекеттерді қадам бойынша бейнелеп нәтижеге қол жеткізуді көрсетеді. Сондықтан мұндай бағдарламалау түсінуге жеңіл болады. Құрылымдық бағдарламалауда командалардың орындалу реті кіріс деректеріне толығымен тәуелді болады. Директивалық бағдарламалауда кезінде кодтың бөліктерін ішкі бағдарламаларға(функция, әдістер) локализациялау концепциясы пайда болды. Және соларды кейін негізгі бағдарламаның әр түрлі жерінен шақырады. Шақыру кезінде ішкі бағдарламаға қайсібір деректер аргументтер түрінде берілуі мүмкін; ал ішкі бағдарлама өз кезегінде негізгі бағдарламаға нәтижені қайтара алады,яғни оның орындалуы барысында алынған деректер. Модульдік бағдарламалау модуль деп аталатын түсінік негізінде құрылған. Бұл – жеке бағдарламалық модульдер түрінде жасалған логикалық өзара байланысқан функционалды элементтер жиыны. Модуль сипаттайды:

1. Бір кіріс және бір шығыс – кірісте бағдарламалық модуль анықталған шығыс деректерінің жиынын алады, мазмұндық өңдеуді жүзеге асырады және нәтижелік деректерді жиынын қайтарады, яғни стандартты IPO(Input-Process-Output) –кіріс-процесс-шығыс принципі жүзеге асырылады.

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

3. Логикалық тәуелсіздік–бағдарламалық модуль жұмысының нәтижесі шығыс деректеріне тәуелсіз, бірақ басқа модульдер жұмысының жұмысынан тәуелсіз.

4. басқа бағдарламалық модульдермен әлсіз ақпараттық байланыс–модульдер арасындағы ақпарат алмасу мүмкіндігінше минимизацияланған болуы керек.

5. өлшемі мен қиындығы бойынша қарастырылатын бағдарламалық элемент.

Модульдік бағдарламалау иерархиялық құрылымдарды қолдану мен компонент жүйенің қиындығы мен тәуелсіздікті қамтамасыз етумен күресудің екі ортақ тәсілдерін бағдарламаны құру процесі барысында жүзеге асырады. Бірінші тәсілді жүзеге асыру үшін ағаш түрдегі бағдарламаның модульдік құрылымын қолданады. Екінші тәсілді орындау үшін бағдарламалық модуль қанағаттанатын белгілі бір талалаптар құрылады, яғни «жақсы» бағдарламалық модульдің негізгі сипатттамалары анықталады.

Объектілі-бағытталған тілдерге жататын бағдарламалау тілдері: С++, Java, Python.

Бағдарламада объекті түрінде көрсетілген деректерге айқын көңіл бөлінеді. Объектілер хабар алмасу механизмі көмегімен өзара бір-бірімен әрекеттеседі. Программисттің мәселесі болып өзара әрекеттесу барысында керек нәтижеге қол жеткізуге болатын объектілерді жасау.

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

Ұрпақтық класстар әкелік класстың қасиеттерін иемденеді. 100%-дық мұрагерлік қажет болмаған жағдайда ұрпақтық класстағы әкелік класстың тәсілдерін қайта анықтайтын полиморфизм жүзеге асырылады. Инкапсуляция бұл деректер мен кодты дұрыс қолданбаудан және сыртқы араласудан қорғайтын, және оларды байланыстратын механизм. Объектіге бағытталған бағдарламалауда деректер мен код бірге бірігуі мүмкін. Бұл кезде объект құрылады. Басқа сөзбен айтқанда, объект инкапсуляцияны қолдайды.

2.Компьютердің логикалық схемасы. Программалау, компиляциялау және программаның орындалу орталары.

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

 

Программалау процесі үш кезеңге бөлінеді:

· есепті шешудің алгоритмін құру;

· программа құру;

· жасалған программаны тексеру.

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

Машина тілінде программалау деп программаға енетін командалардың реальды кодтарын тікелей жазуды айтамыз.

Командалардың кодтары әр түрлі санақ жүйелерінде берілуі мүмкін:

· екілік;

· сегіздік;

· он алтылық;

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

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

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

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

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

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

3 Программалау тілдерінің негізгі нысандары: типтер, тұрақтылар, айнымалылар, процедуралар. Олардың мақсатыжәне ара қатынасы.

 

Сақтау, коррекция және деректердi беру үшiн бағдарламаның iшi арналған бағдарламаның элементi айнымалы деп атайды. Паскаль барлық айнымалы бағдарламалар турбо сипаттамалар бөлiмiнде айнымалы жариялауы керек. Айнымалы пограммаларға қатар тұрақты да қолданылады. Тұрақты- бұл нақтылы түрдiң кейбiр өзгерiссiз шама таңбалаушы идентификатор. Тұрақтылар, сонымен қатар тиiстi бағдарлама бөлiмде жариялау тиiстi айнымалы жариялау тиiстi. Олар қосады: табандатқан, нақты, нышандық, логикалық, адрестi типтер. Типтердің сипаттамалар бөлiмi такомалардың түрiнде жазылады: Type

t1=[вид типа];

t2=[вид типа]; type int=Integer; b=boolean;

 

Тип Диапазон значений Требуемая память
Shortint -128 .. 127 1 байт
Integer -32768 .. 32767 2 байта
Longint -2147483648 .. 2147483647 4 байта
Byte 0 .. 255 1 байт
Word 0 .. 65535 2 байта

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

Праграмманың орындалуы барысында өзгермейтін шамаларды тұрақтылардеп атайды. Әрбір тұрақты үшін компьютер жадында бір немесе бірнеше ұя бөлінеді.

Сандық тұрақты деп, праграммада нақтьы сан түрінде жазылатын шаманы айтамыз. Сандық тұрақты оң немесе теріс (немесе нол) сан түрінде беріледі.

Сандық тұрақтылардың мынандай түрлері бар:

· бүтін ондық;

· бүтін оналтылық;

· бүтін сегіздік;

· бүтін екілік;

· нақты тұрақты үтірі (нүктелі);

· нақты жылжымалы үтірлі (нүктелі);

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

· бүтін тұрақты;

· нақты тұрақты;

Айнымалылардың тұрақтылар сияқты үш түрі болады:

- бүтін айнымалы;

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

- символдық айнымалы;

Айнымалылардың түрі олардың қабылдаған мәндерінің түріне қарай анықталады және сол айнымалы атының соңғы символы арқылы беріледі:

· % - бүтін;

· !- дара дәлдікті;

· # - (немесе бос орын )-екі еселі дәлдікті;

· $ -символдық.

Мысалдар келтірейік:

· К1# -екі еселі дәлдікті сандық айнымалы;

· М2!-дара дәлдікті сандық айнымалы;

· Н%- бүтін сандық айнымалы;

· А1$- символдық айнымалы.

Айнымалының түрлерін арнайы операторлардың көмегімен хабарлауға болады;

· DEFINT <әріптер тізімі > - бүтін айнымалылар.

· DEFSNG < әріптер тізімі> -дара дәлдікті нақты айнымалылар;

· DEFDBG <әріптер тізімі>- символдық айнымалылар.

 

4. Деректердің айқындалған және пайдаланушы типтері, типтер конструкторы, скалярлы, құрылымды, жиындық және файлдық деректер типтері.

Мәліметтердің немесе шамалардың типі деп, олардың қабылдай алатын мәндерінің және олармен орындауға болатын амалдардың жиының анықтауды айтады, яғни тип дегеніміз - шамалардың қабылдайтын мәндеріне берілетін сипаттама.
Мәліметтердің әр типі тек өзіне ғана сәйкес келетін операциялар жиынын орындата алады. Мысалы, 1 мен 2 мәндері бүтін сандар типіне жатады, оларды қосуға, азайтуға, көбейтуге және бөлуге болады.АJI, «ІВМ» және «РС» мәндері сөз тіркесі типіне жатады, бұларды біріктіріп жазуға ғана болады («ІВМ РС»). Қосуға, азайтуға, көбейтуге, бөлуге болмайды. Кез келген тұрақты, айнымалы функция немесе өрнек өзіне тән бір типпен ғана сипатталады. Паскаль тілінде шамалардың типін көрсету міндетті болып табылады. Сондықтан программа алдына оның сипаттау бөлімінде пайдаланылатын барлық шама атаулары және оның типтері көрсетілуі қажет.
Паскаль тілінде пайдаланылатын барлық типтер скалярлық (қарапайым) және құрылымдық (структуралық) болып үлкен екі топқа бөлінеді. Скалярлық (қарапайым) типке шамалардың стандартты типі және жасанды тип (тағайындалған) жатады. Стандартты типтерге:
• Бүтін - INTEGER;
• Нақты - REAL;
• Логикалық - BOOLEAN;
• Тіркестік - (STRING);
• Мәтіндік (ТЕХТ) тәрізді типтер жатады.
Құрылымдық типтері жиымдар - ARRAҮ, жазбалар - RECORD, жиындар - SET және файлдар - FILE түрлеріне бөлінеді.
Бұлардан өзге типтер программаның типтері сипаттау бөлігінде анықталуы қажет. Тұрақты сандардың типін олардың сыртқы пішініне қарап - ақ ажыратуға болады, ал айнымалылар мен функциялар типтері программаның сипаттау бөлімінде көрсетіледі.
Ол үшін type түйінді сөзі қолданылып, жазылу пішімін былай көрсетуге
болады:
Туре =;
Логикалық шамалар екілік сандар жүйесіне сәйкес «1» және «О» деген мәндерді ғана қабылдайды. Мұндағы «1» тексерілетін белгілі бір шарттың - логикалық тұжырымның орындалатынын, яғни ақиқат екенін, ал «О» сол шарттың орындалмайтынын - тұжырымның жалған екенін көрсетеді. Бұл екі мән программада ағылшын тіліндегі айтылуына сәйкес true (1) және false (О) болып жазылады

5 кіріс-шығыс операторлары.Кіріс-шығыс функциялары мен кітапханасы.

 

Меншіктеу операторысимволдар арқылы жазылады.кез келген ; таңбасымен аяқталатын өрнек меншіктеу операторы болып табылады.өрнектің бір түріне бос оператор жатады, ол жай ; операторы.

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

<айнымалы>= <айнымалы> <операция> <өрнек>;

Қысқаша былай жазуға болады:

<айнымалы> <операция> = <өрнек>;

Мысал:

A=a+b;®a+=b; a=a*b;®a*=b;

Логикалық операторлар. Екі немесе бірнеше шарттық өрнектерді біріктіру үшін логикалық оператор қолданылады. Си тілінде келесі логикалық операторлар бар:

1) және(&&)операциясы; f1&&f2

2) немесе || (or) операциясы; f1||f2

3) терістеу !(not) операциясы. !f1

Терістеу операциясының приоритеті өте жоғары, одан тек жақша ішіндегі мәндердің проритеті жоғарылау болады.&& операциясының приоритеті ||(or) операциясымен салыстырғанда төмен, меншіктеу операциясынан жоғары болады.

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

Шартты оператордың жазылу түрі мынадай:

If(шарт)

1- оператор;

Else

2- оператор;

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

if(шарт)

1-оператор;

Кейде қабаттасқан шартты операторлар кездеседі, мысалы:

If(шарт)

1-оператор;

else if(2-шарт)

2-оператор;

else

3-оператор;

Мұнда егер 1-шарт ақиқат болса, 1-оператор орындалады, егер 1-шарт жалған болып, 2-шарт ақиқат болса, 2-оператор орындалады, ал 1–шарт және 2-шарт жалған болса, 3-оператор атқарылады.

Мысалы, берілген x,y- екі санның үлкенін анықтау үшін жазылған шартты операторды былай жазуға болады:

If(x>y) max=x;

else max=y;

Ал x,y,z сияқты үш санның үлкенін табу үшін, қабаттасқан шартты операторлар жазылады.

If(x>y)

{if(x>z) max=x;

else max=z;}

else if(y>z) max=y;

else max=z;

 

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

Мысалы:

#include<stdio.h>

#include<conio.h>

main()

{

int a=5, b=6,c=7,d;

clrscr();

d=(a++-(--b))+(c-a--);//d=2 a=5

printf(“d=%i a=%d”,d,a);

getch();

}

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

{n++; жай құрама оператор

summa+=n;

}

{

int n=0;

n++; бұл блок

summa+=n;

}

Цикл операторлары

Цикл-бір амалды бірнеше рет орындау цикл деп аталады.

Циклдің үш түрі бар:

1) әзір циклі

2) дейін циклі

3) параметрлі цикл

FOR цикл операторы

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

FOR цикл операторының жалпы жазылу түрі:

For(x=x0;x<=xk;x=x+dx)

{

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

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

….

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

}

Мұнда x=x0- цикл айнымалысының бастапқы мәні, x<=xk- циклдің орындалу шарты, x=x+dx- цикл айнымалысының қадамы. x=x0цикл операторы орындаларда бір рет есептеледі, x<=xkақиқат болса немесе 0-ге тең болмаса, цикл тұлғасы ретіндегі операторлар атқарылады. Содан соң x=x+dx есептеледі және x<=xk мәні қайта анықталады. x<=xkмәні жалған болса немесе жалпы жағдайда ол 0-ге тең болса,FOR операторының жұмысы аяқталады. Сонымен цикл тұлғасының келесі орындалуы немесе орындалмауы оның атқарылуы алдында анықталады.

While операторы

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

While(шарт-өрнек)

Оператор;

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

 

Do…while цикл операторы

Шарты соңынан тексерілетін Do…whileжалпы жазылу түрі:

Do

{

1-оператор;

2-оператор;

… … …

n-оператор;

}

while(өрнек);

цикл тұлғасы ретінде қарапайым немесе құрама оператор қолданылуы мүмкін. Жақшадағы өрнек цикл тұлғасынан кейін тексеріледі. Сондықтан do whileцикл тұлғасы ең болмағанда бір рет орындалады. Цикл тұлғасынан кейін жазылған өрнек ақиқат болса, цикл тұлғасы қайтадан орындалады. Ал өрнек жалған болса, цикл аяқталады.

 

Cи тілінде сыртқы ортамен мәліметтер алмасу <stdio.h> енгізу- шығару функциялары кітапханасын пайдалану арқылы орындалады. Ол тақырыптық файлы ретінде былай жазылады:

#include<stdio.h>

Printf()функциясы мәліметтерді экранға шығару үшін қолданылады. Оның жалпы жазылу түрі:

Printf(<Формат тіркесі >,<аргументтер тізімі>);Мысалы:

Printf(“a=%f\n”, а);

Scanf() функциясы мәліметтерді енгізу үшін қолданылады.

Scanf(<формат тіркесі> , <аргументтер тізімі>);

Аргументтер ретінде адрес нұсқауыштары пайдаланылады. Мысалы:

Scanf(“%d%f”,&x,&y);

 

6.Функциялар және процедуралар, параметрлерді беру тәсілдері. Функция және процедура мысалдары.

 

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

function функцияаты (параметрлер тізімі: 1-тип): 2-тип

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

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

Функцияны сипаттау негізгі программа басталғанға дейін, яғни негізгі программаның айнымалыларын сипаттаудан кейін, бірақ негізгі программадағы begin-ге дейін орындалуы керек.

10.1-мысал. Қабырғалары мен екі диагоналының ұзындықтары

 

белгілі бесбұрыштың ауданын есептеңіз.

Бесбұрыштың ауданы қабырғалары белгілі үшбұрыш

аудандарының қосындысына тең. Әр үшбұрыштың

ауданын есептеу үшін Герон формуласын қолданамыз

(қабырғаларын шартты түрде x,y,z деп белгілейік).

 

S= , мұнда p=(x+y+z)/2.

Program mys10_1;

var a,b,c,d,f,g,h,s1,s2,s3,ssum:real;

function yshb(x,y,z:real):real;

var p:real;

begin p:=(x+y+z)/2; yshb:=sqrt(p*(p-x)*(p-y)*(p-z))

end;

begin write(‘a,b,c,d,f,g,h-қа мән бер:’);readln(a,b,c,d,f,g,h);

s1:=yshb(a,b,h); s2:=yshb(h,c,g); s3:=yshb(f,g,d);

ssum:=s1+s2+s3; writeln(‘Бесбұрыш ауданы=’,ssum);

end.

Осы программа бойынша есептеу жүргізсек, онда a =1,5, b =1, c =2, d =2,5, f =1, g =2,5, h =2 болғанда, бесбұрыш ауданы =3.90 (шамамен) болады.

Процедуралар

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

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

Procedure процедура аты(1-параметрлер: 1-тип; var 2-параметрлер: 2-тип). Мұнда 1-параметрлер – мән-параметрлер, ал 2-параметрлер – айнымалы-параметрлер, ол міндетті түрде varқызметші сөзінен басталады. Параметрлердін әрбір түрінің типі(1-тип және 2-тип) көрсетіледі.

10.2-мысал. Үш үштік: a1,b1,c1; a2,b2,c2; a3,b3,c3 сандары берілген.

Әр үштіктің ең үлкені мен ең кішісін, сонан соң

табылған үлкендері мен кішілерінің ішінен олардың

ең үлкені және ең кішісін жеке-жеке табыңыз.

Program mys10_2;

var a1,b1,c1,a2,b2,c2,a3,b3,c3:real;

varmax1,max2,max3,min1,min2,min3,max4,min4,max5,min5:real;

procedure maxmin(x,y,z:real; var max,min:real);

Begin

if (x>=y) and (x>=z) then max:=x;

if (x<=y) and (x<=z) then min:=x;

if (y>=x) and (y>=z) then max:=y;

if (y<=x) and (y<=z) then min:=y;

if (z>=x) and (z>=y) then max:=z;

if (z<=x) and (z<=y) then min:=z;

end;

begin write(‘a1,b1,c1-ді енгіз:’);readln(a1,b1,c1);

write(‘a2,b2,c2-ні енгіз:’);readln(a2,b2,c2);

write(‘a3,b3,c3-ті енгіз:’);readln(a3,b3,c3);

maxmin(a1,b1,c1,max1,min1);

maxmin(a2,b2,c2,max2,min2);

maxmin(a3,b3,c3,max3,min3);

maxmin(max1,max2,max3,max4,min4);

maxmin(min1,min2,min3,max5,min5);

writeln(‘1-үштіктің ең үлкені-‘,max1,’ең кішісі-‘,min1);

writeln(‘2-үштіктің ең үлкені-‘,max2,’ең кішісі-‘,min2);

writeln(‘3-үштіктің ең үлкені-‘,max3,’ең кішісі-‘,min3);

writeln(‘Үлкендерінің ең үлкені-‘,max4,’ең кішісі-‘,min4);

writeln(‘Кішілерінің ең үлкені-‘,max5,’ең кішісі-‘,min5);

end.

Программада бірмезгілде бірнеше функциялар мен процедура-ларды сипаттауға(қолдануға да) болады. Оларды әдеттегідей бірі-нен кейін бірін тізбектеп жазып орналастырады.

 

7.Циклды бағдарламалау орталары. Циклдан шығу әдістері. Цикл операторларына мысал. Рекурсивті функциялар.

 

Циклды бағдарламалау орталары. Циклдан шығу әдістері. Цикл операторларына мысал. Рекурсивті функциялар.

Цикл– белгілі бір әрекеттер тізбегінің бірнеше рет қайталанып орындалуы.

• қадамдар саны белгілі цикл

• қадамдар саны белгісіз цикл (шартты цикл)

Есеп.1-ден 8-ге дейінгі бүтін сандардың квадраттары мен кубтарын есептеп шығару (a-дан b-ға дейін).

Ерекшелігі:бірдей амалдар 8 рет орындалады.

 

Do…while цикл операторы

Шартты соңынан тексереді.орындау схемасы (С тілінде) 1-суретте.Цикл тұлғасы ретінде қарапайым немесе құрама оператор қолданылуы мүмкін. Do…while тұлғасы ең болмағанда бір рет орындалады.Цикл тұлғасына кейінгі өрнек ақиқат болса,цикл тұлғасы қайта орындалады.Кері жағдайда цикл аяқталады.мысал келтірейік.

 

1-сурет

Мысал 1: (engizilgen sannyn ulkenin tabu)

#include<stdio.h>

#include<conio.h>

main()

{ int a,max;

printf("\n sandar max tabu \n");

printf("Ayaktau uwin 0 engiziniz \n");

max=-32000;

do {

printf("Sandy engiziniz");

scanf("%i",&a);

if (a>max) max=a;}

while (a!=0);

printf("Sandardyn max: %i",m);

getch();}

While операторы

Орындалу саны алдын ала белгісіз болатын циклдер құру кезінде шарттары алдын ала тексерілетін оператор болып табылады.

While (шарт-өрнек)

Оператор;

Мысал келтірсек:(1-100-ge deingi butin sandar kosyndysy)

#include<stdio.h>

#include<conio.h>

main()

{ int s,k;

s=0;k=1;

while (k<=100)

{ s+=k;

k++;}

printf("s= %d",s);

printf("\n ");

getch();}

Рекурсивті объектілер

Рекурсивті объект деп - бір объект немесе дәл осындай бірнеше объект арқылы анықталатын объектіні айтады. Рекурсия ұғымы. Рекурсия деп көмекші алгоритм ретінде алгоритмнің өзін -өзі шақыруын айтамыз. Әдетте рекурсия едәуір қиын тақырыптарға жатады. Тақырыпқа деген қызығушылықты арттыру үшін «рекурсияны білу –дамыған ақыл-ойдың белгісі» деп айтуға болады.

 

 

8.Функциялар. Функцияның фактілі және формальды параметрлері. Айнымалы санды параметрлі функциялар. Рекурсивті функциялар.

Параметрлер механизмі шақырылған жəне шақырған функциялардың арасындағы ақпарат алмасудың негізгі əдісі болып табылады. Функцияға параметрді берудің екі тəсілі бар: адрес бойынша жəне мəні бойынша [2]. Мəн бойынша беруде келесі əрекеттер орындалады:

- нақты параметрлер орнында тұрған өрнектің мəні есептеледі;

- функцияның формальді параметрлеріне стекте жады белгіленеді;

- əрбір нақты параметрге формальды параметр мəні меншіктеледі,

сонымен қатар типтер сəйкестігі тексеріледі жəне қажеттілігіне қарай олардың түрлендіруі орындалады.

Мысал:

double square(double a, double b, double c)

{

//функция қабырғаларының ұзындығы а,b,c арқылы берілген үшбұрыш

ауданын қайтарады, double s, p=(a+b+c)/2;

return s=sqrt(p*(p-a)*(p-b)*(p-c)); // Герон формуласы

}

1) double s1=square(2.5,2,1);

2) double a=2.5,b=2,c=1;

double s2=square(a,b,c);

3) double x1=1,y1=1,x2=3,y2=2,x3=3,y3=1;

double s3=square(sqrt(pow(x1-x2,2)+pow(y1-y2,2)), // 1жəне2 арасындағы

арақашықтық

sqrt(pow(x1-x3,2)+pow(y1-y3,2)), // 1 жəне 3 арасындағы арақашықтық

sqrt(pow(x3-x2,2)+pow(y3-y2,2))); // 2 жəне3 арасындағы арақашықтық

Стек

A

.5

B

C

S

P

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

Мысал.

void Change(int a,int b)//мəн бойынша беру

{int r=a;a=b;b=r;}

int x=1,y=5;

Change(x,y);

1 5

5 1

cout<<”x=”<<x<<”y=”<<y;

шығады: x=1y=5

void Change(int *a,int *b)//адрес бойынша беру

{int r=*a;*a=*b;*b=r;}

int x=1,y=5;

Change(&x,&y);

&x 5

&y 1

cout<<”x=”<<x<<”y=”<<y;

шығады: x=5y=1

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

void Change(int &a,int &b)

{int r=a;a=b;b=r;}

int x=1,y=5;

Change(x,y);

&x 5

&y 1

cout<<”x=”<<x<<”y=”<<y;

шығады: x=5y=1

Көрсеткіштердің орнына сілтемелерді қолдану бағдарлама оқылуын жақсартады, сондықтан ат өзгерту операциясын қолданудың қажеті жоқ. Мəн бойынша берудің орнына сілтемелерді қолдану да тиімті болып табылады, себебі параметрлерді көшіру міндетті емес. Егер функция ішінде параметрд өзгертуге тиым салу міндеттелсе, онда const модификаторы қолданылады Const-ты барлық параметрлердің алдына қою ұсынылады (өзгертулерфункцияда қарастырылмаған).

9.Программаларды өңдеудің негізгі принциптері. Құрылымдық программалау, принциптері

 

 

 

10.Функциялар және көрсеткіштер. Көрсеткішпен жіберуде көрсеткіштерді функцияның нақты аргументі ретінде пайдалану.

 

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

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

#include<stdio.h>#include <string.h> void check(char *a, char *b,int (*cmp)(const char *, const char *)); int main(void){char s1[80], s2[80];int (*p)(const char *, const char *);/* указатель на функцию */ p = strcmp; /* strcmp функция адресін р көрсеткішіне меншіктейді */ printf("Введите две строки.\n");gets(s1);gets(s2); check(s1, s2, p); /* p көрсеткіші арқылы strcmp функция адресін жібереді. */ return 0;} void check(char *a, char *b,int (*cmp)(const char *, const char *)){printf("Проверка на совпадение.\n");if(!(*cmp)(a, b)) printf("Равны");elseprintf("Не равны");}

main()-де р көрсеткішінің жариялауын қарастырайық:

int (*p)(const char *, const char *);

Бұл жариялау компиляторға р-ның const char* типті екі параметрі бар функцияға көрсеткіш және int типті мәнді қайтарады. р-ның айналасындағы компилятормен жариялаудың дұрыс интерпретациясы үшін қажет. Жариялаудың осындай түрі басқа да функцияларға көрсеткіштер үшін де қолданылады.Тек ол үшін қайтарылатын типтер мен функция параметрін өзгерту керек.

check() функциясын қарастырайық. Онда 3 параметр жарияланған: (a және b) символдық типіне көрсеткіш және cmp функциясына көрсеткіш. cmp функциясының көрсеткіш форматы р көрсеткішінікіндей. Сондықтан cmp-да constchar * типті екі параметрі бар және int мәнін қайтаратын фугкцияға көрсеткішті сақтауға болады. р-ның жарияламасында айтылғандай, *cmp айналасына қойылатын дөңгелек жақшалар осы жарияны компилятор көмегімен дұрыс интерпритациялау үшін қажет.

Программа басында р көрсеткішіне жолдарды салыстырумен айналысатын стандартты кітапханалық strcmp() функциясының адресі еншіленеді.Одан кейін программа қолданушыдан екі жолды енгізуді сұрайды да, передает указатели на них функции check(), которая их сравнивает.

check() ішінде көрсетілген

(*cmp)(a, b)

a және b аргументтері бар, cmp-ға нұсқайтын strcmp() функциясын қосады. *cmp айналасындағы жақшалар міндетті түрде қойылады. Бұдан басқа да, көрсеткіштің көмегімен функцияны іске қосу тәсілдері бар:

cmp(a, b);

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

check() функциясын шақыруды strcmp() атын қолдану арқылы жазуға болады:

check(s1, s2, strcmp);

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

11-14.Массивтер. Массивтерді анықтау және хабарлау. Көрсеткіштер көмегімен функция массивтерін өңдеу.

 

Массив дегеніміз - бір атпен аталған, әртүрлі индекстелген бір типті

элементтер жиынтығы.

Қасиеттері:

Массивтің қасиеттерін анықтайтын 4 негізгі принципі бар:

-массивте элементтер деп аталатын мәндер сақталады;

-массивтің барлық элементтері бір типті болуы керек;

-жадыда массивтің барлық элементі тізбектеліп орналасады және бірінші

элемент адрестің нөлдік индексін білдіреді;

-массив атауы тұрақты болып табылады және массивтің бірінші элементінің

адресінен тұрады.

Mассивтің сипатталуы:

<элементтің типі> <массив аты> [<элементтер саны>];

Мысалы, int a[12]; {12 элементтен тұратын массив}

char s[20]; {20 элементтен тұратын массив}

#define KOL 10 {}

int [KOL];

Массивті инициялизациялау 3 тәсілмен анықталады:

- массивті құру барысында;

- массивті құру барысында бастапқы тұрақтыларды көрсету;

- программаның орындалу барысында;

- құру барысында массивтің бастапқы мәндері берілмесе, онда автоматты

түрде массив 0-мен толтырылады(NULL).

Массив элементін қолданғанда индекс ретінде үш түрлі мән беруге болады:

1. Сандық тұрақты.

2. Айнымалы.

3.Өрнек.

include<stdio.h>

#include<conio.h>

#define SIZE 5 // массив өлшемі

void main()

{

int a SIZE ; // массив

int n=0; // санағыш

int i; // индекс

clrscr();

puts(" \n Бүтін сандар массивін анықтау ");

puts(" Әр санды енгізген сайын Enter пернесін басыңыз ");

for (i=0; i SIZE; i++)

{

printf("a%i=", i+1);

scanf(“%i”, & ai);

if (ai!=0) n++;

}

printf(" массивте %i нөлдік емес элемент бар\n", n);

puts("\nЖұмысты аяқтау үшңн Enter пернесін басыңыз ");

getch();

}

12.Қолданбалы функцияларды құру.№есептеу үшін функцияларды тестілеу және анықтау. Көрсеткіш сілтемесімен берілетін фактілі аргументтер, функцияларды құру.

 

Функция – бұл аяқталған əрекетті орындайтын атаулы əрекеттер меноператорлардың тізбегі, мысалы массивтердің құрылуы, массивтерді шығарут.б..

Функция, біріншіден, СИ++-дің кез-келген типтерінің бірі болып саналады, ал, екіншіден, бағдарламаның ең кіші орындалушы модулі.Кез келген функция хабарландырылған жəне анықталған болуы керек.Функцияның хабарлануы(прототип, тақырыпша) функцияның атын береді,қайтарылған мəн типі жəне берілетін параметрлер тізімі. Функцияның анықталуы хабарландырудан басқа, əрекеттер жəне операторлардың тізбегінен тұратын функция денесін қамтиды. тип аты_функция([формальдыпараметрлер тізімі])

{ функция _ денесі } Функция_денесі – бұл блок немесе құрама оператор. Функцияның ішінде

басқа функцияны анықтауға болмайды. Функция денесінде функцияның алынған мəнін шақырылған нүктеге қайтаратын оператор болуы керек. Ол екі формада болуы мүмкін:

1. Return формула; 2. return;

Бірінші форма нəтижені қайтару үшін қолданылады, сондықтан формулатипі анықтамадағы функция типімен сəйкес келуі керек. Екінші форма функция мəнді қайтармаса қолданылады, яғни void типі бар. Бағдарламашы бұл операторды функция денесінде анық түрде қолданбауы мүмкін, компилятор оны автоматты түрде функция соңына қосады. Параметрлер механизмі шақырылған жəне шақырған функциялардың арасындағы ақпарат алмасудың негізгі əдісі болып табылады. Функцияға параметрді берудің екі тəсілі бар: адрес бойынша жəне мəні бойынша [2]. Мəн бойынша беруде келесі əрекеттер орындалады:

- нақты параметрлер орнында тұрған өрнектің мəні есептеледі;

- функцияның формальді параметрлеріне стекте жады белгіленеді;

- əрбір нақты параметрге формальды параметр мəні меншіктеледі,

сонымен қатар типтер сəйкестігі тексеріледі жəне қажеттілігіне қарай олардың түрлендіруі орындалады.

Адрес бойынша беру үшін сондай-ақ сілтемелер де қолданылуы мүмкін. Сілтеме бойынша беруде функцияға параметрді шақыру кезіндегі көрсетілген параметрдің адресі беріледі. Мəн бойынша берудің орнына сілтемелерді қолдану да тиімті болып табылады, себебі параметрлерді көшіру міндетті емес. Егер функция ішінде параметрді өзгертуге тиым салу міндеттелсе, онда const модификаторы қолданылады.

Бірөлшемді массивтерді функцияға беру

Массивті функция параметрі сияқты қолдануда, функцияға оның бірінші

элементіне көрсеткіш беріледі, яғни массив əрқашан адрес бойынша беріледі.

Мұндайда массивтегі элементтер саны туралы ақпарат жоғалады, сондықтан

массив өлшемін жек параметр ретінде беру ұсынылады. Функцияға массивтің

басына көрсеткіш берілгендіктен (адрес бойынша беру), массив функция

денесінің операторлары есебінен өзгеруі мүмкін[2].

Мысал 1:

Массивтен барлық жұп элементтерді жою

#include <iostream.h>#include <stdlib.h>

int form(int a[100])

{int n; cout<<"\nEnter n"; cin>>n;

for(int i=0;i<n;i++) a[i]=rand()%100;

return n; }

void print(int a[100],int n)

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

cout<<a[i]<<" "; cout<<"\n"; }

void Dell(int a[100],int&n)

{ int j=0,i,b[100];

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

if(a[i]%2!=0) {b[j]=a[i];j++;}n=j;

for(i=0;i<n;i++)a[i]=b[i];}

void main(){int a[100];

int n; n=form(a); print(a,n);

Dell(a,n); print(a,n); }

 

13.Алгоритм түсінігі. Алгоритмдерді талдау принциптері. O-нотация.

 

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

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

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

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

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

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

 

Алгорим -берілген есептің шығару жолын реттелген амалдар тізбегі түріне келтіру.

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

Алгоритмдарды қиындықтың бағалаулары үшiн белгiлердiң арнайы жүйесi енгiзiлдi -O-нотация деп аталады. Мысалы, = 2n2 + n (n ) fтың функцияларында - 5 және сондықтан бұл функцияның тән мiнез-құлығы тап солдың компоненттерiн анықталуға қосылатын өңге n2дiң компонентiнiң үлкен nдерiнде асып түсеуге жеткiлiктi. Өңге компоненттердi лақтырып тастауға және осы функция (n2 ) туралы түрдiң (оның мәндерiнiң өсудi жылдамдығы маңызда) O(2 )мiнез-құлығының бағасын алатынын шартты жазып алуға болады.

15,Сызықтық және циклдік тізімдер, стектер, дектер, кезек(файл) және екілік ағаштарды өңдеу, инициализациялау, хабарлау.

 

Стек – бұл деркетер құрылымы, тізбектелген элементтерді ұсынатын. Қосу және эдементтерді жою бір шетінен басталады, яғни алдыңғы құрылымы өзгерісіз қалады. Бұл дегеніміз стек болу үшін файл болу керек. Шыныменде элементтерді қосқан кезде файлдың сонында ғана қосылады,алайда соңғы элементтерін жойған кезде екі есе қылып файлды элементтер санымен көшіру керек. бұл бастапқы кемшілігі болып саналады. Стекті массивтер көмегімен қосу және жою арқылы тенестіру арқылы жүзеге асырылады. Жеке айнымалыларға тізбектің ұзындығымен және элементтерді қосқан, жойған кезде кішірейтіп, үлкейту үшін сақтау керек. жалғыз кемшілігі массивтің саны шектеулі,стектің толуына әкеп соқтырады. Динамикалық құрылымды қолдансақ ол осы мәселелердің бәрін шешеді.

Кезектер – бұл да деректер құрылымы болып табдылады. Стек сияқты тізбектелген элементтерді ұсынады. Элементтерді қосу бір шетінен жүзеге аса, ал жою басқа жағынан.

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

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

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

 

16 Ағаштарды өңдеу, инициализациялау, хабарлау

Иерархиялық құрылымы бар деректерді ағаштар көмегімен көрсеткен ыңғайлы.Ағаш түйін немесе төбе деп аталатын элементтердің ақырлы жиынын білдіреді. Төбелер иерархиынң әр түрлі деңгейлерінде орналасқан. Иерархияның ең жоғарғы деңгейінде(нөмірі 1) тамыры деп аталатын жалғыз түйін орналасады. і-ші деңгейде орналасқан әр түйін (і-1)-ші одан жоғары деңгейдегі бастапқы немесе берілген түйіннің әкелігі деп аталатын жалғыз түйінмен байланысады. і-ші деңгейдің әр түйіні бір немесе бірнеше (і+1)-ші төменгі деңгеймен байланыса алады. Мұндай түйіндер туындаған түйін деп немесе ұрпақтар деп аталады. Туындағандары жоө түйіндер жапырақтар деп аталады. Жазықтықта түйінді нүктелермен белгілеп, і-ші деңгей түйінін туындаған (і+1)-ші деңгей түйінімен доғалар арқылы байланыстырған ыңғайлы. Суретте түйіндері әріптермен белгіленген ағаш бейнеленген. Бұл ағаштың тамыры А болып табылады. Бұл иерархияның ең жоғарғы деңгейінде орналасқан жалғыз түйін. Тамырдан туындаған түйіндер:C, D, E. A түйіні C, D, E түйіндері үшін бастапқы болып табылады. является исходным. G, I, K, L, M, E түйіндерінде туындаған түйін болмағандықтан жапырақтар болады.

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

Суретте бинарлы ағаштар көрсетілген. в және г суреттер әр түрлі себебі бірінші жағдайда D түйіні C үшін сол жақ туындаған, ал екіншісінде С үшін оң жақ туындаған. Ағаш түйіні 3 өрістен тұратын жазбаны көрсетеді, бірінші өріс–ақпараттық, екінші және үшіншісі–туындаған сол жақ және оң жақ түйіндерге көрсеткіштер. Егер элемент типі node болса, онда node элементіне көрсеткіш болатын мән типі былай жазылады:

^node. ^node типіне анықтау бөлімінде мынадай синоним енгізуге болады: tree=^node.Бинарлы ағаш үшін деретер типін сипаттау былай бола алады:

type elem_tree=char; tree=^node;

node= record

info:elem_tree; left,right:tree

end

Сипаттамада tree типті анықтама алғашқы болады, себебі tree типі left және right өрістерін сипаттауда қолданылады.^z конструкция – программада Z типті анықталмаған идентификаторы бар бола алатын типтің жалғыз сипаттаушысы.

Егер бағдарламада t айнымалысы келесідей сипатталса: var t: tree, онда t node типті элементке көрсеткіш болып саналады.t айнымалысының мәні nil де бола алады. Бұл көрсеткіштің ешқандай элементке орналаспағанын көрсетеді. Ағаштың түйіндер санын рекурсивті түрде былай анықтауға болады: nnode(t)=1+nnode(tl)+ nnode(tr), мұндағы t – бастапқы ағаш, tl, tr – сол жақ және оң жақ ішкі ағашы. Бинарлы ағаш үшін Опишем функцию, которая для би-

нарного дерева, заданного указателем на

корень, определяет количество узлов в

дереве.

function nnode (t: tree): integer;

begin

if t=nil

then nnode=0

else nnode=1+nnode(t^.left)+

nnode(t^.right)

end

 

17 Сұрыптауд

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.