Структурные схемы запоминающих интегральных микросхем динамического типа

Лекция № 16

Задача 2.

Работа с динамическими массивами

Задача 1.

Какие действия совершаются в каждой строке программы?

Var

A,C:integer; {переменные целого типа}

B,D:^Integer; {указатели на переменные целого типа}

E:^Real; {указатель на переменную вещественного типа}

Begin

New(B); New(D); New(E); {Определяем значения указателей и выделяем память}

B^:=234; {Присваиваем значение 234 области памяти, на которую ссылается

указатель B}

С:=456; { Присваиваем значение переменной C}

D:=B; {Присваиваем значение указателя B указателю D, т.е указатель D ссылается

на ту же область памяти, что и указатель B, таким образом D^=234}

B^:=С; {Присваиваем значение переменной С области памяти, на которую

ссылается B}

E^:=C+D^ {Присваиваем сумму значения переменной С и значения на которое

ссылается указатель D}

Dispose(B); Dispose(D); {Уничтожение указателей и освобождение памяти}

{ВНИМАНИЕ!!! Проверить, ничего не забыли? (Необходимо еще DISPOSE(E)) }

End.

Динамические переменные могут входить в состав выражений.

Пример:

p1^:=p1^+8; Write('p1^=',p1^:3);

Пример:

В результате выполнения программы:

Program DemoPointer;

var p1,p2,p3:^Integer;

begin

p1:=NIL; p2:=NIL; p3:=NIL;

New(p1); New(p2); New(p3);

p1^:=2; p2^:=4;

p3^:=p1^+Sqr(p2^);

writeln('p1^=',p1^:3,' p2^=',p2^:3,' p3^=',p3^:3);

p1:=p2;

writeln('p1^=',p1^:3,' p2^=',p2^:3)

end.

на экран дисплея будут выведены результаты:

p1^= 2 p2^= 4 p3^= 18

p1^= 4 p2^= 4

Рассмотрим следующее описание:

Type

TMas=array[1..50] of integer; {Tmas – массив из 50 целых чисел}

Var M: array[1..50] of ^Integer; {М- массив из 50 указателей на целые числа}

P:^TMas; {P – указатель на массив из 50 целых чисел }

В этом примере М – массив из ^Integer. Тогда M[1]-указатель на 1 число, а М^[1]-значение, на которое ссылается указатель, то есть при присваивании значений правильным будет следующее:

M^[1]:=123; M^[2]:=345; M^[3]:=456;

Также возможны такие операции как M[1]:=M[2] (после этого указатель M[1] будет ссылаться на 2-й элемент массива и соответственно M^[1]=345; M^[2]=345; M^[3]=456;)

При использовании указателя P такая операция недопустима (об этом будет сообщено еще на этапе компиляции). Допустима только операция присваивания значений по ссылкам:

Р^[1]:=123; Р^[2]:=345; Р^[3]:=456;

Упорядочить динамический массив по возрастанию элементов первого столбца.

program primer;

uses crt;

const n=3; m=4;

type mas=array[1..n] of integer;

masuk=array[1..m] of ^mas;

var dm:^masuk;

i,j,min,k,r:integer;

Begin

textbackground(1);

clrscr;

textcolor(15);

getmem(dm,sizeof(mas)*n);

randomize;

for i:=1 to n do

begin

getmem(dm^[i],2*n);

for j:=1 to m do

dm^[i]^[j]:=random(100)

end;

writeln('Массив 1:');

for i:=1 to n do

begin

for j:=1 to m do

write(dm^[i]^[j]:5);

writeln;

end;

writeln('Массив 2:');

for i:=1 to n-1 do

begin

min:=dm^[i]^[1];

for k:=i+1 to n do

if min>dm^[k]^[1] then

begin

min:=dm^[k]^[1];

for j:=1 to m do

begin

r:=dm^[i]^[j]; dm^[i]^[j]:=dm^[k]^[j];
dm^[k]^[j]:=r;

end;

end;

end;

for i:=1 to n do

begin

for j:=1 to m do

write(dm^[i]^[j]:5);

writeln;

end;

freemem(dm^[i],2*n);

repeat until keypressed;

End.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: