Многомерные массивы
Программа обработки исходной таблицы (листинг 5.12) запускается щелчком мыши на командной кнопке Итоги (Button1).
Листинг 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 приведено диалоговое окно программы после завершения процесса обработки массива.
Рис. 5.21. Окно программы Итоги олимпиады