Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч2.doc
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
1.7 Mб
Скачать
      1. Процедура создания массива записей по содержимому StringGrid

Эта процедура обеспечивает обмен информацией между компонентом StringGrid и массивом записей. Алгоритм процедуры заключается в циклическом вызове написанной ранее процедуры считывания записи из StringGrid. Ниже приводится код этой процедуры.

// Процедура формування масиву по змісту StringGrid

procedure getArrayFromGrid(var ar: TAttArray; var count: integer;

sg: TStringGrid);

var i: integer;

begin

count := sg.RowCount-1;

for i := 1 to count do

ar[i] := recordFromRowGrid(sg, i );

end;

      1. Процедура отображения массива в компоненте StringGrid

Эта процедура, как и предыдущая, обеспечивает обмен информацией между компонентом StringGrid и массивом записей. Алгоритм процедуры заключается в циклическом вызове написанной ранее процедуры вывода записи в строку StringGrid. Ниже приводится код этой процедуры.

// Процедура відображення масиву у StrinGrid

procedure showArrayInGrid(sg: TStringGrid; const ar: TAttArray;

count: integer);

var i: integer;

begin

if count = 0 then exit;

sg.RowCount := count+1;

for I := 1 to count do

recordToRowGrid(ar[i], sg, i);

end;

      1. Процедура сортировки массива записей по группе и фамилии

Особенность сортировки массивов записей состоит в том, что может быть очень много вариантов сортировки. Возможны сортировки по значениям отдельных полей, а также по их комбинациям. Например, можно сортировать массив записей по количеству «хвостов», а при равенстве этого показателя по среднему баллу, кроме того, при равенстве среднего балла по фамилиям.

Алгоритм сортировки для каждого из возможных вариантов остается одним и тем же, меняется только правило сравнения записей.

В тех случаях, когда алгоритм сравнения записей сложный, его целесообразно представить в виде отдельной функции, которая будет возвращать результат логического типа.

Например, при необходимости сортировать массив записей по группе и фамилии, можно предварительно написать соответствующую функцию сравнения.

// Допоміжна функція для cортування за групою та прізвищем

function compareGrFio(r1, r2:TAttRec):boolean;

begin

if r1.Group <> r2.Group

then result:=r1.Group <= r2.Group

else result := r1.fio <= r2.fio;

end;

После этого можно написать процедуру сортировки массива записей, например, методом пузырька, которая будет отличаться от рассматриваемой ранее процедуры только тем, что для сравнения двух элементов массива вызывается написанная выше функция.

// Процедура сортування масиву записiв

// методом бульбашки за групою та прізвищем

procedure sortAttArrayGrFio (var ar:TAttArray;count:integer);

var i, j: integer; r: TAttRec; ok: boolean;

begin

i := count;

repeat

i:=i-1;

ok:=true;

for j:=1 to i do

// Сравниваем записи с помощью функции

if not compareGrFio(ar[j], ar[j+1]) then

begin

r:=ar[j];

ar[j]:=ar[j+1];

ar[j+1]:=r;

ok:=false;

end;

until ok;

end;

Наличие этой процедуры позволяет нам написать процедуру, которая будет вызываться при нажатии на кнопку «Упорядочить по группе и фамилии». Код процедуры приведен ниже.

// Сортування за групою та прізвищем

procedure TfrmRecord.btnSortGrFioClick(Sender: TObject);

var ar: TAttArray; count :integer;

begin

//Беремо масив із StringGrid1

getArrayFromGrid(ar, count, StringGrid1);

// Сортуємо масив за правилом, що задає функція compareGrFio

sortAttArrayGrFio (ar, count);

//Передаємо впорядкований масив у StringGrid2

showArrayInGrid(StringGrid2, ar, count);

end;