Динамикалық жады. Құрылымдық типтер



1 Құрылымдық типтер
2 Көрсеткіштер және динамикалық жад
Динамикалақ жад – программаның талабы бойынша операциялық жүйенің ядросы болатын, компьютердің оперативті жады.
Берілгендердің динамикалық орналасуы программамен жұмыс кезіндегі динамикалық жадтың қолданылуын білдіреді. Бұған қарағанда статикалықорналасу программа компиляциясынң процесіндегі Delphі компиляторымен ерекшеленеді. Динамикалық орналастыру кезінде алдын-ала ешқандай тип, ешқандай көлем белгілі болмайды.
Көрсеткіштер.
Оперативті жад әрқайсысы жеке номерлі байт информацияларды сақтауға арналған ұяшық жиынтықтарынан тұрады. Бұл номерлер адрес деп аталады, олар жадтың кез келген байтына баруға мүмкіндік береді. Delphі программиске динамикалық жадты жүргізудің тәсілін алып келеді. Олар көрсеткіштер деп аталады. Көрсеткіштер - өзінің мағынасы ретінде жадтың байт адресін құрайтын ауыстырылған нәрсе. Көрсеткіштердің көмегімен динамикалық жадқа Delphідің кез келген танымал типтерін орналастыра аламыз. Солардың ішінен бірнешеуі Byte, char, shortlnt, Boolean ғана 1 байтты құраса, қалғандары бірнешеден тұрады. Сондықтан көрсеткіш берілгеннің алғашқы байтын ғана адрестейді. Ереже бойынша көрсеткіш берілгеннің бірнеше типімен байланысады. Мұндай көрсеткіштер типтендірілген деп аталады.

Құрламдық типтер
Құрламдық типтердің ішіндегі кез келгені осы тип құрацтын элеметтердің
көптігімен ерекшеленеді. Рбір элемент өз кезегінде құрылымдық типке тиесілі
болуы мүмкін. Бұл типтердің жүзеге асуы туралы айтуға мүмкіндік береді.
Delpyi- де типтің енуінің тереңдігі еркін болады, алайда олардың жалпы
тереңдігі. 2 Гбайттан аспауы керек. Сыйысушылық мақсатында стандартты тіл
Пакальмен Delpyi- де құрлымдық типті баяндаудан бұрын кейінге сақтап
қойылған сөз packed- ті қояды. Бұл компиляторға мүмкіндігінше жадты
үнемдеуді белгілейді.
Массивтер.
Delpyi- дегі массивтер көбінесе програмалардың басқа да тілдеріндегі
аналогиялық типтермен ұқсас болып келеді. Массивтердің ерекше маңыздылығы
олардың компонеттерінің бір типті екендігінде. Бұл компонеттерді оңай ретке
келтіруге және оның реттік номерінің кез келгенін байланыспен қамтамасыз
етуге болады, Мысалы.
Type didit ═ ariay [ 0.9] of char;
mafrix═ array [byfe] of single;
Kar
m; mafrix;
d; didit;
i; infeder;
beqin
m [ 17]; ═ ord [ d[i-1]] \10;
end.
Массив типін баяндау мынадай түрде беріледі: Типтін аты ═ ariay
[сп. Тип. ин] of тип;
Бұл жердегі тип аты дұрыс идентификатор; array of – кейінге сақтап
қойылған сөздер. тип инд - үтірмен бөлінген бір немесе бірнеше индексті
топтардың тізімі; квадрат жақшалар синтаксис талабы: тип - Delphi-дің кез
келген типі.
Delphi-де индексті тип ретінде күштілігі 2 Гбайттан аспайтын реттік
типтерді кез келгенін қолдана беруге болады. ( бірақ Long kord және Int
64-тен басқа). Айнымалыны анықтау үшін массив ретінде осы айнымалыны
баяндау кезінде болады. Мысалы
Var а, 6: ( 1..10) of Reol;
Индексті тип ретінде, негізінен, индекстің өзгеру шекарасы берілетін
тип – диопазон қолданылады. Тип типі массивті баяндау үшін of сөзіне
барса, онда ол басқа массивпен де бола алады, Мысалы Type
Mat ═ array [0 .. 5] of array [-2..2] of ═ array [char] of Byte:
Мүны тұтас күйде былай беруге болады.
Type
Mat ═ array [0 .. 5,-2..2 char] of Byte:
Құрлымдық типтің ену тереңдігі, жалпы алғанда, массивтердікі де
еркін, сол себепті де индексті типтердің тізіміндегі элметтер санына шектеу
қойылмайды, бірақ кез келген массивтің ішкі жалпы ұзындығы 2 Гбайттан артық
болуы мүмкін емес ТК жадында массив элеметтері бір-бірінің артынан
лесетіні соншалық, кішкентай адрестен үлкеніне өткенде массивтің оң индексі
тез өзгереді. Мысалы:
Delphi-де a: array [1 ..2,-1..2 ] of Byte:
6 eqin a [1 ,1] : ═ 1;
a [2 ,1] : ═ 2;
a [1 ,2] : ═ 3;
a [2 ,2] : ═ 4;
end.
Жадта мұндай массивтер үшін рет-ретімен бірінің артынан бірі байттар
орналасқан: 1,3, 2,4. Бұл жағдай Моve Memory жадын көшірудің стандартты
поцедурасын қолданғанда өте маңызды болады. Delphi-де бір оператырмен бір
массивтің барлық элементтерін сол типтің екінші массивіне өткізуге әбден
болады. Мысалы: Var .
а, 6 array [1 ,5] of Single;
6 eqin
a = b;
end
Бұл иеленуден кейін А массивінің барлық бес элеметі де В массивтік
дегі элметтің мағынасын алады. Келесі хабарлау массивтің әр түрлі типтерін
пайда етеді. Var .
а: array [1. .5] of Single;
6 array [1 ..5] of Single;
Сондықтан төмендегі оператор қате туралы хабар береді. a = b
Массивтерде қатынас операциясы анықталмаған мысалы, былай жазуға
болмайды: if a = b then...
Мәселен, екі массивті элемент ретінде салыстыруға болады
а, b array [1..5] of Single;
ed: Boolear:
i: Byte:
bedin
ed: = True;
For i: = 1 to 5 do
If a [i] b [i] then
Ed: = False:
If ed fhen
End.
Динамикалық массивтер:
Delphо версиясында бірінші рет 4 динамикалық массивтер енгізілген.
Диномикалық массивтерді хабарлау кезінде индекстің шекарасын көрсетудің
қажеті жоқ:
а: array of Ibteder;
B: array of array of char;
C: array of array of array of Real;
Мұндай мысалда динамикалық массив А тек бір өлшеулі болады, массив В-
екі, ал массив С- 3 өлшеулі болып келеді. Диномикалық массивтердің әрбір
өлшеуі бойынша жадтардың орналасуымен индекстердің шекарасын көрсету
Setlendth функциясынның көмегімен инициализатция жолымен программаның
орындалуына кіру кезінде іске асады. Келесі оператырдың орындалуында бір
өлшемді А диномикалық массиві иницализденеді, яғни 3 бүтін сандық мағына
сиятындай жадты иеленеді: Setlendth ( А,3):
Индикстің төменгі шекарасы динамикалық массивтің кез келген өлшемі
бойынша әр дайым 0-ге тең, сондықтанда А үшін жоғарғы индекстің шекарасы 2
болады.
Факті ретінде диномакалық массивтің идентификаторы массивтің орналасуы
үшін бөліп алынған, жадтың бірінші байтының адресін құрайтын көрсеткішке
жіберіледі. Сол себептіде осы жадтың босалуы үшін де идентификаторға NIL
мағынасын беру жеткілікті. ( басқа жолы Finalize процедурасын қолдану):
А, В: array of Inteder;
bedin
Жадты үлестіреміз:
Setlendth ( А, 10);
Setlendth ( В, 20):
Массивтерді қолданамыз:
Жадты босатамыз:
А: NIL
Finalize (В):
End.
Динамикалық массивтің оның қандай да бір өлшемі бойынша ұзындығын
өлшеу кезінде, әуелі, жаңа массивтің орналасуы үшін керекті жад сақталады,
одан кейін ескі массивтің элементтері жаңасына көшеді. Осыдан кейін
бұрынғы массивпен белгіленген жад босатылады. Үлкен динамикалық массивтің
шекарасының өзгеруімен байланысты қосымша уақыт өткізуді қысқарту үшін
бірден максимальды ұзындығы бар массив құрған дұрыс.
Көп өлшемді массивтерде, бірінші оның бірінші өлшемінің ұзындығы,
кейін екінші: үшіншісінікі қойылады. Мысалы, динамикалық массив былай
құралады: 3х3 Var .
А, В: array of array of Inteder;
Екі өлшемді диномикалық массив
bedin
бірінші өлшемнің ұзындығын орнатамыз ( бағана саны):
Setlendth ( А, 3):
әрі бағаның ұзындығын береміз:
Setlendth ( А (0),3);
Setlendth ( А (1),3);
Setlendth ( А (2),3);
End.
Setlendth – көшірілген параметр мөлшерімен қарауды көздейтін
стандартты кішкене программа 4 қатардан орнына біреуін қолдануға болады.
Setlendth ( А,3,3,):
Мынаған назар аударайық: Стандартты Паскаль тілінің кәдімгі
массивтеріне қарағанда динамикалық массивтер екінші және келесі өлшем
бойынша әр түрлі ұзындықты болып келеді. Өткен өлшемде квадратты массив
анықталған: 3х3 Бірақ ешкім бізге үшбұрышты массив құруға кедергі бола
алмайды:
Setlendth ( А,3);
Әр бағаның ұзындығын береміз;
Setlendth ( А (0),3);
Setlendth ( А (1),4);
Setlendth ( А (2),5);
Көп өлшемді динамикалық массивтерде № 1 өлшемініңкез келген әр
элементі өзі алдына динамикалық массив болып есептеледі. Ол иницализацияға
мұқтаж. Мысалы, затттық кубикалық массивті инициализдеуге болады. 3х3х3:
А: array of array of array of Real;
I, j Inteder
bedin
Setlendth ( А ,3);
For i: = o to 2 do
bedin
Setlendth ( А(i),3);
For j: = o to 2 do
Setlendth ( А(I, j),3);
End ... .
End
Запись ( жазып алу), (басылым)
Жазып алу – компоненттердің белгіленген мөлшерінен тұратын құрлым.
Массивтерден айырмашылығы запистердің компоненттері әр түрлі типті болып
келеді. Запистің компаненттіне жіәберілу мүмкін болса, өріске (поля) ат
қойылады.
Запись типін баяндаудің құрлымы мынадай:
тип аты = record өріст end:
Бұл жерден тип аты – дұрыс индефикатор; record end- кейінге сақтап
қойылған сөздер өріс -* өріс тізімі: запись бөлімдерінің жалғасуын
білдіреді. Записьтің әр бөлімі бір-бірінен үтірмен ажыратылған бір немесе
бірнеше өріс идентификаторынан тұрады Мәселен:
Type Birthday= record var a,b; Birthday;
Day Month ; Byte;
Year = Mord
End
Бұл мысалда Birthday ( туылған күн) типі - Day Month және Year
өрістерімен бірге басылған запись: ауыстырылған А және В Birthday
записьінің типін құрайды.
Массивтегі сияқты ауыстырылған запись типінің мағынасын басқа
ауысумен қамтамасыз етуге болады. Мысалы а, в: әр записьтің компонентіне
кіруге болады, егер құрамды атты қолданса, яғни ауыстырылғанның атын
көрсетіп кейін нүкте және өріс атын а. Day 27.

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

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Құрылымдық типтер және жолдық процедуралармен функциялар
СИ тіліндегі динамикалық жады
ТАРМАҚТАЛҒАН АЛГОРИТМДЕРДІ ПРОГРАММАЛАУДЫ ОҚЫТУ
Мәліметтердің динамикалық құрылымы
Delphi программалау ортасымен зертханалық жұмыстарды жүргізуге арналған әдістемелік нұсқаулар
Динамикалық тізімдермен жұмыс
MS VS NET ортасында интернет қолданбалар құру
Жадыны динамикалық үлестіру
Массив элементтерінің түрлеріне шектеулер
Turbo Pascal жүйесінде процедураларды ұйымдастыру технологиясы
Пәндер