
5. Работа с динамическими массивами
Рассмотрим следующее описание:
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;
Задача 2.
Упорядочить динамический массив по возрастанию элементов первого столбца.
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.