Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методички по информатике / Конспект лекций (Delphi).pdf
Скачиваний:
63
Добавлен:
27.05.2015
Размер:
1.2 Mб
Скачать

35

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 for j := 1 to m do

<вывод Data^[i]^[j]>; for i := 1 to n do

FreeMem(Data^[i],SizeOf(integer)*m);

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

end.

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

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

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

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

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

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

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

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

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

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

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

var

Data : array of string;

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

n,m,k,i : integer; begin

AssignFile(f,???);

36

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.