Вводятся две вещественные прямоугольные матрицы размером M*N и K*L (M,N,K,L amp;lt;=20).

Вводятся две вещественные прямоугольные матрицы размером M*N и K*L (M,N,K,L lt;=20). Для той матрицы, у которой сумма частей, лежащих до первого отрицательного элемента, больше (отыскивать по строчкам), составить одномерный массив из средних арифметических значений частей нечетных столбцов матрицы и отсортировать его в порядке возрастания частей. Вывести на печать саму матрицу, найденную сумму частей и отсортированный одномерный массив. Алгоритм сопровождать соотв. известьями. Использовать не менее 3 подпрограмм. PascalABC.NET

Задать свой вопрос
2 ответа
// PascalABC.NET 3.3 
 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-gt;xgt;=0).Sum;
  writeln('s1 = ',s1);
  var s2:=b.ElementsByRow.TakeWhile(x-gt;xgt;=0).Sum;
  writeln('s2 = ',s2);
  if s1gt;s2
   then begin
    c:=ArrFill(a.GetLength(1) div 2,0.0);
    foreach var j in SeqWhile(1,x-gt;x+2,x-gt;xlt;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-gt;x+2,x-gt;xlt;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
Милана
Эта часть осталась не выполненной. Превосходно бы и получение нового массива сделать иным способом, но, видимо, не в этот раз.
// 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-gt;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-gt;tgt;=0).Sum;
// сумма частей по строкам до первого отрицательного

function GetArray(a:array[,] of real):array of real;
// строит разыскиваемый одномерный массив
begin
  var b:=new Listlt;realgt;;
  var i:=1;
  while ilt;=a.ColCount-1 do begin
    b.Add(a.Col(i).Average);
    i+=2;
    end;
  b.Sort;
  Result:=b.ToArray
end;

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(sagt;sb?a:b); // матрица с большей частичной суммой
  Write('Построенный массив: '); c.Println
end.

Пример
Число строк и столбцов в матрице 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
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт