Сортировка матрицы в Delphi

В этом совете рассмотрено решение задачи сортировки матрицы в Delphi.


Дата: 17.01.2011 г.

Рейтинг: 0

Метки: матрица, сортировка, delphi

Условие:
Дана действительная квадратная матрица порядка N. С помощью допустимых преобразований добиться, чтобы один из элементов матрицы, обладающий наибольшим по модулю значением, располагался в левом верхнем углу матрицы.

Общий вид кода:unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XPMan, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    sg_isx: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    XPManifest1: TXPManifest;
    sg_sort: TStringGrid;
    Button2: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    sg_tmp: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
  i,j:Integer;
begin
  for i :=  0 to 14 do
     for j :=  0 to 14 do
      begin
        sg_isx.Cells[i,j] := IntToStr(Random(100) - 50);
        sg_sort.Cells[i,j] := sg_isx.Cells[i,j];
      end;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
  i,j,k,g:Integer; //пер. для циклов
  zn,xzn,yzn:Integer; // пер. для хранения инфо о наибольшем элементе
begin
  zn := 0;
  //Блок программы определяющий наибольший элемент в матрице
  for i := 0 to 14 do
    for j := 0 to 14 do
      if abs(zn) < abs(StrToInt(sg_sort.Cells[i,j] )) then
        begin
          zn := StrToInt(sg_sort.Cells[i,j]);
          xzn := i;
          yzn := j;
        end;
  Label5.Caption := 'Max abs(' + IntToStr(zn) + ') ['  + IntToStr(xzn) + ','
  + IntToStr(yzn) + ']';
  //Блок программы сортирующий матрицу
    //Сортировка по столбцам
    for i := 0 to xzn - 1 do
      begin
        k := xzn - i; //реализация обратного отсчета
        for j := 0 to 14 do //сохраняем перемещаемый столбец
          sg_tmp.Cells[0,j] := sg_sort.Cells[k,j];
        for j := 0 to 14 do //копируем данные из соседнего столбца
          sg_sort.Cells[k,j] := sg_sort.Cells[k - 1,j];
        for j := 0 to 14 do //вставка столбца из резервной копии
          sg_sort.Cells[k - 1,j] := sg_tmp.Cells[0,j];
      end;
    //Сортировка по строкам
    for i := 0 to yzn - 1 do
      begin
        g := yzn - i; //реализация обратного отсчета
        for j := 0 to 14 do //сохраняем перемещаемую строку
          sg_tmp.Cells[0,j] := sg_sort.Cells[j, g];
        for j := 0 to 14 do //копируем данные из соседней строки
          sg_sort.Cells[j,g] := sg_sort.Cells[j, g - 1];
        for j := 0 to 14 do //вставка строки из резервнвной копии
          sg_sort.Cells[j, g - 1] := sg_tmp.Cells[0,j];
      end;
end;

end.

Внешний вид: Сортировка матрицы в Delphi

Комментариев достаточно, что бы понять алгоритм.

Пока все, удачных проб. Сургай Владмир.




Похожие статьи: