
19.06.2011, 11:19
|
Прохожий
|
|
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
|
|
Вот что смог написать за ночь. Код получился довольно громоздким (т.к. я пользовался только циклами и условиями, ибо не знаю чего получше)
Код:
procedure TForm1.Button2Click(Sender: TObject);
var i,j,m,n,t,h,q,r,Tmp:integer; Tmps,s:string; k:array of integer; a:array of string;
begin
h:=1;
SetLength(k,StringGrid1.RowCount);
SetLength(a,StringGrid1.RowCount);
With StringGrid1 do
begin
for n:=1 to RowCount-1 do
begin
q:=0; //не было совпадения с предыдущими строками
for t:=1 to n-1 do
begin
if cells[3,n]=cells[3,t] then
q:=1; // было
end;
if n=1 then
begin
k[i]:=0;
k[1]:=strtoint(cells[4,1]);
for i:=1 to RowCount-1 do
begin
if Cells[3,i]=Cells[3,1] then
begin
k[1]:=k[1]+k[i+1];
a[1]:=cells[3,1];
end;
end;
end;
if n>1 then
begin
if q=0 then
begin
h:=h+1;
k[h]:=1;
a[h]:=Cells[3,n];
for j:=n+1 to RowCount-1 do
if Cells[3,n]=Cells[3,j] then
begin
k[h]:=k[h]+1;
end;
end;
end;
end;
StringGrid2.RowCount:=h+1;
With StringGrid2 do
begin
for m:=1 to h-1 do
for r:=m+1 to h do
begin
if k[m]<k[r] then
begin
Tmp:=k[m];
k[m]:=k[r];
k[r]:=Tmp;
Tmps:=a[m];
a[m]:=a[r];
a[r]:=Tmps;
end;
end;
for m:=1 to h do
begin
Cells[0,m]:=inttostr(m);
Cells[2,m]:=inttostr(k[m]);
Cells[1,m]:=a[m];
end;
end;
end;
end;
Данный вариант сортирует по числу совпадения имени, Учитывая очки. Но здесь нет сортировки по имени, в случае если очки равны...
|