Дан двумерный массив. Вставьте второй столбец перед всеми столбцами, в которых нет отрицательных элементов — Pascal(Паскаль)

uses crt;
const nmax=50;
var a:array[1..nmax,1..nmax] of integer;
    s2:array[1..nmax] of integer;
    m,n,i,j,l,t,kp:byte;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax div 2,' m=');
readln(m);
until m in [1..nmax div 2];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
   for j:=1 to m do
    begin
     a[i,j]:=random(20)-2;
     write(a[i,j]:4);
    end;
   writeln;
 end;
writeln;
writeln('Вставка второго столбца:');
for i:=1 to n do
s2[i]:=a[i,2];{запоминаем 2 столбец}
j:=m;{встаем в последний столбец}
while j>=1 do {идем к началу}
 begin
  kp:=0;
  for i:=1 to n do{идем по  столбцу}
  if a[i,j]>=0 then kp:=kp+1;{считает неотрицательные}
  if kp=n then{если все}
   begin
    for l:=1 to n do{все элементы столбцов}
     begin
      for t:=m+1 downto j do{от последнего до данного сдвигаем вправо}
      a[l,t]:=a[l,t-1];
      a[l,j]:=s2[l];{на это место пишем второй столбец}
     end;
    m:=m+1;{увеличиваем количество столбцов}
    j:=j-1;{смотрим следующий}
   end
  else j:=j-1;{если есть отрицательные, то к следующему}
 end;
for i:=1 to n do
 begin
  for j:=1 to m do
  write(a[i,j]:4);
  writeln;
 end;
readln
end.

Leave a Comment

12 − 5 =