Листинги рабочих примеров
Все приведенные листинги примеров были подготовлены в интегрированной среде разработки Borland Delphi 7.0 и являются функционально завершенными элементами программного обеспечения. Примеры представлены программными модулями и консольными приложениями. Без существенных изменений они могут быть использованы в разработке собственного прикладного программного обеспечения.
Создание и управление списковыми объектами
Модуль демонстрирует приемы работы со списковым классом, прототипами функций и динамической памятью.
unit common;
Interface
uses Classes, SysUtils;
Type
{ Прототип функции сравнения }
TCompareFunc = function(aData1, aData2: Pointer): Integer;
{ Прототип процедуры сортировки }
TSortProc = procedure(aList: TList;
aFirst, aLast: Integer; aCompare: TCompareFunc);
function CompareLongWord(aData1, aData2: Pointer): Integer;
procedure InitList(Count: LongWord);
procedure DisposeList;
procedure PrintList;
procedure PrintItem(Index: LongWord);
procedure SaveList(FileName: string);
function OpenList(FileName: string; var Size: LongWord): Boolean;
var List: TList;
Implementation
{ Функция сравнения двух целых чисел, заданных своими указателями }
function CompareLongWord(aData1, aData2: Pointer): Integer;
Begin
{ Значение первого элемента меньше значения второго }
if LongWord(aData1^) < LongWord(aData2^) then
Result:=-1 else
{ Значения элементов равны }
if LongWord(aData1^) = LongWord(aData2^) then
Result:=0 else
{ Значение первого элемента больше значения второго }
Result:=1;
end;
{ Инициализация массива случайными числами }
procedure InitList(Count: LongWord);
Var
pw: ^LongWord;
i: LongWord;
Begin
Randomize;
for i:=0 to Count-1 do
Begin
New(pw);
pw^:=Random(1000);
List.Add(pw);
end;
end;
{ Вывод содержимого массива }
procedure PrintList;
var i: Integer;
Begin
if List.Count > 0 then
for i:=0 to List.Count-1 do
WriteLn(IntToStr(i)+': '+IntToStr(LongWord(List.Items[i]^)));
end;
{ Вывод значения одного элемента массива, заданного своим порядковым номером }
procedure PrintItem(Index: LongWord);
Begin
if List.Count > 0 then
WriteLn(IntToStr(Index)+': '+IntToStr(LongWord(List.Items[Index]^)));
end;
{ Освобождение всех элементов массива и самого массива }
procedure DisposeList;
Var
pw: ^LongWord;
i: LongWord;
Begin
if List.Count > 0 then
Try
{ Освобождение памяти, на
которую указывают элементы массива }
for i:=0 to List.Count-1 do
Begin
pw:=List.Items[i];
Dispose(pw);
end;
Finally
{ Удаление объекта массива }
List.Free;
end;
end;
{ Сохранение содержимого массива в текстовом файле }
procedure SaveList(FileName: string);
Var
TF: TextFile;
i: LongWord;
Begin
AssignFile(TF, FileName);
Try
ReWrite(TF);
for i:=0 to List.Count-1 do
Writeln(TF, LongWord(List.Items[i]^));
Finally
CloseFile(TF);
end;
end;
{ Чтение содержимого выборки из текстового файла и инициализация массива }
function OpenList(FileName: string; var Size: LongWord): Boolean;
Var
TF: TextFile;
pw: ^LongWord;
Begin
Size:=0;
Result:=True;
Try
AssignFile(TF, FileName);
Try
Reset(TF);
Repeat
New(pw);
Readln(TF, pw^);
List.Add(pw);
until Eof(TF);
Finally
CloseFile(TF);
Size:=List.Count;
end;
Except
Result:=False;
end;
end;
Initialization
List:=TList.Create;
Finalization
DisposeList;
end.
Дата добавления: 2021-12-14; просмотров: 332;