Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК№15.doc
Скачиваний:
13
Добавлен:
24.08.2019
Размер:
72.7 Кб
Скачать

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.

6

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]