Жоспар №11228

Turbo Pascal тілінде көрсеткіштер мен динамикалық жадты басқару

Сұрақ-жауап

Сұрағыңызға жасанды интеллект жауап береді

Мазмұны Кіріспе......................................................................................................................3 Негізгі бөлім 1.1. Көрсеткіштер. Көрсеткіштерді анықтау........................................................4 1.2.Динамикалық ұғымды ерекшелеу және босату........................................................................................................................6 1.3.Көрсеткіштерді қолдану.................................................................................12 1.4.Динамикалық ұғыммен жұмыс істеу үшін процедуралар мен 1.5.Үйінтек әкімдігі.........................................................................................19 Қорытынды.....................................................................................................21 Есептің қойылымы..........................................................................................22 Пайдаланған әдебиеттер...................................................................................23 Кіріспе Программада анықталған айнымалылардың барлығы Динамиканың ұғым принципі Динамикалық ұғым принципі Мәліметтерді динамикалық орналастыру Негізгі бөлім 1.1.Көрсеткіштер.Көрсеткіштерді анықтау. Дербес компьютердің жедел Турбо Паскальда программистке Көрсеткіш - өз мағынасы Дербес компьютерде тұрақтар Дербес компьютер жадынан әрбір Дербес компьютердің тұрақ Жадының 16 байттық Сегмент 15 14 13 12 11 10 9 8 + Ығысу = 15 14 13 12 11 10 9 8 Адрес 19 18 17 16 15 14 13 12 1- сурет. ДК – ң тұрағының Сонымен, өзінің ішкі Негізінде, Турбо Паскальда көрсеткіш < Көрсеткіш айнымалысының аты < Көрсеткіш айнымалысының аты Көрсеткіштің мұндай түрін Жоғарыда айтылғандай, Егер, мысалы : var p1,p2:^integer; p3:^real; pp:pointer; алайда p1:=p2 ; меншіктеуге болады, ал p1 : = p3; болмайды, себебі p1 pp : = p3 ; p1 : = pp; деп 1.1.Динамикалық ұғымды ерекшелеу және Барлық Турбо Паскальда Үйінтек басы стандартты Содан бастап мәліметтерді Мысалы: Var I , j : ^ integer; R : ^ real; Begin New (i); … end. Үлкен тұрақ Жүйелік аймақ Үйінтек программа Жүелік аймақ HeapEnd HeapPtr HeapOrg Кіші тұрақ Осы көрсеткіштің фрагменті New (r ); Көрсеткіш кейбір I ^ : = 2 R ^ : = 2 * Осылайша, көрсеткіш көрсететін Динамикалық орналасқан мәліметтерді R ^ : = sgr Ешқашан мұндай оператор болмайды : R : = sgr (r ^) R көрсеткішіне нақты мән R ^ : = sgr (r ); R көрсеткішінің мәні тұрақ болып R ^ := I ; R көрсеткіші көрсететін мәліметтеріне Динамикалық ұғымды үйінтектен алып Dispose (r ); Dispose (I ); Операторлары үйінтекке бұрыш I Айтып кетейік, Dispose (RTR ) процедурасы Алайда, процедураны бос көрсеткішке Const P : ^ real begin . . . if p = new (p ); . . . dispose (p); p: = NIL ; , . . end. Басқа көрсеткіштермен ешқандай Жоғарыда келтірілген фрагмент көрсеткішті NEW және DISPOSE Басқа мүмкіншілігі - Мысалы: 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 процедурасы арқылы P Release (P) динамикалық p1^ p2^ p3^ p4^ p5^ p1^ p2^ p1^ p2^ p4^ p5^ Mark(p) 3 – сурет. Динамикалық ұғым құрылымы а) босау алдында; б) DISPOSE(P3)-тен кейін; Ескере кету керек, RELEASE – ты GETMEM (P,SIZE) – жадыны резервтеу FREEMEM (P,SIZE) – жадыны босату қолданылады. Мұндағы P – типтелмеген көрсеткіш; SIZE – үйінтектің керекті немесе GETMEM процедурасының GETMEM - FREEMEM процедурасын қолдану Турбо Паскальда типтелмеген көрсеткіштердің Var i,j : ^ integer; r : ^ real; begin new (i); j:=i; j^:=2; dispose(i); { HeapPtr:= new(r); r^:=pi; writeln(j^) end. Экран бетіне шығады? Бұл сұраққа 1.3.Көрсеткіштерді қолдану. Біраз қорытынды жасайық. Сонымен, Үлкен мәліметтер массивін орналастыру Бұл мәселені мынандай тәсілмен Var I,j : integer; PtrArr : array [1..100, 1..200] of ^ Begin For i:=1 to 100 do For j:=1 to 200 New (PtrArr[i,j]); ……. End. Енді қайтадан құрылған динамикалық PtrArr [1,1]^ :=0; If PtrArr [i,j*2 ] ^ > 1 Еске түсірсек, көрсеткіштің ішкі Бұл жағдайдан шығудың жолы – Сонда да, берілген есепті SEG(X) – тұрақтың сегментті бөлігін OFS(X) – ығысуды қайтарады. Осы функцияларға айналым Мысалы, егер бізде Var P:^ real; Begin …… new (p); p^:=3.14; …… end. бар болса, онда SEG (P) Бір жағынан, PTR( SEG, OFS: WORD): POINTER 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… тұрақ анықтау операторы программада 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 ығысуы бар 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, 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}. Қаралған мысалда әр жол 1.4.Динамикалық ұғым принципімен жұмыс істеу Төменде динамикалық ұғымға жүктелгенде ADDR функциясы. POINTER типті жауапты Атауы: ADDR(X) Мұндағы X – кез келген программа CSEG функциясы. Микропроцессордың СS регистірінде Атауы: CSEG Жауабы WORD типті сөзбен DISPOSE процедурасы. Бұрын резервтелген типтелген Атауы: DISPOSE(TP) Мұндағы TP – типтелген көрсеткіш. DSEG функциясы. Микропроцессордың DS регистірінде Атауы : DSEG Жауабы WORD типті сөзбен FREEMEM процедурасы. Бұрын типтелмеген Атауы: FREEMEM(P,SIZE) Мұндағы P – типтелмеген көрсеткіш; SIZE – босатылатын фрагменттің байыппен Процедураны қайталаму қолданудан (босатылған фрагменттер) GETMEM процедурасы. Типтелмеген көрсеткішке Атауы: GETMEM(P,SIZE) Процедураға бір жүктелгенде 65521 MARK процедурасы. HEAPPTR үйінтегінің Атауы: MARK(PTR) Мұндағы PTR – кез келген MAXAVAIL функциясы. Үйінтектің ең Атауы: MAXAVAIL Жауабы LONGINT типті болады. MEMAVIL функциясы. Үйінтектің жалпы Атауы: MEMAVIL Жауабы типті LONGINT болады. NEW процедурасы. Айнымалыны орналыстыру үшін Атауы: NEW(TP) Мұндағы TP – типтелген көрсеткіш. Процедураға бір жүктелгенде 65521 NEW процедурасы функция ретінде Type PInt=^integer; Var P:=PInt; Begin P:=New (PInt); ………. End. Динамикалық ұғымға объектіні орналастырғанда, OFS функциясы. Көрсетілген объектінің Шақыру: OFS(X) Мұндағы X – кез келген PTR функциясы. SEG Шақыру: PTR(SEG, OFS) Мұндағы SEG – құрамында сегмент RELEASE процедурасы. Үйінтек аймағын Атауы: RELEASE(PTR) Мұндағы PTR – кез келген SEG функциясы. Құрамында Шақыру: SEG(X) Мұндағы X – кез келген SIZEOF функциясы. Көрсетілген объектінің Шақыру: SIZEOF(X) Мұндағы X – айнымалы, функция немесе 1.5.Үйінтек әкімдігі. Бұрын айтылғандай, үйінтек әкімдігі Type PFreeRec=^TFreeRec; TFreeRec=record Next:pointer; Size:pointer; End; Бұл тізімді құрылым HEAPPTR де - 0…15 Function BlockSize(Size : pointer) : Longint; Type PtrRec = record Lo, Hi: word End; Var LengthBlock : Longint; Begin BlockSize : = LongInt(PtrRec(Size).Hi)*16+PtrRec(Size).Lo End; Программаны жіберген соң HEAPPTR және Қорытынды Қорыта келгенде, программада анықталған Динамикалық айнымалыларды анықтаудың екі :^; Көрсеткіштің базалық типіне ешқандай :pointer; Типсіз көрсеткіштерді пайдалану құрылымы Турбо Паскльда динамикалық ұғым Есептің қойылымы Турбо Паскаль жөнінде кітаптар УДК нөмері Автордың аты – жөні Атауы Шыққан жылы Кітапханадағы осы кітаптар данасы Келіп түскен кітаптар жөнінде Program esep; Const M=15; Type T=Record F:array[1..M]of string A:string U:word G:word M:string D:word End; Var Tizim:T; i,S,S1:integer; Begin Write (‘келіп түскен кітаптар саны=’); Read (S); End; For i:=1 to S do S1:=0 S1=S1+S[i]; Writeln(‘келіп түскен кітаптарды қосу=’,S1); End. Пайдаланылған әдебиеттер: 1.Фаронов В.В. Программирование на 2.Бурин Е.А. Программирование на языке 3.Самашко Г.Л. Салтыков А.И. Программирование 4.Адаменко А. Паскаль на примерах 5.Культин Н. Турбо Паскаль в задачах 6.Сукачёв Турбо Паскаль 7.0 Теория 7.“Интернет программирование” Шапошников, Киев, 2000ж 8.“Active-X” Том Армстронг, Киев, 1998ж 9.“Самоучитель HTML” А.Гончарев, Питер, Санкт-Петербург, 1998ж 10.“Полное руководство по HTML” В.Квучук, Моква, 1998ж 11.“100 000 рефератов” CD. 12.Матросов А.В., Сергеев А.О., Чаунин М.П. HTML 4.0 13.Использование HTML 4.0: Пер. с англ. – 3-е 14.Балапанов Е.Қ., Бөрібаев Б., Дузбаева Р.М., Матрбек Ғ.Б; 25 23 

Мәтінді көшіру үшін белсенді жазылым қажет.

Пайдаланушы ID: 659236

Жарияланған күні: