Жадыны динамикалық үлестіру



Жұмыс түрі:  Курстық жұмыс
Тегін:  Антиплагиат
Көлемі: 26 бет
Таңдаулыға:   
МАЗМҰНЫ
Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...2
І.Программалау технологиясы... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..3
1.1С++ программмалау тілінің пайда болу тарихы ... ... ... ... ... ... ... . ... ..6
1.2.С++ программалау тілі. Алфавит ... ... ... ... ... ... ... ... ... ... ... ... ... .8
1.2.1 Динамикалық жад ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..9
1.2.2. Сілтемелер ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ... ... ...10
ІІ. Мәліметтердің динамикалық құрылымы ... ... ... ... ... ... ... ... ... ... ...12
2.1. Мәліметтер құрылымы, динамикалық құрылым ... ... ... ... ... ... ... ... 12
2.2. Жадыны динамикалық үлестіру ... ... ... ... ... ... ... ... ... ... ... ... ... 15
2.3. Динамикалық құрылымдарды жиым көмегімен жүзеге асыру ... ... ... ..15
2.4. Типті динамикалық түрде анықтау ... ... ... ... ... ... ... ... ... ... ... ... 17
2.5 Стектер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...18
2.6 Кезектер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 20
2.7 Ағымды ашу. Ағымға мəлімет енгізушығару. Ағымды жабу ... ... ... ... 21
2.8 Ағымдық кластар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...23
Қорытынды ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... .25
Қолданылған әдебиеттер ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ..26

Кіріспе

Бұл курстық жұмыс Алгаритимдеу және бағдарламалау негіздері пәні бойынша орындалған және С++ тілінде динамикалық тізімдерді қолдануға негізделген. Бағдарламаны орындау үшін осы тілде динамикалық құрылымдар қолданылады. Олар С++ тілінде деректер қорын құруға мүмкіндік береді.
Курстық жұмысымның тақырыбы Мəліметтердің динамикалық құрылымы, Сілтемелер ,Кезектер жəне ағымдармен жұмыс істеу.
Жұмыстың жалпы мақсаты студенттерді С++ тілінде бағдарламалар құру әдісіне үйрету және осы тілді тереңдей оқып меңгеру. Жұмыс үш бөлімнен және қорытынды мен қосымшалардан тұрады. Бірінші бөлімінде С++ тілі , динамикалық жад және сілтемелер туралы. Екінші бөлімде динамикалық құрылым, оның ішінде тізімдерге түсініктеме берілген, яғни оның мүмкіндіктері көрсетілген . Мұнда бағдарламаның алгоритмі көрсетілген. Үшінші бөлімде курстық тапсырмалар көрсетілген.
C++ тiлi онай тасымалданатын тіл. Яғни, бұл ортада жазылған колданбалы программалар бiр компьютерден екiншi компьютерге оңай тасымалданады. Бұл тiл оңай компиляцияланатын тіл. Ол жүйелік программада колданылады Программалауды обьектiлiк тұрғыда жургізу ХХ ғасырдын 80-шы жылдары ортасынан бастап 90-шы жылдардын сонына дейiнгi уақытты қамтиды. Обректіге бейімделген программалау программаны объектілер жиынты түрiнде көрсетуге негiзделген күрделi программалық қамсыздандыруды жасаудын технологиясы ретiнде анықталады. Мұнда әрбiр обьект белгiлi бiр тип, яғни класс данасы болып табылады.
Құрылымдық программалаудың даму нәтежесiнде модульдік программалау пайда болды. Ол технологияны Pascal, C(C++) Ago, Modula тiлдерiн ұстанылады.

І. Программалау технологиясы

Программалау технологиясы деп - программалық қамсыздандыруды жасау процесінде қолданылатын әдістер мен құралдарды атайды. Кез келген технология сияқты программалау технологиясы мынадай техникалық инструкциялардың жиынын құрайды:
1. Технологиялық операциялардың орындалу тәртібін көрсету
2. Қандай да бір операцияның орындалуы үшін қажетті шарттардың тізімін жасау
3. Әрбір операцияның өзін сипаттау
Мұнда операция үшін бастапқы мәліметтер, нәтежелер, нұсқаулар, нормативтер, стандарттар бағалау критерилерімен әдістері және тағы басқалар анықталады.
Жалпы түрде технологиялардың екі түрін бөліп қарастырады.
1. Нақты жұмыс кезеңдер немесе осы кезеңдердің есептерін шешуде қолданылатын технологиялар. Олардың негізін нақты есепті шешу мүмкіндігін беретін шектеулі түрде қолданылатын әдіс құрайды.
2. Бірнеше кезеңді немесе жасау процесін толығымен қамтитын технологиялар. Бұлардың негізі әдетте методология, яғни түрлі жұмыс кезеңдерін қолданатын әдістер жиынтығын анықтайтын негізгі әдісті құрайды.
Программалаудың ғылым ретіндегі дамудың негізгі кезеңдерін атап өтейік.
1. Стихиялық программалау. Алғашқы ЭЕМ-дердің пайда болған кезінен бастап ХХ ғасырдың 60-шы жылдарының ортасына дейінгі уақытты қамтитын бұл кезең программалар құрылымы өте қарапайым болған.
Fortran Algol сияқты жоғары деңгейлі программалау тілдерінің жасалуы есептеулерді, программалауды айтарлықтай жеңілдетті. Бұл кезеңнің типтік программасы негізгі программадан глобальды берілгендер не олардың бөліктерін өңдейтін көмекші программалардан құралады.
2. Программалауды құрылымдық тұрғыда жасау ХХ ғасырдың 60-70 жылдарды қамтиды. Бұл кезеңде программалауды құрылымдық тұрғыда жасау программалық қамсыздандыруды жасаудың барлық қадамдарының орындалуын қамтитын технологиялық тәсілдер жиынтығын қарастырады.
Құрылымдық тұрғыда қарау негізін күрделі жүйелерді жеке кішігірім
көмекші программалар түрінде жүзеге асыру мақсатында декомпозициялау ( бөліктерге бөлу) алынады. Декомпозицияның басқа принциптерінің (объекті логикалық ) пайда болуымен бұл әдіс процудуралық декомопозияс деген атауға ие. Құрылымдық программалау принциптерін қолдану процедуралық программалау тілдерінің негізіне алынады. Мұндай тілдердің кеңінен танымал болған түрлері ретінде мыналарды атауға болады. PLI 1, ALGOL-68, Pascal, C.
Құрылымдық программалаудың даму нәтежесінде модульдік программалау пайда болды. Ол технологияны Pascal, C ( С++), Ago, Modula тілдерін ұстанады.
Компоненттік тұрғыда қарастыру және CASE технологиялары компоненттік тұрғыдан қарастыру кезңнде программалық қамсыздандыру физикалық түрде бөлек болатын дайын түрдегі компоненттерден құрастыру орындалады. Мұндай жекеленген бөліктер бір бірімен екілік интерфейс көмегімен байланыстырылады. Компоненттік тұрғыдағы технологиялар COM (component ofgect Model-объектілердің компоненттік модулі) және COBBA ( Comman Ofgect Reguest Brokec Architecture - объектілер сұраныстарын өңдеуші орындаушысы бар жалпы архитехтура) Тратылған қосымшаларды жасау технологияларына негізделеді.
Қазіргі заманғы программалық жүйелердің көпшілігі өте күрделі. Олардың күрделілігінің көптеген себептері бар. Негізгісі - жүйелер шешетін
есептердің логикалық күрделілігі. Программалау жүйелер жасау жоғары.
Жоғарылататын қосымша факторлар ретінде мыналарды атауға болады:
- Программалық жүйелерге қойылатын талаптардың формальді
түрде сипаттау күрделілігі.
- Дискреттік жүйелердің іс - әрекетін сипаттаудың қажетті құралдарының болмауы
- Ұжымдық түрде жұмыс істеу ( ұжымдар енетін мамандардың көбеюі жұмысты ұйымдастыруды қиындатады)
- Программалық кодтардың қайталану деңгейін көбейту қажеттілігі ( кодтардың түрлі жағдайларда қолданыла алуы үшін олар әмбебап болып жасалуы тиіс)
Күрделі жүйелерді жасауды блоктық - шаруашылық тұрғыда қарастыруға болады. Күрделі жүйелер бір- бірімен байланысқан өзара тәуелді ішкі жүйелер жиынтығы түрінде қарстырылады. Қазіргі кезде күрделі жүйелер жай күрделі түріндегі иерархияға негізделген.
Мұндай иерархиядағы кез келген жүйе неғұрлым қарапайымырақ басқа
жүйенің дамытылуының нәтежесінде пайда болады. Иерархияның осындай түрі объектіге бейімделген программалаудың мұрагерлік деп аталатын механизмінде қолданылады. Элементарлық деңгейде жүйе түрлі түрде бірктірілген ішкі жүйелерден құралады. Иерархияның мұндай түрін бүтін бөлік деп атайды.
Программалық жүйелер көп жағдайда табиғат және техникалық жүйелер әрекеттерінің бейнеленуі болғандықтан иерархиялық жүйелердің қасиеттерін иемденеді. Иерархиялық жүйелердің осы қасиет негізінде оларды зерттеу немесе жасаудың блоктық- иерархиялық тұрғысы қарастырылады. Бұл тұрғы бойынша алдымен объектілердің бөліктерін жасау, содан кейін объектінің өзін сол бөліктерден жинап құрастыру орындалады.
Күрделі объектіні салыстырмалы түрде тәуелсіз болатын бөліктерге бөлупроцесі Декомпозиция деп аталады. Декомпозиция кезінде жеке бөліктер кезіндегі арасындағы байланыстар бөлік ішіндегі элементтер байланыстарынан нашарлау болатынын ескереді. Сонымен қатар бөлікшелерден тұтас объект жинау мүмкіндігі болуы үшін бөліктердің арасындағы байланыстардың барлығы анықталуы тиіс. Өте күрделі объектілер кезінде декомпозиция процесі бірнеше рет орындалады. Әрбір блок өз ретінде бірнеше блоктарға,ал олар келесі блоктарға бөліну жасалуы жеңіл болатын блок түріне дейін декомпозицияланып отырады. Бұл әдіс қадамдық детализация ( нақтылау ) деп аталады.
Декомпозицияның нәтежесінде әдісте иерархия схемасы түрінде көрсетіледі. Оның төменгі деңгейінде салыстырмалы түрде жай бөліктер, ал жоғарғы деңгейде жасалатын объектінің өзі орналасады. Демек блоктық иеррхиялық тұрғыда программалау негізіне декомпозиция және иерархиялық
түрде реттеу процестері алынады.Сонымен қатар мынадай маңызды принциптерде қарастырады:
- қарама - қайшылықсыздығы - элементтердің бір-бірімен өз-ара
үйлесімдігін бақылау;
- бір-неше рет қайталануы - бірдей болатын бөліктерді блок ретінде бөліп алып , бір-неше рет қолдану,соның нәтижесінде жұмысты жеңілдету;
- локальді (жергілікті) түрде блоктандыру (оптимизация) - иерархия деңгейі аумағында ондайландыру.
Модельдер тілдерінің есептер қойылымдарының қандай да бір иерархиялық деңгейді сипаттау әдістерінің жиынтығы жобалау деңгейі деп аталады.
Жобалау процесі кезінде әрбір обьектіні жан-жақты қарастыру қажет. Блоктық иерархиялық тұрғыда программалау күрделі жүйелерді жасауда мүмкіндіктерді ұсынады:
- күрделі жүйенің әр бөлігінің және толық жүйенің жұмысқа жарамдығын тексеруді жеңілдігі;
- жүйелердің моделизациялануын жетілдіру мүмкіндігі.

1.1. С++ программмалау тілінің пайда болу тарихы.
Қазіргі кезде кеңінен қолданылатын программалау жүйесінің бірі - С++.Американың Borland корпорациясының қызметкері Андерсон Хайлсбергтің жетекшілігімен құрастырылған. С++-тың түп нұсқасы Швейцария ғалымы Никлаус Вирт жасаған Паскаль программалау тілінен тарайды. Бастапқыда Паскаль тілі программалауды алғаш үйренушілер үшін өте тиімді құрал болып табылған. Қарапайым Паскальды өңдеудегі А.Хайлсбергтің үлкен еңбегінің нәтижесінде С++ қазіргі заман талабына сай, қуатты программалау жүйесіне айналды. С++ - жоғарғы деңгейлі программалау жүйесі. Оның логикалық құрылымы әр түрлі есептерді дәл шешуге көмегін тигізеді. Сондықтан , оқушылар мен студенттерге программалаудың негізін С++ тілін оқытып үйретуден бастап, программалаудың қыр-сырын меңгертудің маңызы зор.
1972 жылы AT&T атаулы Американың корпорациясы жаңа C (Си) программалау тілін дайындап шыкты. Ол -- құрылымдық және алгоритмдерді басшылықка алып дайындалған процедуралық жоғары деңгейлі тіл.
Тілге жылдам орындалатын, жеке биттермен операция жасайтын операторлар да енгізілген. Олар арқылы байланыс порттарын, магниттік дискілерде жинақтауыштарды және т.б. аппаратттық кұралдарды басқаруға мүмкіндік жасалды. Ал, алғашқы кездерде жеке типті компьютерлердің аппараттық кұралдарына қол жеткізе алатын машиналық командалармен жумыс істейтін төменгі деңгейлі ассамблер тілі ғана болатын.
Си тілі бірте-бірте дамытылып, қазіргі кезде пайдаланылып келе жатқан, 1983 жылы дүние жүзі елдері басшылықка алған ANSI C нұсқасы да жарыққа шықты (ANSI - стандарттардың Америкалық ұлттық институты). ANSI C тілінің түрлі нұсқаларына енгізілген стандартты кітапханалар да бар. Тілдің кемшілігі де жоқ емес, ол жүйелік және қолданбалы программаларды дайындауға бейім, бірақ айнымалыларға рұқсат етілмеген қол жеткізу механизмін қамтамасыз етпейді және құрьшатын класты баска кластың ішкі класы (мұрагер) ретінде жариялау мүмкін емес. Мұндай объектілі - бағдарлы программалау (ОБП) тілдеріне енетін ерекшеліктерді ескеріп, Borland International Inc фирмасы C тілінің дамытылған жаңа Turbo C (Турбо Си) нұскасын 1980 жылдардың басында жарықка шығарды. Кейіннең Turbo C++ 2.0, Turbo C++ 3.0 және олардың кеңейтілген Borland C++ нұсқалары да пайда болды: Borland C++ 2.0, Borland C++ 3.0, Borland C++ 3.1, Borland C++ 4.0 және т.б.
Олардың MS DOS, Windows операциялық жүйелерінде жұмыс істеу
мүмкіндіктері жеткілікті.
C++ тілі де процедуралық тіл, бірақ онда ОБП тілінің ерекшеліктері кең
түрде қарастырылған. ОБП тілінде қолданылатын негізгі ұйымдар: класс, объект, оқиға, қасиеттер мен әдістер. Бұл ұғымдар:
объект - құрылымы класс типі арқылы сипатталатын айнымалы;
оқиға - объект жағдайының өзгеруі; қасиеттер - объект сипаттамалары (параметрлері); әдіс - класс элементтерін іздейтін команда не процедура, функция.
класс - пайдаланушы анықтайтын тип. Тип қасиеттер мен әдістерді бірге
қосып сипаттайды. Программада осы кластың жеке даналары дайындалады. ОБП-да класс үшін мұрагерлік, инкапсуляция және полиморфизм принциптері енгізілген. Мұрагерлік -- программада негізгі класс типінің туынды иерархиялық класта сақталуы, т.б.
Тілде жадпен жұмыс істеуге арналған арнайы конструктор, деструктор
функциялары да бар. Конструктор класс типті айнымалы үшін жадтан арнайы орын бөледі, деструктор бөлінген жадты тазалайды. Мысал үшін фигуралық объектілерді қарастырайық. Мұндағы класс - геометриялық фигуралар типі. Класс жазық және кеңістіктегі у фигуралар болып екі ішкі класқа бөлінеді (C тілінде оларды мұрагер типтер деп атайды). Жазық фигуралар класы төбелері бар (мысалы, үшбұрыш, төртбұрыш) және төбелерсіз (мысалы, шеңбер, эллипс) болып екі ішкі класка бөлінеді (олар иерархиялық мұрагер типтер).
С++ программмалау тілінің пайда болу тарихы 1972 жылдан бастау алды. Жоғарғы және төменгі деңгейдегі тілдер кездесетiн бұл программаны Деннис Дитчи және Брайн Керниген деген ғалымдар жасап шығaрған. Бұл тілді кейінірек Американың Ұлттық стандарттау орталығы растады.(ANSI) 1980 жылы Бьярна Страуструптың қабілетіне байланысты ANSI - дің өкілі - С++ тілі пайда болды. Онда басқа да тілдердің жақсы жақтары көрініс тапты. С++ тілі С тіліне қарағанда программистке дәстүрлі құрылымдық және объектілік бағытталған программаларды жасауға мүмкіндік береді.
С++ тілін қолданып жасалған программалық қамсыздандыру идентификаторлар, кілттік сөздер, функциялар, тұрақтылар, препроцессорлар, құрылымдар, массивтер және т.б элементтерден тұрады.
Программалауды объектілік тұрғыда жүргізу ХХ ғасырдың 80-шы жылдарының ортасынан бастап 90-шы жылдардың соңына дейінгі уақытты қамтиды. Объектіге бейімделген программалау программаны объектілер жиынтығы түрінде көрсетуге негізделген күрделі программалық қамсыздандыруды жасаудың технологиясы ретінде анықталады. Мұнда әрбір объект белгілі бір тип, яғни класс данасы болып табылады. Ал, кластар қасиеттердің мұрагерлікке байланысты иерархиялықты құрайды. Мұндай жүйедегі программалық объектілердің өзара әрекеті хабарлама жіберу көмегімен орындалады. Программаның объектілік құрылымы ең алғаш күрделі жүйелерді иметациялық модульдеудің simula (ХХ ғасыр 60-шы жылдар) қолданған болатын. Объектілік тұрғыда программалаудың Delphi, C++ Builden Visual C++ құралдары кеңінен таралған.

1.2. С++ программалау тілі.
С++ тілі тасымалданатын тіл, яғни мұнда жазылған қолданбалы программалар бір компьютерден екінші компьютерге оңай тасымалданады. С++ тілі оңай компиляцияланатын тіл. Ол жүйелік программада қолданылады. С++ тілі кез - келген есепті шығару үшін қолайлы.
С++ тілінің негізгі элементтері алфавит, тұрақтылар, идентификаторлар, қызметші сөздер, түсініктемелер жатады. С++ тілінің компиляторы программаның қатарларын оқып, лексема деп аталатын символдар тобына бөледі. Лексема - бұл С++ компиляторында өзінше мағынасы бар программа тексінің бірлігі. Операция таңбалары, тұрақтылар, идентификаторлар, қызметші сөздер лексемаға мысал бола алады.
С ++ тілінің алфавиті:
1. Латынның үлкен және кіші әріптері
2. Араб цифры
3. Арнайы символ
4. Операция
С++ тілінің әрпі және цифры:
- үлкен латын әрпі:
A B C D E F G H K L M N O P Q R S T U V W X Y Z
- кіші латын әрпі:
a b c d e f g h k l j I m n o p q r s t u v w x y z
- араб цифры
0 1 2 3 4 5 6 7 8 9;
Символдық тұрақты - () дәйекше белгісіне алынған әріп, цифр, арнайы
символ болуы мүмкін.
Символдық қатал - () тырнақша белгісіне алынған символдар тізбегі.
Турбо С++ - де жұмыс істегенде программаны жазуға, редакциялауға,
компиляциялауға, қиыстыруға және түзетуге болады. Осы барлық комплкстердің мүмкіндіктері Интегралданған Ортаны Өңдеуге негізделген (ИОӨ).
Сонымен қатар Турбо С++ ортасын өңдеу программасы келесі қосымша мүмкіндіктерді береді. Олар программа жазу процесін өте көп жеңілдетеді:
▪ монитор экранына бірнеше терезе шығады және экранға көшуге болады;
▪ тышқан жәрдемінің болуы;
▪ көшіру және орналастыру командаларының болуы ( HELP терезесінен
EDIT терезесіне көшіруге болады.
▪ басқа программаны және кері қайтарманы шығару мүмкіндігі
▪ ИОӨ үш визуалды компоненттен тұрады: меню қатары - экранның жоғары шетінде, терезелі аймақ - экранның ортасында және қалып-күй қатары - экранның төменгі шетінде орналасқан. Нәтежесінде менюден бірнеше элемент таңдағанда экранға диалог блогы шығады.
Менюдің барлық командаларын пайдаланудың негізгі құралы меню қатары болып табылады. Турбо С++ ортасында көрініп және орындалған жұмыстың көп бөлігі терезе болады. Терезе - экран аймағы, басқа тереземен байланысын бағыттауға, бүкіл экран ашуға, өзгертуге , көшуге болатын өлшемді айтамыз.

1.2.1 Динамикалық жад
Физикалық принциптерге сүйене отырып, әдетте жад 0-ден бастап нөмірленетін байттар тізбегі түрінде қарастырылады. Әр нөмір сол байттың адресі. Өлшемдері 65536 (64кбайт) байттан аспайтын жад бөліктері сегменттер делінеді. Олар 16-ға бөлінетін адрестерден басталады. Сонымен жад көптеген сегменттерден тұрады. Сегменттерді бөлу және оларға айнымалыларды, констант түрлерін, программаның кодын орналастыруды жүйе автоматты түрде, өзі орындайды. Транслятор орналастыратын айнымалылар статикалық, ал программаның орындалу барысында орын бөлуді қажет ететін айнымалылар динамикалық делінеді. Статикалық айнымалылар Турбо Паскальда программаның VAR бөлімінде сипатталынады да, оларға жадтың берілгендер сегментінен орын бөлінеді. Ал блоктардағы (процедуралар мен функциялар) сипатталынған жергілікті (локальді) айнымалыларға бөлек стек сегментінен орын бөлінеді. Әдетте стек өлшемі 16384 байт. Оны 64 кбайтқа {$M} директивасымен ұлғайтуға болады.
Стандартты процедуралар мен функциялардың да берілгендері стек сегментіне орналасады. Программадағы айнымалыларға берілгендер сегментінен, стек сегментінен орын жетпегенде динамикалық бөлінетін жадты пайдалану қажет болады. Динамикалық бөлінетін жад - жүйелік программалар орналаспайтын, қалған бос жад. Оны үйінді (кучка) деп те атайды. Динамикалық жадтың өлшемі әдетте 0, ал ең үлкен өлшемі - 655360.
Программамен жұмыс істеу кезінде әдетте айнымалылар мен тұрақтылардың жадтың қай орнына жазылатыны ескерілмейді де, олардың атаулары бойынша жұмыс істей беріледі. Бұл әдіс үлкен орынды талап ететін берілгендерді өңдегенде қиындықтар тудырады. Мысалы, массивтермен жұмыс істеу үшін оларды алдын ала сипаттап (жадтан орындар бөліп) қою керек. Кіші көлемді массивпен жұмыс істеу кезінде үлкен орын бөлу жадты үнемі пайдалану тәсіліне жатпайды. Кейде 64 Кбайттан артық орын алатын үлкен көлемді берілгендермен жұмыс істеуге тура келеді. Турбо Паскальда бір типті берілгендер үшін 64 Кбайттан артық орын (сегмент) бөлінеді де, орын жетіспегені жөнінде хабар беріп, компьютер тоқтап қалады. Мұндай жағдайда, немесе жалпы жадты тиімді пайдалану әдісі - сілтемені және динамикалық бөлінетін жадты (ДБЖ) пайдалану.
ДБЖ - ның өлшемінің 0-ге дейін азаюын және ең үлкен шегіне жетуін келесі директива арқылы өрнектеуге болады:
{$Mстек өлшемі,үйінді минимумы,үйінді максимумы}, үйіндіден орын алатын айнымалылар динамикалық айнымалы делінеді.

1.2.2. Сілтемелер
Сiлтеме сiлтеменi инициалдау кезінде көрcетiлген атаудың синонимі болып табылады. Сiлтеменi əрқашанда атаусызданатын (аты жойылып кететін) нұсқауыш ретiнде қарастыруға болады. Сiлтеменi жариялаудың форматы:
типі & аты;
мұндағы тип - сілтеме нұсқап тұратын шаманың типі, & - сілтеме операто- ры, ол өзінен кейін жазылатын атау сілтемелік типті айнымалының аты екенін көрсетеді, мысалы:
int kol;
int& pal = kol; * pal сілтемесі - kol үшін
альтернативті атау *
const char& CR = '\n'; тұрақтыға сілтеме
Төмендегі ережелерді есте сақтаңыз.
Айнымалы-сілтеме сипатталу кезінде айқын түрде инициалдануы
тиіс, бұл ереже келесі жағдайларда: сілтеме функцияның параметрі болғанда (80 б.), ол extern ретінде сипатталған кезде немесе кластың мəліметтер өрісіне (193 б.) сілтеме жасаған кездерде орындалмайды.
Иницалданғаннан кейін сілтемеге басқа айнымалыны меншіктеуге болмайды.
Сілтеменің типі сол сілтеме жасалған шама типімен сəйкес келуі керек.
Сілтемелерге нұсқауыштарды анықтауға, сілтемелер жиымдарын құ-
руға жəне сілтемелерге сілтеме жасауға тыйым салынған.
Сілтемелер көбінесе функциялар параметрлері ретінде жəне функцияның қайтаратын мəндерінің типтері түрінде қолданылады. Сілтемелер функциялардың құрамында белгілі бір адреске берілетін айнымалыларды адрессіздендіру операциясының қатысуынсыз қолдануға мүмкіндік береді, бұл программаны оқуды жеңілдетеді (толығырақ Функцияның параметрлері бөлімінде берілген, 79 б.).
Сілтеменің нұсқауыштан айырмашылығы - ол компьютер жадында қосымша орын алмайды жəне ол сол шаманың басқа атауы болып табылады. Сілтемеге операциялар қолдану сілтеме жасалған шаманың өзгеруіне алып келеді.
Мәні адрес болып келген айнымалылар нұсқағыштар (көрсеткіштер) делінеді. Нұсқағыштар - типсіз, типтік болып екіге бөлінеді. Типсіз сілтемелердің сипатталынуы:
Var сілтемелер тізімі: Pointer; Мысалы, Р: Pointer;
Типтік сілтемелердің сипатталуы:
Var нұсқағыштар тізімі: ^ базалық тип аты.
Типтік сілтеме - динамикалық айнымалы деп аталатын, кез келген басқа базалық тип айнымалысына сілтеу.
Мысалы:
Var
PINT: ^ Integer; { PINT - бүтінге сілтеме}
P_ String: ^ String; { P_ String - жолдық қатарға сілтеме}
T: ^ Array [1..5] of real; {қатарға сілтеме}
Адресі сілтемеде көрсетілген деректерді, сілтеме атынан кейін ^ таңбасын жазу арқылы алуға болады.
Pint ^:=2 { Pint - те көрсетілген адреске 2-ні меншіктеу}
P_ String^: = `университет';
Меншіктеу операторының орнына әдеттегідей енгізу операторын пайдалану да мүмкін: read (p^).
Динамикалық жадтан айнымалы үшін орын бөлінуі динамикалық айнымалының құрылуы деп түсінеміз. Динамикалық айнымалылар құрылмай тұрғанда сілтемелер мәні анықталмайды. Оған дейін сілтемеге арнайы мән беруге болады. Pint: = Nil;
Динамикалық айнымалыны құру үшін NEW процедурасы қолданылады. Мысалы, NEW (Т); яғни динамикалық айнымалы құрылады. Әзірше оның компоненттері анықталмаған. Динамикалық айнымалының өз аты жоқ, олар сілтеме атауы және ^ - таңбасы арқылы белгіленеді.
Мысалы, Т - массивінің 3-ші элементі - Т ^[3]
Сонымен NEW ( типтік сілтеме ) динамикалық айнымалы құрады да, ал DISPOSE ( типтік нұсқағыш) жадты үйіндіге босатып қайтарады.
Мысалы,
VAR PS: ^ String;
Begin
New (PS) ; {256 байт жад бөлінеді}
PS ^ : = `Динамикалық жад';
Writeln (PS^);
Dispose (PS); {PS^ - жад бөлігі босады}
End.
NEW - процедурасы арқылы ДБЖ-дан бөлінетін орын қажетті мөлшерден үлкен болуы мүмкін. GetMem процедурасы жадтан қажетті орын бөліп, оның адресін сілтемеге салады.
GetMem (сілтеме , байд өлшемімен жад бөлігі);
GetMem (Р, 1000); {1000 байт жад аймағы бөлініп, оның адресі Р-ға жазылады}.
NEW және GetMem процедураларымен бөлінген жад өлшемі 8-ге бөлінетіндей болып толықтырылады және ДБЖ сегменттерінің бастапқы адрестері 8-ге бөлінеді.
Егер үйіндіде қажетті жад мөлшері болмаса, экранға мынадай хабарлама шығады:
Runtime Error 203 ...
Мұндай үйінді толып қалатын жағдай болмау үшін, динамикалық жадты пайдалану қажеттігі болмаған кезде оны босатып, үйіндіге қайтарып беріліп отырғаны жөн. Ол үшін Dispose және FreeMem процедуралары қолданылады.
FreeMem процедурасы нұсқағышта көрсетілген адрес бойынша жад бөлігін босатып, үйіндіге қайтарады.
Транслятор статикалық жадтың көлемін 1 сегментпен, яғни 64 кбайтпен шектейді. Ал динамикалық жад көлемі компьютердің физикалық ресурсымен ғана шектеледі, яғни өте үлкен болуы мүмкін.

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

2.1. Мәліметтер құрылымы, динамикалық құрылым.
Мәліметтер құрылымы (Структура данных; data structure) -- 1) мәліметтерді ұйымдастыру схемасы; мысалы жиым немесе жазба құрылымын сатылы түрде өрнектеу тәсілі; 2) қабылданған тәсілдердің бірі бойынша біріктірілген және реттелген мәліметтер элементтерінің жиыны; мәліметтердің арасындағы физикалық немесе логикалық қатынас.
Мәліметтер - ақпараттың құрамдас бөлігі. Тіркелу әдісіне сәйкес
мәліметтер әртүрлі тасуыштарда сақталады және тасымалданады. Ең кең тараған мәліметтерді тасуыш кағаз болып табылады. Заттың оптикалық қасиеттерінің өзгерісі лазерлік сәулелердің көмегімен жазылатын тасуыштар СD-ROM-да қолданылады. Магниттік касиеттердің өзгерісін колданатын тасуыштар ретінде магниттік таспалар мен дискілерді алуға болады.
Ақпараттық процесс барысында мәліметтер әдістердің көмегімен бір түрденекінші түрге өзгереді. Мәліметтерді өңдеу көптеген амалдардын жиынтығынан тұрады:
:: мәліметтерді қалыптастыру;
:: мәліметтерді сүзгілеу;
:: мәліметтерді сұрыптау;
:: мәліметтерді топтастыру;
:: мәліметтерді архивтеу;
:: мәліметтерді қорғау;
:: мәліметтерді тасымалдау;
:: мәліметтерді түрлендіру.

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

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
СИ бағдарламалау тілінде жадыны басқару
СИ тіліндегі динамикалық жады
Мәліметтердің динамикалық құрылымы
ЭЕМ архитектурасы жайлы
Си бағдарламалау тілінде сызықтық тізімдерді таңдау және іздеу
ОПЕРАЦИЯЛЫҚ ЖҮЙЕНІҢ ЯДРОСЫ
Сандарды спираль бойынша орналастыру
Windows-та виртуальді жадымен жұмыс істеу
Операциялық жүйелердің даму бағыттары. Операциялық жүйенің функциялары және міндеттері
Микропроцессорлардың құрылымы
Пәндер