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