То же самое делается проще и быстрее процедурой FillChar.
FillChar(DataBase, SizeOf(DataBase), 0);
Но указатели – не обычные числа, возможно ли заполнять их нулями? Здесь проявляется универсальность процедуры FillChar, которая способна работать с данными любого типа. А ноль как раз и соответствует внутреннему представлению константы NIL.
Прежде, чем двинуться дальше, подготовьте файл с исходными данными и хорошенько проверьте работу программы «P_53_1».
Переходим ко второму этапу, где мы добавим процедуру сортировки массива указателей. Напомню, что в сортированном массиве работает быстрый двоичный поиск, – этим и привлекает нас сортировка. Вот программа «P_53_2», где процедуры чтения и распечатки базы данных пропущены, – их следует взять из программы «P_53_1».
{ P_53_2 – Сортировка полицейской базы данных }
const CSize = 1000; { Максимальное количество записей в базе данных }
type TRec = record { Тип записи для базы данных }
mNumber : integer; { Номер авто }
mFam : string[31]; { Фамилия владельца }
end;
PRec = ^TRec; { Тип указатель на запись }
TBase = array[1..CSize] of PRec; { Тип массив указателей }
var DataBase : TBase; { База данных – это массив указателей }
Count: integer; { Количество записей в базе }
{ Чтение данных из файла БД }
function ReadData(var F : text): integer;
{ Взять из P_53_1 }
end;
{ Распечатка БД }
procedure ExpoDataBase;
{ Взять из P_53_1 }
end;
{ FarmSort – "Фермерская" сортировка }
procedure FarmSort(var arg: TBase;
var L, R : Integer; T : PRec;
begin
for L := 1 to Right-1 do
{ Сдвигаем правый индекс влево }
for R := Right downto L+1 do begin
{ Если левый элемент оказался больше правого,
то меняем элементы местами }
if arg[L]^.mNumber > arg[R]^.mNumber then begin
{ Перестановка элементов массива }
T:= arg[L]; arg[L]:= arg[R]; arg[R]:= T;
end;
end;
end;
var F : text;
begin {--- Главная программа ---}
FillChar(DataBase, SizeOf(DataBase), 0);