Поменять местами столбец матрицы с номером N и первый из столбцов, содержащих только отрицательные элементы

omega_rekrut

// Дана матрица размера M x N. // Поменять местами // столбец с номером N // и первый из столбцов, // содержащих только отрицательные элементы. // Если требуемых столбцов нет, // то вывести матрицу без изменений.
procedure TForm1.Button1Click(Sender: TObject);
var
j,i,m,n,num:integer;
a: array [0..10,0..10] of real;
temp:real;
bol:boolean;
begin
m:=6;
n:=6;
for i:=0 to n do
for j:=0 to m do
begin
  a[i,j]:=random(25)-50;
end;
for i:=n-1 downto 1 do
begin
bol:=true;
for j:=0 to m do
begin
if a[i,j]>0 then bol:=false;
end;
if bol and (num = 0) then Num:=i;
end;
for j:=0 to m do
begin
temp:=a[j,Num];
a[j,Num]:=a[j,n];
a[j,n]:=temp;
end;
for i:=0 to n do
for j:=0 to m do
begin
stringgrid2.Cells[i,j]:=floattostr(a[i,j]);
end;
end;
на программу все время надо делать break. не могу понять в чём дело. Заранее благодарю.
1 ответ

omega_rekrut

procedure TForm1.Button1Click(Sender: TObject);
var j,i,m,n,num:integer;
    a: array of array of real;
    temp:real;
    bol:boolean;
begin
m:=6;
n:=6;
for i:=0 to n-1 do
for j:=0 to m-1 do
a[i,j]:=-50+random*(25);
for i:=0 to n-1 do
for j:=0 to m-1 do
stringgrid.Cells[i,j]:=floattostrF(a[j,i],ffFixed,6,2);
num:=-1;
j:=0;
while (j<m)and(j1=-1) do
 begin
  bol:=true;
  i:=0;
  while i<n do
  if a[i,j]>0 then bol:=false;
  if bol then Num:=j
  else inc(i);
  if num=-1 then inc(j)
 end;
for i:=0 to n-1 do
 begin
  temp:=a[i,Num];
  a[i,Num]:=a[i,n-1];
  a[i,n-1]:=temp;
 end;
for i:=0 to n-1 do
for j:=0 to m-1 do
stringgrid2.Cells[i,j]:=floattostrF(a[j,i],ffFixed,6,2);
end;