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.