Добавление индексов в двумерный массив

Тема в разделе "Pascal and Delphi", создана пользователем Apis, 15 янв 2011.

  1. Apis

    Apis Гость

    Есть случайным образом заполняющийся массив 7*7. Задача: поменять местами строку с минимальным количеством отрицательных элементов и строку с максимальным количеством ненулевых элементов. + Добавить индексы к строкам в исходном массиве и сделать так, чтобы в получившемся массиве индексы менялись вместе со строками.

    Код (Delphi):
     const
    ii=7;
    jj=7;
    var
    aaa:array [1..ii,1..jj] of integer;
    i,j,hlp,NZ,M,strNZ,strM,valNZ,valM:integer;
    arrNZ,arrM:array [1..ii] of integer;
    Lab: array [1..14] of TLabel;
    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    k: integer;
    begin

    randomize;
    k:=0;
    for i:=1 to ii do begin
    Lab[i]:=Tlabel.create (self);
    Lab[i].parent:=form1;
    Lab[i].left:=10+k;
    Lab[i].top:=5;
    Lab[i].Width:=250;
    Lab[i].Caption:= inttostr (i);
    k:=k+25;
    for j:=1 to jj do begin
    aaa[i,j]:=random(7)-3;
    StringGrid1.Cells [i-1,j-1]:=inttostr (aaa[i,j]);
    end;
    end;

    end;


    procedure TForm1.Button2Click(Sender: TObject);
    var
    k:integer;
    begin


    strNZ:=1;
    strM:=1;
    valNZ:=ii+1;
    valM:=0;
    k:=0;
    for i:=1 to ii do
    begin
    Lab[i]:=Tlabel.create (self);
    Lab[i].parent:=form1;
    Lab[i].left:=330+k;
    Lab[i].top:=5;
    Lab[i].Width:=250;
    Lab[i].Caption:= inttostr (i);
    k:=k+25;
    arrNZ[i]:=0;
    arrM[i]:=0;
    for j:=1 to jj do
    begin
    if (aaa[i,j]<>0) then
    arrNZ[i]:=arrNZ[i]+1;
    if (aaa[i,j]<0) then
    arrM[i]:=arrM[i]+1;
    end;
    if (arrNZ[i]<valNZ) then
    begin
    valNZ:=arrNZ[i];
    strNZ:=i;
    end;
    if (arrM[i]>valM) then
    begin
    valM:=arrM[i];
    strM:=i;
    end;
    for j:=1 to jj do
    begin
    hlp:=aaa[strNz, j];
    aaa[strNZ,j]:=aaa[strM, j];
    aaa[strM,j]:=hlp;
    end;

    end;
    for i:=1 to ii do
    begin
    for j:=1 to jj do
    StringGrid2.Cells [i-1, j-1]:= inttostr (aaa[i,j]);
    end;
    end;
    end.
    Местами меняются столбцы + могу только создать индексы, но не знаю, как их привязать к строке. Возможно, лучше использовать не Label? Помогите, пожалуйста
     
  2. Apis

    Apis Гость

    Есть еще такой код, он правильнее, но без индексов:

    Код (PHP):
     const
    ii=7;
    jj=7;
    var
    aaa:array [1..ii,1..jj] of integer;
    i,j,hlp,NZ,M,strNZ,strM,valNZ,valM:integer;
    arrNZ,arrM:array [1..ii] of integer;
    Lab: array [1..14] of TLabel;
    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    k, n: integer;
    begin

    randomize;
    k:=0;
    for i:=1 to ii do begin
    Lab[i]:=Tlabel.create (self);
    Lab[i].parent:=form1;
    Lab[i].left:=10+k;
    Lab[i].top:=5;
    Lab[i].Width:=250;
    Lab[i].Caption:= inttostr (i);
    k:=k+25;
    for j:=1 to jj do begin
    aaa[i,j]:=random(7)-3;
    StringGrid1.Cells [i-1,j-1]:=inttostr (aaa[i,j]);
    end;
    end;

    end;


    procedure TForm1.Button2Click(Sender: TObject);
    var
    k,l,n:integer;
    begin


    strNZ:=1;
    strM:=1;
    valNZ:=ii+1;
    valM:=0;
    k:=0;
    for i:=1 to ii do
    begin
    Lab[i]:=Tlabel.create (self);
    Lab[i].parent:=form1;
    Lab[i].left:=330+k;
    Lab[i].top:=5;
    Lab[i].Width:=250;
    Lab[i].Caption:= inttostr (i);
    k:=k+25;
    arrNZ[i]:=0;
    arrM[i]:=0;
    for j:=1 to jj do
    begin
    if (aaa[i,j]<>0) then
    arrNZ[i]:=arrNZ[i]+1;
    l:=i;
    if (aaa[i,j]<0) then
    arrM[i]:=arrM[i]+1;
    n:=i;
    end;
    if (arrNZ[i]<valNZ) then
    begin
    valNZ:=arrNZ[i];
    strNZ:=i;
    Lab[i].Caption:=inttostr (l);
    end;
    if (arrM[i]>valM) then
    begin
    valM:=arrM[i];
    strM:=i;
    Lab[i].Caption:=inttostr (n);
    end;
    for j:=1 to jj do
    begin
    hlp:=aaa[strNz, j];
    aaa[strNZ,j]:=aaa[strM, j];
    aaa[strM,j]:=hlp;
    end;

    end;
    for i:=1 to ii do
    begin
    for j:=1 to jj do
    StringGrid2.Cells [i-1, j-1]:= inttostr (aaa[i,j]);
    end;
    end;
    end.
     
Загрузка...

Поделиться этой страницей