Показать сообщение отдельно
  #13  
Старый 19.06.2011, 11:19
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 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;

Данный вариант сортирует по числу совпадения имени, Учитывая очки. Но здесь нет сортировки по имени, в случае если очки равны...
Ответить с цитированием