Көрсеткіштермен жұмыста келесі процедуралар қолданылады:
New(P) – динамикалық жадыда жаңа айнымалы құратын процедура. Р – қандай типті айнымалы құру керек болса, сол типті айнымалы құратын көрсеткіш.
Dispose(P) – топқа (куча) Р көрсеткішті объекті алып тұрған жады бөлігін қайтаруға мүмкіндік беретін процедура.
Бұл процедуралар параметрлері тек типтендірілген бола алады. Аол типтендірілмеген көрсеткіштермен жұмыста да осындай процедуралар қолдануға болады. Олар:
GetMem(P,Size) – жадыны резервке алу;
FreeMem(P,Size) – жадыны босату.
Мұндағы, Р – типтендірілмеген көрстекіш, Size – топтың байтпен берілген бөлігінің өлшемі ( до 65521 байт). Көрсеткіштерге теңдік пен меншіктеуге тексеру операцияларын да қолдануға болады.
Мысал:
Var x,y:^integer;
Begin
new(x); {бүтін типті динамикалық объект құрамыз}
x^:=13; {х адресі бойынша 13 мәнін егіземіз}
y:=x; { у-ке де сол адресті енгіземіз}
writeln(y^);
end.
Сілтемелі айнымалы «бос» мән қабылдай алады. Ол nil қызметші сөзімен ерекшелінеді. Бұл меншіктеуді new процедурасы орындалғанға дейін жүргізуге болады. Nil мәні - бұл екі нольдік сөз. Ол кез келген типтегі көрсеткішке меншіктелінеді. Динамикалық орналастырылған мәліметтерді программаның кез келген жеріне орналастыруға болады. Мысалы:
Var a, b, c : ^ real;
Begin a^ := sqr(b^)+c^-17;
a:=sqr(b^) деп жазуға болмайды, себебі, көрсеткішке нақты мәндегі өрнекті меншіктеуге болмайды.
Мысал:
64 Кб өлшемді мәтіндік файл берілген. Әр жолда бір нақты сан орналасқан. Файл мазмұнын динамикалық жадыға орналастыра отырып, массивке жазу керек. Массив элементтерінің орташа мәнін табу керек. 10000 өлшемді бүтін массив құру керек. Оны -100-ден 100-ге дейінгі кездейсоқ сандармен толтыру керек және орташа мәнін есептеу қажет.
Program Srednee;
Const NMax = 10000;
Type Diapazon = 1..NMax;
MasInt = Array[Diapazon] Of Integer;
MasReal = Array[Diapazon] Of Real;
Var PIint : ^MasInt; PReal : ^MasReal;
I, Midint : longInt; MidReal : Real; T : Text; S : string;
Begin
Write('Файл атын енгізіңіз: '); ReadLn(S);
Assign(T, S); Reset(T); MidReal := 0; MidInt := 0;
Randomize;
NEW(PReal); {Нақты массивке жады бөлу}
{Нақты массивті енгізу және қосындысын есептеу}
While Not Eof (T) Do
Begin ReadLn(T, PReal^[I]); MidReal := MidReal + PReal^[I] End;
DISPOSE(PReal); {Нақты массивті жою}
NEW(PInt); {Бүтін массивке орын бөлу}
{ Бүтін массивті енгізу және қосындысын есептеу }
For I := 1 To NMax Do
Begin PInt^[I] := -100 + Random(201); MidInt := MidInt + PInt^[I] End;
{Орташа мәндерін шығару }
WriteLn('орташа бүтін мән: ', MidInt Div NMax);
WriteLn('орташа нақты мән: ', (MidReal / NMax) : 10 : 6)
End.
Достарыңызбен бөлісу: |