Использовать подпрограммы (ввода, вывода, обрабатывающей части). даны 3 массива целых чисел: (4*5), (5*5), (5*4). вставить после каждого столбца, содержащего хотя бы один нулевой элемент, столбец из единиц.
// PascalABC.NET 3.3, сборка 1559 от 01.11.2017 // Внимание! Если программа не работает, обновите версию!
function MasInput(s:string; m,n:integer):array[,] of integer; begin Writeln('Введите построчно элементы массива ',s,'[',m,',',n,']'); Result:=ReadMatrInteger(m,n) end;
procedure MasPrint(s:string; a:array[,] of integer; k:integer:=5); begin Writeln('*** Полученный массив ',s,' ***'); a.Println(5); Writeln(5*a.ColCount*'=') end;
procedure MasTransform(var a:array[,] of integer); begin var s:=a.Cols.Select(col->col.Any(t->t=0)); var k:=s.Where(t->t).Count; if k>0 then begin var ns:=a.ColCount-1; // номер передающей колонки var s1:=s.Numerate.Where(t->t[1]).Select(t->t[0]-1); var St:=new Stack<integer>; foreach var t in s1 do St.Push(t); SetLength(a,a.RowCount,a.ColCount+k); var nt:=a.ColCount-1; // номер принимающей колонки for var i:=ns downto 0 do if St.Count>0 then if St.Peek=i then begin a.SetCol(nt,ArrFill(a.RowCount,1)); a.SetCol(nt-1,a.Col(i)); nt-=2; St.Pop end else begin a.SetCol(nt,a.Col(i)); nt-=1 end end; end;
begin var a:=MasInput('A',4,5); MasTransform(a); MasPrint('A',a); var b:=MasInput('B',5,5); MasTransform(b); MasPrint('B',b); var c:=MasInput('C',5,4); MasTransform(c); MasPrint('C',c) end.