Здравствуйте всем, какой сегодня — 1 августа и вот с утра как и обещал урок по замене строк в TStringGrid местами, в строке, в которой максимальный элемент матрицы и строкой, в которой минимальный элемент матрицы. В общем Вам тут пригодится наш первый урок по замене строк, так как я там все подробно описал как поменять строки местами, здесь все тоже самое, только нам в начале необходимо найти минимальный и максимальный элементы матрицы, запомнить номера их строк, то есть строк, в которых они находятся, затем в новый массив записать строку с максимальным элементом или строку с минимальным элементом и произвести замену по алгоритму, что я описывал в первой части. Как находится минимальный и максимальный элементы — очень просто, обычным сравнением, задаем им начальные сперва значения, а потом каждое значение матрицы сравниванием с максимумом и минимумом.

На форме у меня

  • TStringGrid
  • TButton

Не забываем в свойстве TStringGrid - Options-goEditing - установить в True. А в FixedCols и FixedRows я установил в 0. Далее на кнопку, на событие OnClick я написал следующий код

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i,j,max,min,min_index,max_index,k:integer;
 a:array[1..100] of integer;
begin
   try
    k:=1;
    max_index:=0;
    min_index:=0;
    max:=StrToInt(StringGrid1.Cells[0,0]);
    min:=StrToInt(StringGrid1.Cells[0,0]);
    for i:=0 to StringGrid1.RowCount-1 do
     begin
      for j:=0 to StringGrid1.ColCount-1 do
       begin
        if StrToInt(StringGrid1.Cells[j,i])>max then
         begin
          max:=StrToInt(StringGrid1.Cells[j,i]);
          max_index:=i;
         end;
        if StrToInt(StringGrid1.Cells[j,i])<min then
         begin
          min:=StrToInt(StringGrid1.Cells[j,i]);
          min_index:=i;
         end;
       end;
     end;
    if min_index=max_index then
     begin
     ShowMessage('Error, Sorry');
      exit;
     end;
    for i:=0 to StringGrid1.ColCount-1 do
     begin
      a[k]:=StrToInt(StringGrid1.Cells[i,max_index]);
      inc(k);
     end;
    for i:=0 to StringGrid1.ColCount-1 do
     begin
      StringGrid1.Cells[i,max_index]:=StringGrid1.Cells[i,min_index];
      StringGrid1.Cells[i,min_index]:=IntToStr(a[i+1]);
     end;
   except
    on e:Exception do
   end;
end;

Все мы это проходили с Вами уже, так, что тут уже ничего сложного нету. В качестве задания на дом, можете сделать тоже самое только со столбцами.

Хочу заметить, что для готовки ужина, завтрака и так далее необходимо время, а если Вы приходите домой уставший, то и вовсе нет никакого желания готовить. Можно пойти в ресторан, а лучше всего заказать макдональдс доставка, которая в тот же момент Вам организует вкусный ужин за короткий промежуток времени, а самое главное Вам не надо выходить из дома, тем самым Вы экономите свое драгоценное время.

Исходники статьи качаем тут

Автор статьи - Andrey53

Метки: ,




К записи “Меняем строки в TStringGrid Часть 2” оставлено комментариев: 1.

  1. Александр:

    подскажите сортировку по значениям в столбце

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*