Жоспар №11714

Турбо Паскальда көрсеткіштер мен динамикалық жадыны басқару

Сұрақ-жауап

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

 Динамикалық ұғым принципімен Мазмұны Кіріспе.......................................................................2-3 Негізгі бөлім Көрсеткіштер. Көрсеткіштерді анықтау.........4-5 Динамикалық ұғымды ерекшелеу және босату...................................................................6-12 Көрсеткіштерді қолдану.................................12-16 Динамикалық ұғыммен жұмыс істеу үшін Үйінтек әкімдігі...............................................19-21 Қорытынды..............................................................22-23 Есептің қойылымы................................................24 Пайдаланған әдебиеттер.......................................25 Кіріспе Программада анықталған айнымалылардың Динамиканың ұғым Динамикалық ұғым Мәліметтерді динамикалық Негізгі бөлім Көрсеткіштер.Көрсеткіштерді анықтау. Дербес Турбо Паскальда Көрсеткіш - өз Дербес компьютерде тұрақтар Дербес компьютер жадынан Дербес компьютердің Жадының 16 Сегмент 15 14 13 12 11 10 + Ығысу = 15 14 13 12 11 10 Адрес 19 18 17 16 15 14 1- сурет. ДК – ң Сонымен, өзінің Негізінде, Турбо Паскальда < Көрсеткіш айнымалысының < Көрсеткіш айнымалысының Көрсеткіштің мұндай Жоғарыда айтылғандай, Егер, мысалы var p1,p2:^integer; p3:^real; pp:pointer; алайда p1:=p2 ; меншіктеуге болады, p1 : = p3; болмайды, себебі pp : = p3 ; p1 : = pp; деп Динамикалық ұғымды ерекшелеу Үйінтек басы Содан бастап Мысалы: Var I , j : ^ integer; R : ^ real; Begin New (i); … end. Үлкен тұрақ Жүйелік аймақ Үйінтек программа Жүелік аймақ HeapEnd HeapPtr HeapOrg Кіші тұрақ Осы көрсеткіштің New (r ); Көрсеткіш кейбір I ^ : = 2 R ^ : = 2 Осылайша, көрсеткіш Динамикалық орналасқан R ^ : = Ешқашан мұндай оператор R : = sgr (r ^) R көрсеткішіне нақты R ^ : = sgr (r R көрсеткішінің мәні тұрақ R ^ := I ; R көрсеткіші көрсететін Динамикалық ұғымды үйінтектен Dispose (r ); Dispose (I ); Операторлары үйінтекке бұрыш Айтып кетейік, Dispose (RTR Алайда, процедураны бос көрсеткішке Const P : ^ 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); new(r); r^:=pi; writeln(j^) end. Экран бетіне шығады? Бұл Көрсеткіштерді қолдану. Біраз қорытынды Үлкен мәліметтер массивін Бұл мәселені мынандай Var I,j : integer; PtrArr : array [1..100, 1..200] of Begin For i:=1 to 100 For j:=1 to New (PtrArr[i,j]); ……. End. Енді қайтадан құрылған PtrArr [1,1]^ :=0; If PtrArr [i,j*2 ] ^ Еске түсірсек, көрсеткіштің Бұл жағдайдан шығудың Сонда да, берілген SEG(X) – тұрақтың сегментті OFS(X) – ығысуды қайтарады. Осы функцияларға Мысалы, егер бізде Var P:^ real; Begin …… new (p); p^:=3.14; …… end. бар болса, онда Бір жағынан, PTR( SEG, OFS: Var i,j : integer; PtrStr: array[1..100] of pointer; Pr: ^real; Const SizeOfReal = 6; Begin For i:=1 to 100 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 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 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}. Қаралған мысалда әр Динамикалық ұғым принципімен жұмыс ADDR функциясы. POINTER типті Атауы: ADDR(X) Мұндағы X – кез келген CSEG функциясы. Микропроцессордың СS Атауы: CSEG Жауабы WORD типті DISPOSE процедурасы. Бұрын резервтелген Атауы: DISPOSE(TP) Мұндағы TP – типтелген DSEG функциясы. Микропроцессордың Атауы : DSEG Жауабы WORD типті FREEMEM процедурасы. Бұрын Атауы: FREEMEM(P,SIZE) Мұндағы P – типтелмеген көрсеткіш; SIZE – босатылатын фрагменттің Процедураны қайталаму қолданудан (босатылған GETMEM процедурасы. Типтелмеген Атауы: GETMEM(P,SIZE) Процедураға бір жүктелгенде MARK процедурасы. HEAPPTR Атауы: MARK(PTR) Мұндағы PTR – кез MAXAVAIL функциясы. Үйінтектің Атауы: MAXAVAIL Жауабы LONGINT типті MEMAVIL функциясы. Үйінтектің Атауы: MEMAVIL Жауабы типті LONGINT NEW процедурасы. Айнымалыны орналыстыру Атауы: NEW(TP) Мұндағы TP – типтелген Процедураға бір жүктелгенде NEW процедурасы функция ретінде Type PInt=^integer; Var P:=PInt; Begin P:=New (PInt); ………. End. Динамикалық ұғымға объектіні OFS функциясы. Көрсетілген Шақыру: OFS(X) Мұндағы X – кез PTR функциясы. Шақыру: PTR(SEG, OFS) Мұндағы SEG – құрамында RELEASE процедурасы. Үйінтек Атауы: RELEASE(PTR) Мұндағы PTR – кез SEG функциясы. Шақыру: SEG(X) Мұндағы X – кез SIZEOF функциясы. Көрсетілген Шақыру: SIZEOF(X) Мұндағы X – айнымалы, функция Үйінтек әкімдігі. Бұрын Type PFreeRec=^TFreeRec; TFreeRec=record Next:pointer; Size:pointer; End; Бұл тізімді құрылым де - Function BlockSize(Size : pointer) : Type PtrRec = record Lo, Hi: word End; Var LengthBlock : Longint; Begin BlockSize : = LongInt(PtrRec(Size).Hi)*16+PtrRec(Size).Lo End; Программаны жіберген соң Қорытынды Қорыта келгенде, программада Динамикалық айнымалыларды анықтаудың :^; Көрсеткіштің базалық типіне :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(‘келіп түскен кітаптарды End. Пайдаланылған әдебиеттер: Фаронов В.В. Программирование Бурин Е.А. Программирование на Самашко Г.Л. Салтыков А.И. Адаменко А. Паскаль на Культин Н. Турбо Паскаль в Сукачёв Турбо Паскаль 2 

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

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

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