procedure TForm1.Button1Click(Sender: TObject);
var
c,r:integer; // номер колонки и строки таблицы
s:integer; // всего медалей у команды
p:integer; // очков у команды
m:integer; // номер строки с максимальным количеством очков
buf:array[0..5] of string; // буфер для обмена строк
i:integer;// номер строки используется во время сортировки
begin
for r:=1 to tabl.rowcount do // обработать все строки
begin
s:=0;
// вычисляем общее кол-во медалей
for c:=1 to 3 do
if tabl.cells[c,r] <> ''
then s:=s+StrToInt(tabl.cells[c,r])
else tabl.cells[c,r]:='0';
// вычисляем количество очков
p:=7*StrToInt(tabl.cells[1,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:=1 to tabl.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 // обменяем r-ую и m-ую строки таблицы
for c:=0 to 5 do
begin
buf[c]:=tabl.Cells[c,r];
tabl.Cells[c,r]:=tabl.Cells[c,m];
tabl.Cells[c,m]:=buf[c];
end;
end;
end;
end;
Таблица состоит из 6 столбцов в 1 наименование стран в 2,3,4 медали золото серебро и бронза в 5 количество медалей, 6 баллы. Как сделать что бы программа выбирала 3 призовых места?
29 ноября 2008 в 19:00
Е-мое, не подумал, что контакт подрезает пробелы в начале строки… Извиняюсь за наезд.
29 ноября 2008 в 15:03
и что тебе не нравится в данном формате?
29 ноября 2008 в 15:02
Отсортировать по убыванию баллов и выбрать три первые строки. Сортировать лучше процедурой qsort. А вообще советую научиться нормально форматировать код.