Динамикалық ұғым принципімен
Мазмұны
Кіріспе.......................................................................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