Меняем строки в TStringGrid Часть 2

3 минуты на чтение

Здравствуйте всем, какой сегодня — 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;

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

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Итак, в этой статье хотел бы поговорить как поменять строки местами в TStringGrid. Задача очень простая, но может кому-то для «лабораторок» пригодится, так многим эта задача не будет совсем тяжелой. Давайте посмотрим так, TStringGrid - этот та же самая матрица...
Многие используют в своих проектах TStringGrid и хотят сохранять данные из него в файл и загружать данные из файла, что логично, так как просто сохранения думаю не сильно имело бы смысла. Так вот предлагаю следующие варианты сохранения данных компонента TStrin...
В первой части статье по сохранение информации из TStringGrid в файл и считывание из файла в TStringGrid мы узнали как можно в типизированные фалах хранить информацию. Теперь давайте посмотрим как можно сохранить информацию в текстовый файл и считать из него д...