Көрсеткіштерді анықтау
Динамикалық ұғым принципімен
Мазмұны
Кіріспе.......................................................................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
Экономиканы талдаудың әдістері мен тәсілдері
Экономикалық талдау әдістері туралы
Статистикалық жіктеу, топтау және кестелер
Статистикалық мәліметтерді топтау
Өсу қарқыны
Статистикалық мәліметтерді ұсынудың әдістері
Статистика туралы түсінік және ғылыми міндеттері мен мақсаттары. Сұрақ-жауап түрінде
Статистикалық динамикалық қатарлар
Зерттеулердің сандық әдісін жүргізу процедурасы
ҚР-да шағын және орта бизнестің дамуын экономикалық талдау