Мазмұны
Кіріспе......................................................................................................................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