Вводятся две вещественные прямоугольные матрицы размером m*n и k*l (m,n,k,l < =20). для той матрицы, у которой сумма элементов, лежащих до первого отрицательного элемента, больше (искать по строкам), составить одномерный массив из средних арифметических значений элементов нечетных столбцов матрицы и отсортировать его в порядке возрастания элементов. вывести на печать саму матрицу, найденную сумму элементов и отсортированный одномерный массив. алгоритм сопровождать соотв. сообщениями. использовать не менее 3 подпрограмм. pascalabc.net
var c:array of real;
begin
Writeln('1 матрица:');
var m:=ReadInteger('m =');
var n:=ReadInteger('n =');
// var a:=ReadMatrReal(m,n);
var a:=MatrRandomReal(m,n,-3,7).Println(6);
Writeln('2 матрица:');
var k:=ReadInteger('k =');
var l:=ReadInteger('l =');
// var b:=ReadMatrReal(k,l);
var b:=MatrRandomReal(k,l,-3,7).Println(6);
var s1:=a.ElementsByRow.TakeWhile(x->x>=0).Sum;
writeln('s1 = ',s1);
var s2:=b.ElementsByRow.TakeWhile(x->x>=0).Sum;
writeln('s2 = ',s2);
if s1>s2
then begin
c:=ArrFill(a.GetLength(1) div 2,0.0);
foreach var j in SeqWhile(1,x->x+2,x->x<a.GetLength(1)) do
c[(j-1) div 2]:=a.Col(j).Average;
end
else begin
c:=ArrFill(b.GetLength(1) div 2,0.0);
foreach var j in SeqWhile(1,x->x+2,x->x<b.GetLength(1)) do
c[(j-1) div 2]:=b.Col(j).Average;
end;
writeln('Полученный массив:'); c.Println;
Sort(c);
writeln('Отсортированный массив:'); c.Print;
end.
Пример:
1 матрица:
m = 3
n = 6
0.38 4.94 1.57 -2.49 6.67 2.50
2.97 -1.44 -1.44 0.42 4.04 -2.54
5.18 0.32 -1.90 -0.09 3.79 0.12
2 матрица:
k = 2
l = 7
4.92 2.57 3.57 3.05 2.62 5.29 6.17
6.62 2.17 5.80 1.31 2.55 -2.75 4.91
s1 = 6.88926995447337
s2 = 46.640484614596
Полученный массив:
2.37028874986353 2.18293672249789 1.26664565655712
Отсортированный массив:
1.26664565655712 2.18293672249789 2.37028874986353