- •Содержание
- •1. PASCAL
- •1.1 Алфавит
- •1.2 Типы данных
- •1.3 Переменные
- •1.4 Константы
- •1.5 Стандартные функции
- •1.6 Выражения
- •1.7 Операторы
- •1.7.1 Оператор присваивания
- •1.7.2 Составной оператор
- •1.7.3 Условный оператор IF
- •1.7.4 Условный оператор CASE
- •1.7.5 Оператор цикла FOR
- •1.7.6 Оператор цикла REPEAT
- •1.7.7 Оператор цикла WHILE
- •1.8 Одномерные массивы
- •1.9 Многомерные массивы
- •1.10 Строки
- •1.11 Записи
- •1.12 Множества
- •1.13 Пользовательские типы
- •1.14 Файлы
- •1.15 Перечисляемый тип
- •1.16 Тип-диапазон
- •1.17 Функции и процедуры
- •1.18 Локализация имен
- •1.19 Модули
- •1.20 Операторы прерывания
- •1.21 Комментарии
- •1.22 Указатели
- •1.23 Динамические массивы Delphi
- •2. Основные положения ООП
- •3. Базовые классы Delphi
- •3.1 TObject
- •3.2 Exception
- •3.3 TList
- •3.4 TPersistent
- •3.5 TCollection
- •3.6 TCollectionItem
- •3.7 TStrings
- •3.8 TStringList
- •3.9 TGraphicsObject
- •3.10 TPen
- •3.11 TBrush
- •3.12 TCanvas
- •3.13 TGraphics
- •3.14 TPicture
- •3.15 TComponent
- •3.16 TControl
- •3.17 TWinControl
- •3.18 TGraphicControl
- •3.19 TTimer
- •3.20 TThread
- •3.21 TTreeView
- •3.22 TTreeNodes
- •3.23 TTreeNode
- •3.24 TForm
- •3.25 TMainMenu
- •3.26 TMenuItem
- •3.27 TStatusBar
- •3.28 TStatusPanels
- •3.29 TStatusPanel
- •3.30 TToolBar
- •3.31 TToolButton
- •3.32 TActionList
- •3.33 TAction
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.