• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы Apis
  • Дата начала
A

Apis

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

Код:
 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? Помогите, пожалуйста
 
A

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.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!