|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
|  | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  сортировка таблицы Привет! Подскажите, как сделать сортировку таблицы. Я вот написал, но что-то не работает. procedure TForm2.Button9Click(Sender: TObject); Var k,a,b,c,d,e,v,x,k1,a1,b1,c1,d1,e1,v1,x1,k2,a2,b2,c 2,d2,e2,v2,x2:string; begin with StringGrid1 do begin if Cells[7,1]<Cells[7,2] then begin k:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k; a:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a; b:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b; c:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c; d:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d; e:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e; v:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v; x:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x; end; if Cells[7,2]<Cells[7,3] then begin k1:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k1; a1:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a1; b1:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b1; c1:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c1; d1:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d1; e1:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e1; v1:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v1; x1:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x1; if Cells[7,1]<Cells[7,3] then begin k2:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k2; a2:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a2; b2:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b2; c2:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c2; d2:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d2; e2:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e2; v2:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v2; x2:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x2; end; end; end; end; | 
| 
			 
			#2  
			
			
			
			
		 | |||
| 
 | |||
|   Ну чего, никто не знает что ли??? | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Я не понял вопрос. Алгоритмов сортировки в Интернете тьма. Давай уточним, как именно ты хочешь сортировать? 1) Отсортировать записи по одному из полей; 2) Отсортировать колонки по имени; 4) Отсортировать все ячейки по вертикали; 5) Отсортировать все ячейки по горизонтали; 6) Отсортировать все ячейки по диагонали (своеобразная комбинация 4 и 5). Зачем это нужно в твоем случае? | 
| 
			 
			#4  
			
			
			
			
		 | |||
| 
 | |||
|   Смотри. Если StringCells[6,1]<StringCells[6,2],  то мне нужно поменять их местами, а также строки, в которых находятся StringCells[6,1] и    StringCells[6,2] соответственно. Потом их надо сравнить с StringCells[6,3].  Надеюсь понял. | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   Вот набросал. Принимает: StringGrid - грид типа TStringGrid с данными; RowIndx - номер строки, по которой выполнять сортировку; StartCol - номер столбца, с которого начинается сортировка; StopCol - номер столбца, на котором окончить сортировку; Необходимо добавить проверки принимаемых значений и подумать о перестановке столбцов разом возможно через TStrings. Код: procedure Sort(var StringGrid: TStringGrid; RowIndx: Integer;
  StartCol, StopCol: Integer);
var
  Interval: Integer;
  i, j: Integer;
  Moved: Boolean; // пpизнак пеpестановки
  Str: AnsiString;
begin
  if StartCol > StopCol then
    Exit;
  // начальное значение интеpвала
  Interval := (StopCol - StartCol) div 2;
  // цикл с yменьшением интеpвала до 1
  while Interval > 0 do
  begin
    // пyзыpьковая соpтиpовка с интеpвалом
    // цикл, пока есть пеpестановки
    Moved := True;
    while Moved do
    begin
      Moved := False;
      for i := StartCol to StopCol - (1 + Interval) do
      begin
        if AnsiCompareText(StringGrid.Cells[i, RowIndx],
          StringGrid.Cells[i+Interval, RowIndx]) > 0 then
        begin
          // пеpестановка
          for j := 0 to StringGrid.RowCount - 1 do
          begin
            Str := StringGrid.Cells[i, j];
            StringGrid.Cells[i, j] := StringGrid.Cells[i+Interval, j];
            StringGrid.Cells[i+Interval, j] := Str;
          end;
          // пpизнак пеpестановки
          Moved := True;
        end;
      end;
    end;
    // yменьшение интеpвала
    Interval := Interval div 2;
  end;
end; | 
| 
			 
			#6  
			
			
			
			
		 | |||
| 
 | |||
|   Спасибо! Но, если честно, то я мало чего понял!? |