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

Ответы 4

  • Все прекрасно, только вот как быть с "Использовать не менее 3 подпрограмм" ?
    • Автор:

      johan
    • 6 лет назад
    • 0
  • Эта часть осталась не выполненной. Хорошо бы и получение нового массива сделать другим способом, но, видимо, не в этот раз.
  • // 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->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 = 3n = 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.122 матрица:k = 2l = 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.91s1 = 6.88926995447337s2 = 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->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
    • Автор:

      dillan
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years