Основы языка Delphi

         

Обработка двумерного массива



Листинг 5.12. Обработка двумерного массива

procedure TForml.ButtonlClick(Sender: TObject);

var

c,r:integer; // номер колонки и строки таблицы

s:integer; // всего медалей у команды

р:integer; // очков у команды

m:integer; // номер строки с максимальным количеством очков

buf:array[0..5] of string; // буфер для обмена строк


i:integer; // номер строки. Используется во время сортировки

begin

for r:=l to tab1.rowcount do // обработать все строки

begin s:=0;

// вычисляем общее кол-во медалей

for c:=l to 3 do

if tabl.cells[c,r] <>
''

then s:=s+StrToInt(tab1.cells[c,r])

else tabl.cells[c,r]:='0'; // вычисляем количество очков

p:=7*StrToInt(tab1.cells[l,r])+

6*StrToInt(tabl.cells[2, r] )

+ 5*StrToInt(tabl.cells[3,r]};

// вывод результата

tabl.cells[4,r]:=IntToStr(s);
// всего медалей

tabl.cells[5,r]:=IntToStr(p);
// очков

end;

// сортировка таблицы по убыванию в соответствии

// с количеством баллов (по содержимому 5-го столбца)

// сортировка методом выбора

for r:=l to tab1.rowcount-1 do

begin

m:=r; // максимальный элемент — в r-й строке

for i:=r to tabl.rowcount-1 do

if StrToInt(tabl.cells[5,i])>
StrToInt(tabl.cells[5,m])

then m:=i;

if r <>
m then

begin // обменяем г-ю и m-ю строки таблицы

for c:=0 to 5 do begin

buf[с]:=tab1.Cells[c,r];

tab1.Cells[c,r]:=tabl.Cells[c,m];

tab1.Cells[c,m]:=buf[c];

end;

end;

end;

end;

Сначала для каждой страны программа вычисляет общее количество медалей и соответствующее количество очков. Затем, используя метод простого выбора, программа выполняет сортировку таблицы по убыванию количества набранных очков. Во время сортировки для обмена строк таблицы используется строковый массив buf, индекс которого, как и индекс столбца таблицы, меняется от нуля до пяти (см. инструкцию объявления массива в тексте программы). Такой прием позволяет наиболее просто выполнить копирование замещаемой строки в буфер и замещение строки содержимым буфера.

На Рисунок 5.21 приведено диалоговое окно программы после завершения процесса обработки массива.



Содержание раздела