// PascalABC.NET 3.3, сборка 1590 от 03.12.2017// Внимание! Если программа не работает, обновите версию!function NewMatrix(c:string):array[,] of real;// формирует случайную матрицу указанного размераbegin var (m,n):=ReadInteger2('Число строк и столбцов в матрице '+c+':'); Result:=MatrRandomReal(m,n,-99,999); Result.Transform(t->Round(t)/10)end;procedure ShowMatrix(c:string;a:array[,] of real);// выводит матрицу на мониторbegin Writeln('*** Матрица ',c,' ***'); a.Println(6,1); Writeln(6*a.ColCount*'=');end;function PartSum(a:array[,] of real):=a.ElementsByRow.TakeWhile(t->t>=0).Sum;// сумма элементов по строкам до первого отрицательногоfunction GetArray(a:array[,] of real):array of real;// строит искомый одномерный массивbegin var b:=new List<real>; var i:=1; while i<=a.ColCount-1 do begin b.Add(a.Col(i).Average); i+=2; end; b.Sort; Result:=b.ToArrayend;begin var a:=NewMatrix('A'); var b:=NewMatrix('B'); ShowMatrix('A',a); var sa:=PartSum(a); Writeln('Частичная сумма равна ',sa); ShowMatrix('B',b); var sb:=PartSum(b); Writeln('Частичная сумма равна ',sb); var c:=GetArray(sa>sb?a:b); // матрица с большей частичной суммой Write('Построенный массив: '); c.Printlnend.
ПримерЧисло строк и столбцов в матрице A: 4 7Число строк и столбцов в матрице B: 5 6*** Матрица A *** 5.5 68.9 30.6 15.6 8.6 58.7 31.1 51.2 11.1 84.2 4.0 68.0 -4.8 32.7 28.8 65.3 6.2 33.3 94.5 81.5 34.9 -6.1 81.0 -8.0 77.7 -2.8 -6.4 81.7==========================================Частичная сумма равна 437.5*** Матрица B *** 66.3 34.9 52.2 -8.7 57.9 1.9 81.7 -2.4 80.1 3.8 22.3 64.2 -5.8 94.4 22.7 5.3 80.4 46.6 77.1 41.4 7.9 18.6 8.3 32.7 29.8 2.3 82.6 1.7 87.8 28.6====================================Частичная сумма равна 153.4Построенный массив: 32.25 32.65 56.575