- •1.1 Общие положения
- •1.2 Количественные оценки
- •1.3 Устройство ПК
- •1.4 Программное обеспечение
- •1.5 Автоматизированные и информационные системы
- •1.6 Разное
- •1.7 Алгоритм
- •2. PASCAL
- •2.1 Алфавит
- •2.2 Типы данных
- •2.3 Переменные
- •2.4 Константы
- •2.5 Стандартные функции
- •2.6 Выражения
- •2.7 Операторы
- •2.7.1 Оператор присваивания
- •2.7.2 Составной оператор
- •2.7.3 Условный оператор IF
- •2.7.4 Условный оператор CASE
- •2.7.5 Оператор цикла FOR
- •2.7.6 Оператор цикла REPEAT
- •2.7.7 Оператор цикла WHILE
- •2.8 Одномерные массивы
- •2.9 Многомерные массивы
- •2.10 Строки
- •2.11 Записи
- •2.12 Множества
- •2.13 Пользовательские типы
- •2.14 Файлы
- •2.15 Перечисляемый тип
- •2.16 Тип-диапазон
- •2.17 Функции и процедуры
- •2.18 Локализация имен
- •2.19 Модули
- •2.20 Операторы прерывания
- •2.21 Комментарии
- •2.22 Указатели
- •2.23 Динамические массивы Delphi
- •3. ОСНОВНЫЕ ПОЛОЖЕНИЯ ООП
- •4. БАЗОВЫЕ КЛАССЫ DELPHI
- •4.1 TObject
- •4.2 Exception
- •4.3 TList
- •4.4 TPersistent
- •4.5 TCollection
- •4.6 TCollectionItem
- •4.7 TStrings
- •4.8 TStringList
- •4.9 TGraphicsObject
- •4.10 TPen
- •4.11 TBrush
- •4.12 TCanvas
- •4.13 TGraphics
- •4.14 TPicture
- •4.15 TComponent
- •4.16 TControl
- •4.17 TWinControl
- •4.18 TGraphicControl
- •4.19 TTimer
- •4.20 TThread
- •4.21 TTreeView
- •4.22 TTreeNodes
- •4.23 TTreeNode
- •4.24 TForm
- •4.25 TMainMenu
- •4.26 TMenuItem
- •4.27 TStatusBar
- •4.28 TStatusPanels
- •4.29 TStatusPanel
- •4.30 TToolBar
- •4.31 TToolButton
- •4.32 TActionList
- •4.33 TAction
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.