Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_po_informatike_delphi+++++++.pdf
Скачиваний:
31
Добавлен:
29.02.2016
Размер:
872.19 Кб
Скачать

45

readln(n,m);

GetMem(Data,SizeOf(PMas1)*n); for i := 1 to n do

GetMem(Data^[i],SizeOf(integer)*m); for i := 1 to n do

for j := 1 to m do begin

write('Введите Data[',i,',',j,']: '); readln(Data^[i]^[j]]);

end;

for j := 1 to m do begin

for k := 1 to n-1 do begin

MaxI := k;

for i := k+1 to n do

if Data^[i]^[j]>Data^[MaxI]^[j] then MaxI := i;

Temp := Data^[k]^[j]; Data^[k]^[j] := Data^[MaxI]^[j]; Data^[MaxI]^[j] :=Temp;

end;

end;

for i := 1 to n do begin

for j := 1 to m do write(Data^[i]^[j],' ');

writeln;

end;

for i := 1 to n do FreeMem(Data^[i],SizeOf(integer)*m);

FreeMem(Data,SizeOf(PMas1)*n);

end.

(Дать графическую интерпретацию для всех типов работы с памятью)

2.23 Динамические массивы Delphi

Рассмотренная выше работа с динамическими массивами значительно упрощается в среде Delphi, где такие массивы описываются как

<идентификатор> : array [ of array …] of <тип элемента массива>

Выделение памяти для таких массивов производится с помощью оператора SetLength следующим образом

SetLength(<идентификатор >,<количество элементов>[,<количество элементов> …])

46

Используя повторно данную функцию можно увеличить или уменьшить размерность массива без потери данных.

Освободить память, занятую массивом, можно используя то же оператор SetLength, указав нулевое количество элементов, либо с помощью команды

<идентификатор> := nil;

Примечание: присвоение значения nil освобождает память только у динамических массивов Delphi. Для обычных указателей освобождение памяти не производится, что может привести к так называемой “утечке” памяти.

Пример (разбиение строк текстового файла на отдельные слова):

var

Data : array of string;

Data2 : array of array of string; f : TextFile;

n,m,k : integer; begin

AssignFile(f,'text.txt');

reset(f); n := 0;

while not EOF(f) do begin

inc(n);

SetLength(Data,n); readln(f,Data[n-1]);

end;

CloseFile(f);

SetLength(Data2,n); for i := 1 to n do begin

m := 0;

while Pos(' ',Data[i-1])>0 do begin

inc(m); SetLength(Data2[i-1],m); k := Pos(' ',Data[i-1]);

Data2[i-1,m-1] := Copy(Data[i-1],1,k-1); Delete(Data[i-1],1,k);

end;

if Data[i-1]<>'' then begin

inc(m);

Data2[i-1,m-1] := Data[i-1]; end;

end;

...

SetLength(Data2,0,0); Data := nil;

end.

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