Динамикалық ұғым принципімен программа құру технологиясы


Жұмыс түрі: Реферат
Тегін: Антиплагиат
Көлемі: 24 бет
Таңдаулыға:
Динамикалық ұғым принципімен программа құру технологиясы
Мазмұны
- Кіріспе. . . 2-3
- Негізгі бөлімКөрсеткіштер. Көрсеткіштерді анықтау . . . 4-5Динамикалық ұғымды ерекшелеу және босату . . . 6-12Көрсеткіштерді қолдану . . . 12-16Динамикалық ұғыммен жұмыс істеу үшін процедуралар мен функцияларды пайдалану. . 16-19Үйінтек әкімдігі . . . 19-21
- Қорытынды. . . 22-23
- Есептің қойылымы. . . 24
- Пайдаланған әдебиеттер. . . 25
Кіріспе
Программада анықталған айнымалылардың барлығы оның орындалуы кезінде компьютердің жедел жадының мәліметтер сегменті деп аталатын бөлігінде орналасады. Мәліметтер сегментінің ұзындығы 80х86 микропроцессор архитектурасымен анықталады және 65536 байт құрайды. Мәліметтер сегментінің аздығы программада өлшемі үлкен массивтерді пайдалануда үлкен қиындық туғызады. Бір жағынан, дербес компьютердің (ДК) жады көлемі (әдетте 640 Кбайттан кем емес ) үлкен көлемді есептерді сәтті шығаруға жеткілікті. Бұл жағдайдан шығу үшін динамикалық ұғым принципі қолданылады.
Динамиканың ұғым принципі - ДК жедел жадысы, Д. К. микропроцессорының сәулетіне байланысты, көлемі 300 Кбайттан кем емес жедел жадының арнайы бөлігіне мәліметтерді орналастыру мүмкіндігі бар. Ол бөлік компьютер жедел жадының мәліметтер сегментінен және стектен тыс орналасады. Динамикалық ұғым принципінде орналасқан мәліметтерді динамикалық деп атайды. Оның статикалық мәліметтен ерекшелігі, оларды кез келген уақытта компьютер жадына орналастырып, не одан өшіріп отыруға болады.
Динамикалық ұғым принципі бұл іс жүзінде мәліметтері үлкен көлемді массивтерді өңдеуде жалғыз мүмкіндік. Көп практикалық есептерді динамикалық ұғым принципінсіз шығару қиын немесе шығару мүмкін емес. Мұндай қажеттілік автоматтандырылған жобалау жүйесін құру (ААЖҚ) кезінде туындайды: ААЖҚ - да қолданылатын бір қалыптылық математикалық моделі басқа жобаларда анағұрлым өзгешелеу болуы мүмкін; бұл жағдайда статистикалық ұғым принципін қолдану мүмкін емес. Ақыры, Дербес компьютердің графикалық және дыбыстық тәсілдерімен жұмыс кезінде мәліметтерді уақытша сақтау үшін динамикалық ұғым кеңінен қолданылады.
Мәліметтерді динамикалық орналастыру - динамикалық ұғым принципіне тікелей программамен жұмыс істеу барысында қолдану. Бұған қарағанда, мәліметтерді статикалық орналастыру Турбо Паскаль компиляторымен программа компиляциялау барысында іске асады. Мәліметтерді динамикалық орналастыруда, орналастырылатын мәліметтердің не типі, не мөлшері белгілі болмайды, және оларға статикалық айнымалылар сияқты аты бойынша жүктеуге болмайды.
Негізгі бөлім
Көрсеткіштер. Көрсеткіштерді анықтау. Дербес компьютердің жедел жады әрқайсысы 1 байт информация сақтай алатын, нөмірленген элементар ұяшықтардың жиынтығы болып табылады. Ұяшықтардың нөмірлері олардың тұрақтары деп аталады. Динамикалық мәліметтер жедел жадыдағы тұрақтары бойынша анықталады.
Турбо Паскальда программистке динамикалық ұғым принципін басқаруға үлкен мүмкіндік беретін ол - көрсеткіштер.
Көрсеткіш - өз мағынасы ретінде жедел жады байтының тұрағын құрайтын айнымалы.
Дербес компьютерде тұрақтар екі он алты разрядты сөздермен беріледі. Олар сегмент және ығысу деп аталады.
Дербес компьютер жадынан әрбір тұрақ төрт байт орын алады. Тұрақтың алғашқы екі байтын оның сегменті, ал соңғыларын ығысу деп атайды. Сегмент - жады аумағы, оның ұзындығы 65536 байт (64 Кбайт) және ол физикалық тұрақтан басталады. Олар көрсеткіш мәнінің жедел жадыдағы орнын толық анықтайды. Сегмент көрсеткіш мәнінің алғашқы байтын көрсетсе, ығысу байт санын анықтайды.
Дербес компьютердің тұрақ аумағы 1 Мбайтты құрайды. Дербес компьютердің қазіргі заманғы процессорлі компьютерлерде 80386 және одан да көп тұрақ Турбо Паскальда 1 Мбайт шеңберінде тұрақтандыру үшін 20 екілік разряд керек, олар екі он алты разрядтық сөздерден (сегмент және ығысу ) келесі ретпен құрылады (1 - сурет ) : сегмент құрамы солға төрт разрядқа ығысады, босаған оң разрядтар нөлмен толады, жауабы ығысу құрамына қосылады.
Жадының 16 байттық фрагменті параграф деп аталады, сондықтан, сегмент жадыны параграф нақтылығымен тұрақтандырады деп айтуға болады. Әр сегментке үздіксіз және жеке тұрақтандырылған жады обласы сәйкес келеді. Сегменттер жадыда бірінен соң бірі үзіліссіз немесе бірнеше интервалмен, немесе бір - бірін жауып жүруі мүмкін.
Сегмент
+
Ығысу
=
Адрес
1- сурет. ДК - ң тұрағының құрылу схемасы.
Сонымен, өзінің ішкі құрылысы бойынша кез келген көрсеткіш сегмент немесе ығысу арқылы берілген екі сөзінің қосылуын білдіреді. Көрсеткіш көмегімен динамикалық ұғым принципінде кез келген Турбо Паскальда белгілі мәліметтер типін орналастыруға болады. Олардың тек кейбіреуі ғана (Byte, Char, Shortint, Boolean) 1 байт орын алады, ал басқалары - бірнеше көршілес орын алады. Сондықтан іс жүзінде көрсеткіш тек алғашқы мәлімет байтын тұрақтайды.
Негізінде, Турбо Паскальда көрсеткіш кейбір мәлімет типімен байланыстырылады. Бұндай көрсеткіштерді типтендірілген деп атаймыз. Типтендірілген көрсеткіштерді анықтағанда тип атының алдына ^ таңбасы тіркеледі:
< Көрсеткіш айнымалысының аты > : ^ < базалық тип > ; Көрсеткіштің базалық типіне ешқандай шектеу қойылмайды. Көрсеткіштің бір ғана тұрақты nil мәні бар, ол айнымалы мәнінің жоқ екендігін білдіреді. Сілтемелерді nil мәнімен, не өзара салыстыруға да болады. Типтері бірдей болғанда ғана сілтемелердің біреуінің мәнін екіншісіне беруге де рұқсат етіледі. Турбо Паскальда көрсеткішті анықтай отырып, оны қандай да бір нақты мәлімет типімен байланыстырмаса да болады. Сол үшін Pointer стандартты типі қызмет істеді;
< Көрсеткіш айнымалысының аты > : pointer.
Көрсеткіштің мұндай түрін типтендірілмеген деп атаймыз. Типтендірілмеген көрсеткіштер нақты типпен байланысты еместіктен, олардың көмегімен құрылымы мен типі программа барысында өзгеріп отыратын мәліметтерді динамикалық орналастыру ыңғайлы.
Жоғарыда айтылғандай, көрсеткіш мәні жадыдағы айнымалылар тұрақтары болып табылады, сондықтан бір көрсеткіштің мәнін басқа көрсеткішке беруге болатынын күтуге болады. Бірақ іс жүзінде бұл дәл осылай емес. Турбо Паскальда мәндерді тек бірдей мәлімет типімен байланысты көрсеткіш арасында беруге болады.
Егер, мысалы :
var
p1, p2:^integer;
p3:^real;
pp:pointer;
алайда p1:=p2 ;
меншіктеуге болады, ал осы кезде
p1 : = p3;
болмайды, себебі p1 және p3 әр түрлі мәлімет типін көрсетеді. Бұл алайда, шектеу типтедірілмеген көрсеткіштерге таралмайды, сондықтан бізге
pp : = p3 ;
p1 : = pp; деп жазып, керек шешім алуға болар еді.
Динамикалық ұғымды ерекшелеу және босату. Барлық Турбо Паскальда динамикалық ұғым массив байттары ретінде қарастырылады. Оларды үйінтек деп атайды. Үйінтек үлкен тұрақта, жады облысынан кейін орналасады, оны программа денесі алып тұрады.
Үйінтек басы стандартты айнымалы HEAPORG - та (2 - сурет), соңы - айнымалы HEAPPTR көрсеткіші көрсетілед. Кез келген динамикалық орналастырылған айнымалы жадысы New процедурасымен ерекшелңнеді. Осы процедураға жүктелу параметрі типтелген көрсеткіш динамикалық тұраққа сәйкес мағына алады.
Содан бастап мәліметтерді орналастыруға болады.
Мысалы:
Var
I, j : ^ integer;
R : ^ real;
Begin
New (i) ; … end.
Үлкен тұрақ
Жүйелік
аймақ
Жүелік
аймақ
HeapEnd
HeapPtr
HeapOrg
Кіші тұрақ
Осы көрсеткіштің фрагменті орындалғаннан кейін I HEAPPTR үйінтек көрсеткішінің мәнін алады, ал HEAPPTR өз мәнін екіге арттырады, себебі I көрсеткішімен байланысты INTEGER - нің ішкі көрінісінің ұзындығы 2 байтқа тең. Оператор
New (r ) ; Қайтадан HEAPPTR көрсеткішінің ығысуына әкеп соғады, бірақ енді 6 байтқа, себебі REAL типінің ішкі көрінісінің ұзындығы осындай. Осындай ретпен басқа да кез келген типтің айнымалылары үшін жады ерекшелінеді.
Көрсеткіш кейбір мән алғаннан кейін, яғни, жадының нақты физикалық байтын көрсете бастауы, сондай- ақ тұрақ кез келген сәйкес типтің мәнін орналастыра алады. Ол үшін көрсеткіштен кейін ешқандай бос орынсыз ^ белгісі қойылады, мысалы :
I ^ : = 2 I ұғымының обылысына 2 мәні орналастырылған
R ^ : = 2 * pi ; r ұғымының обласына 6. 28 мәні орналастырдық.
Осылайша, көрсеткіш көрсететін мән, яғни үйінтекте орналасқан мәлімет, ^ белгісімен белгіленіп, көрсеткіштен кейін қойылады. Егер көрсеткіштен кейін ^ белгісі қойылмаса, онда бұл мәлімет орналасқан тұрақты білдіреді. Осы туралы ойланудың мәні бар : кез келген көрсеткіштің мәні тұрақ болып табылады, ал әңгіме тұрақ туралы емес, осы тұрақта орналасқан мәлімет туралы екенін көрсету үшін көрсеткіштен кейін ^ қойылады. Егер осыны нақты түсініп алса, динамикалық ұғым принципімен жұмыс істеуде кедергі болмайды.
Динамикалық орналасқан мәліметтерді программаның кез келген жерінде, константтар мен сәйкес типті айнымалыларды орналастыруға болатын жерінде қолдануға болады. Мысалы:
R ^ : = sgr (r ^) + I ^ - 17;
Ешқашан мұндай оператор болмайды :
R : = sgr (r ^) + I ^ - 17;
R көрсеткішіне нақты мән меншіктеуге болмайды. Сол сияқты бұндай оператор болмайды:
R ^ : = sgr (r ) ;
R көрсеткішінің мәні тұрақ болып табылады, және оны квадратқа енгізуге болмайды. Мынандай меншіктеу қате болады:
R ^ := I ;
R көрсеткіші көрсететін мәліметтеріне көрсеткіш мәнін меншіктеуге болмайды.
Динамикалық ұғымды үйінтектен алып қана қоюға болмайды, оны қайтаруға да болады. Ол үшін Dispose процедурасы қолданылады. Мысалы:
Dispose (r ) ;
Dispose (I ) ;
Операторлары үйінтекке бұрыш I және R көрсеткіштерімен ерекшелінген 8 байтты қайтарады.
Айтып кетейік, Dispose (RTR ) процедурасы RTR көрсеткішінің мәнін өзгертпейді, тек қана үйінтекке бұрын осы көрсеткішпен байланысты болған ұғымды қайтарады.
Алайда, процедураны бос көрсеткішке қайталап қолдану орындалу периодында қате пайда болуына әкеп соғады. Босаған көрсеткішті програмист резервтелген сөз NIL - мен белгілеуі болады. Қандай да бір көрсеткіш белгіленген бе әлде жоқ па екенін келесі жолмен тексеруге болады:
Const
P : ^ real = NIL ;
begin
. . .
if p = NIL then
new (p ) ;
. . .
dispose (p) ;
p: = NIL ;
, . . .
end.
Басқа көрсеткіштермен ешқандай салыстыру операцияларын істеуге болмайды.
Жоғарыда келтірілген фрагмент көрсеткішті анықтауының типтелген константа түрін бір уақытта оған Nil мәнін меншіктеу арқылы көрсетеді. Көрсеткіштің бастапқы мәні еркін болуы мүмкін айта кету керек. New процедурасының мәні меншіктелген көрсеткіштерді қолдану жүйемен қадағаланбайды, ол күтпеген шешімдерге әкеп соғуы мүмкін.
NEW және DISPOSE процедураларын меншіктелуінің қайталануы ұяшықталынған құрылымға әкеп соғады. Өйткені барлық программалар үйінтек әкімдігі деген ерекше көмекші программаның басқаруымен орындалады. Ол автоматты түрде сөздің программаңызға тіркелген және үйінтектегі бос фрагменттердің есебін жүргізеді. New процедурасына қайтадан меншіктелгенде бұл көмекші программа керекті айнымалы орналаса алатын ең аз бос фрагмент іздейді. Табылған фрагменттің тұрақ басы көрсеткішке оралады, ал көрсеткіштің өзі немесе оның керекті ұзындықты бөлігі үйінтектің бос емес бөлігі ретінде белгіленеді.
Басқа мүмкіншілігі - толық үйінтек фрагментінің босауы да. Осы мақсатпен динамикалық ұғымды ерекшелеу алдында. HEAPTR көрсеткішінің ағымды мәні MARK процедурасының көмегімен айнымалы - көрсеткіште есте сақталады. Енді кез келген уақытта MARK процедурасы еске сақтаған тұрақтан бастап, динамиканың ұғымының аяғына дейін үйінтек фрагментін босатуға болады. Ол үшін RELEASE процедурасы қолданылады.
Мысалы:
Var
P, p1, p2,
P3, p4, p5 : ^ integer;
Begin
New (p1) ;
New (p2) ;
Mark (p ) ;
New (p3) ;
New (p4) ;
New (p5) ;
. . .
release (p) ;
end.
Бұл мысалды HEAPPTR ағымды айнымалысы MARK (P)
процедурасы арқылы P көрсеткішіне орналастырылған, алайда жады айнымалыға резервтелген жоқ.
Release (P) динамикалық ұғымды белгіленген жерден бастап үйінтек басына дейін босатты. 3 - сурет NEW - DISPOSE және NEW - MARK - RELEASE процедураларының қаралған және RELASE (P) операторының орнына DISPOSE (P) үшін қолданылатын жағдайға жұмыс механизімін бейнелейді.
Mark(p) Dispose(p) Release (p)
3 - сурет. Динамикалық ұғым құрылымы
а) босау алдында; б) DISPOSE(P3) -тен кейін; в) RELEASE(P) -тен кейін;
Ескере кету керек, RELEASE - ты шақыру DISPOSE процедурасымен құрылған үйінтектегі бос фрагмент тізімін жояды. Сондықтан екі бірдій жадыны босату механизмін бірге бір программа көлемінде қолдану ұсынылады. Бұрын айтылғандай NEW процедурасының параметрі тек қана көрсеткіш бола алады. Типтелмеген көрсеткішпен жұмыс істеу үшін:
GETMEM (P, SIZE) - жадыны резервтеу
FREEMEM (P, SIZE) - жадыны босату
қолданылады.
Мұндағы P - типтелмеген көрсеткіш;
SIZE - үйінтектің керекті немесе босатылатын бөлігінің байтпен берілген көлемі.
GETMEM процедурасының үйінтекке бір жүктелуінде 65521 байтқа дейін динамикалық ұғымды резервтеуге болады.
GETMEM - FREEMEM процедурасын қолдану және динамикалық ұғыммен жұмыс ерекше абайлылықты және қарапайым ережелерді тиянақты орындауды қажет етеді: қанша жады резервтелсе, сонша жады босату керек, қай тұрақтан резервтелсе, сол тұрақтан босатылу керек.
Турбо Паскальда типтелмеген көрсеткіштердің бар болуы типтердің білінбейтін қалыптасуына кең мүмкіндік береді. Өкінішке орай NEW және DISPOSE процедураларында атауларды дұрыс қолданбаудан программада кеткен қателіктерді табу қиын, және де ол қаламайтын тип қалыптасуына әкеп соғуы мүмкін. Іс жүзінде, мынандай программа бар болсын:
Var
i, j : ^ integer;
r : ^ real;
begin
new (i) ; {i:=HeapOrg; HeapPtr:= HeapOrg+2}
j:=i; {j:= HeapOrg}
j^:=2;
dispose(i) ; { HeapPtr:= HeapOrg }
new(r) ; { r:= HeapOrg; HeapPtr:= HeapOrg+6}
r^:=pi;
writeln(j^) { ?? }
end.
Экран бетіне шығады? Бұл сұраққа жауап беру үшін HEAPPTR көрсеткішін бақылайық. Программа орындалуы алдында бұл көрсеткіш I көрсеткішіне сосын I көрсеткішіне жіберілген HEAPORG үйінтегінің тұрақ басының мәнін қабылдаған. DISPOSE(I) - ды орындаған соң үйінтектің көрсеткіші қайтадан HEAPORG мәнін қабылдайды. Бұл тұрақ NEW(r) процедурасында R көрсеткішіне жіберілген. R көрсеткішіне π=3, 14159 саны орналасқан соң, үйінтектің бірінші 2 байты осы санның ішкі көрінісімен толған болып шықты. Ал J әлі де HEAPORG - ның тұрағын сақтайды, сондықтан оператор WRITELN(J^) π санының 2 байтын бүтін санның ішкі көрінісі ретінде қарастырады. (Себебі J бұл INTEGER типіне көрсеткіш) және 8578 шығарады.
Көрсеткіштерді қолдану. Біраз қорытынды жасайық. Сонымен, динамикалық ұғым 200 … 300 немесе одан да көп Кбайт құрайды, оның басы HEAPORG айнымалысында сақталады, ал соңы HEAPEND айнымалысының тұрағына сәйкес келеді. Динамикалық ұғымның бос аймағының ағымды тұрағы HEAPPTR көрсеткішінде сақталады.
Үлкен мәліметтер массивін орналастыру үшін динамикалық ұғымды қалай пайдалану керек екені қарастырайық. Мысалы, 100x200 EXTENDED типті тікбұрышты матрицаның элементтеріне доступ қамтамасыз ету керек болсын.
Бұл мәселені мынандай тәсілмен шешуге болар еді:
Var
I, j : integer;
PtrArr : array [1. . 100, 1. . 200] of ^ real;
Begin
For i:=1 to 100 do
For j:=1 to 200 do
New (PtrArr[i, j] ) ;
…….
End.
Енді қайтадан құрылған динамикалық массив элементіне мынандай тұрақпен жүктелуге болады. Мысалы;
PtrArr [1, 1] ^ :=0;
If PtrArr [i, j*2 ] ^ > 1 then ……
Еске түсірсек, көрсеткіштің ішкі көрінісінің ұзындығы 4 байт құрайды, сондықтан PTRARR массивін орналастыру үшін 100*200*4=8 байт керек, ал ол мәліметтерді статикалық орналастыру үшін мәліметтер сегментінің көлемінен асып түседі (65536 байт) .
Бұл жағдайдан шығудың жолы - тұрақтық арифметика, яғни көрсеткіштер арифметикасы, себебі бұл жағдайда PTRARR көзсеткішінің массивін құрудан бас тартып, оған жүктелер алдында тікбұрышты матрицаның кез келген элементінің тұрағын анықтауға болады. Алайда, Турбо Паскальда көрсеткіштермен тіркестіру және байланыстырудан басқа операциялар анықталмаған.
Сонда да, берілген есепті шығаруға болады. Біз жоғарыдан білетінімізден, кез келген көрсеткіш сегмент пен ығысу сақталатын WORD типті 2 сөзден тұрады. Турбо Паскальда WORD типті кірістірілген екі функция анықталған. Олар мына сөздердің мазмұның алуға мүмкіндік береді:
SEG(X) - тұрақтың сегментті бөлігін қайтарады.
OFS(X) - ығысуды қайтарады.
Осы функцияларға айналым кезінде X аргументі болып кез келген айнымалы, көрсеткіш нұсқайтын айнымалы болуы да қызмет ете алады.
Мысалы, егер бізде
Var
P:^ real;
Begin
……
new (p) ;
p^:=3. 14;
……
end.
бар болса, онда SEG (P) функциясын 4 байтты P көрсеткіші бар тұрақтың сегментті бөлігіне қайтарады. Алайда SEG(P^) - 3. 14 саны сақталатын 6 байтты үйінтек аймағының сегменті.
Бір жағынан, PTR( SEG, OFS: WORD) : POINTER кірістірілмеген функцияның арасында кез келген типті көрсеткішпен бірігетін көрсеткіш мәнін құруға болады. Сондықтан мынандай іс - әрекеттер тізбегі шығады. Басында GETMEM прцедурасымен үйінтектен жарамды ұзындықты бірнеше фрагменттер алынады. Бұл мысалды қарастыру үшін фрагменттерді ұзындықтары бойынша тікбұрышты матрица, яғни 200*10=2000 байт, сиятындай етіп әр жолды жадыда орналысуының басы, 100 көрсеткіштен тұратын PTR массивінде еске сақталады. Енді жолдың кез келген элементіне кіру үшін осы элементтің ығысуының жолдың басынан бастап анықтау керек және сәйкес көрсеткіш құру керек.
Var
i, j : integer;
PtrStr: array[1. . 100] of pointer;
Pr: ^real;
Const
SizeOfReal = 6;
Begin
For i:=1 to 100 do
GetMem (PtrStr[i], SizeOfReal*200) ;
…….
{ [i, j] матрицасының элементіне жүктелу}
pr:= prt(seg(PtrStr[1] ^) ),
ofs(PtrStr[i] ^) +(j-i) *SizeOfReal) ;
if pr^ >1 then
……
end.
PR:=PTR… тұрақ анықтау операторы программада жиі қолданылатын болғандықтан матрицаның элементін қайтаратын GETR көмекші функциясын енгізген дұрыс және элементтің жаңа мағынасын анықтайтын PUTR процедурасын енгізген дұрыс. Және де осылардың әр қайсысы өз кезегімен тұрақ анықтау үшін ADDR функциясына жүктеледі. Келесі мысалда жадыда NxM кез келген санды матрица құратын және олардың орта мәнін табатын программа берілген.
Const
SizeOfReal = 6; {Real типті айнымалының ұзындығы}
N = 100; {бағандар саны}
M = 200; {жолдар саны}
Var
i, j : integer;
PtrStr : array [1. . N] of ponter;
S : real;
Type
RealPoint=^ real;
{}
function AddrR (i, j:word) :RealPoint;
{i сегменті мен j ығысуы бойынша нақты айнымалының тұрағы }
begin
AddrR:=ptr (seg(PtrStr[i] ^),
Ofs(PtrStr[i] ^+(j-i) *SizeOfReal)
End(AddrR) ;
{}
function GetR(i, j:integer) :real;
{i сегменті мен j ығысуы бойынша нақты айнымалының тұрағын шығарады}
begin
GetR:=AddrR(i, j) ^
End {GetR};
{}
procepure PutR(i, j:integer; x: real) ;
{i сегменті және j ығысуы бар тұрақты айнымалыға x мәнді нақтыны орналастырады}
begin
AddrR(i, j) ^:=x
End{PutR};
{}
begin {Main}
for i:=1 to N do
begin
GetMem (PtrStr[i], M*SizeOfReal) ;
For j:=1 to M do PutR(i, j, Random)
End;
S:=0;
For i:=1 to N do
For J:=1 to M do
s:=s + GetR(i, j) ;
writeln(s/(N*M) :12:10)
end {Main}.
Қаралған мысалда әр жол үйінтекте орналасады. Параграф жиегінен бастап PTRSTR-ң әр көрсеткіші үшін ығысу 0 - ге тең. Шынында да, GETMEM процедурасына қайталанба жүктелу кезінде кезекті фрагменттің басы оның алдындағысының артынан жүреді және сегмент жиегіне түспеуі мүмкін. Соңында, максимал ұзындықты (65521байт) фрагментті орналастырғанда соңғы байтты табу кезінде толып кетуі мүмкін.
Динамикалық ұғым принципімен жұмыс істеу үшін процедуралар мен функциялары пайдалану. Төменде динамикалық ұғымға жүктелгенде тиімді болатын жоғарыда қаралған процедуралар мен функциялар және басқалары туралы айтылады:
ADDR функциясы. POINTER типті жауапты қайтарады. Онда аргумент тұрағы орналасыда.
Атауы:
ADDR(X)
Мұндағы X - кез келген программа объекті кез келген айнымалы, процедура, функция аты. Қайтымды тұрақ кез келген типті тұрақпен сәйкес келеді. Айта кететін жәйт, осы сияқты жауапты @ операциясы қайтарады.
CSEG функциясы. Микропроцессордың СS регистірінде сақталатын мәнді қайтарады. (Программамен жұмыс істеудің басында программа кодының бас сегменті CS регистірінде орналасады) .
Атауы:
CSEG
Жауабы WORD типті сөзбен қайтады.
DISPOSE процедурасы. Бұрын резервтелген типтелген көрсеткішті динамикалық ұғым фрагментін үйінтекке қайтарады.
Атауы:
DISPOSE(TP)
... жалғасы- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.

Ақпарат
Қосымша
Email: info@stud.kz