Найти с помощью лямбда функцию сумму элемента матрицы .

0 голосов
50 просмотров

Найти с помощью лямбда функцию сумму элемента матрицы .


image

Информатика (38 баллов) | 50 просмотров
0

на каком языке?

0

Паскаль

0

Это вопрос или утверждение? Мне без разницы.

0

Да.

0

Второе.

Дан 1 ответ
0 голосов
Правильный ответ
// PascalABC.NET 3.2, сборка 1449 от 23.05.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=ReadInteger('Количество строк/столбцов в матрице:');
  Writeln('*** Исходная матрица [',n,',',n,'] ***');
  var a:=MatrRandom(n,n,-99,99);
  a.Println(4); Writeln(4*a.ColCount*'-');
  Writeln('S=',a.ElementsWithIndexes
    .Where(y->(y[0]>=a.RowCount div 2) and (y[1]>=a.ColCount div 2))
    .Select(y->y[2]).Sum)
end.

Пример
Количество строк/столбцов в матрице: 8
*** Исходная матрица [8,8] ***
 -73 -79  -1  19 -58  79 -18 -81
 -71  78  27  59  -6   4 -95  36
 -95 -47 -94 -86  66 -37   6  12
 -96 -42 -43 -78  34 -53  29  91
 -65   2  59   3 -26 -16 -63  22
  -4 -18  97  65 -70  78  78   9
 -36 -64   8 -69 -34  74 -17  63
  15  87  15  84  22 -39 -16  82
--------------------------------
S=147

Если не устраивают лямбда-выражения, а нужна именно функция, можно написать так:

type
  Mat=array[,] of integer;
 
begin
  var n:=ReadInteger('Количество строк/столбцов в матрице:');
  Writeln('*** Исходная матрица [',n,',',n,'] ***');
  var a:Mat:=MatrRandom(n,n,-99,99);
  a.Println(4); Writeln(4*a.ColCount*'-');
  var PartSum:Mat->integer;
  PartSum:=x->x.ElementsWithIndexes
    .Where(y->(y[0]>=x.RowCount div 2) and (y[1]>=x.ColCount div 2))
    .Select(y->y[2]).Sum;
  Writeln('S=',PartSum(a))
end.

(150k баллов)
0

Неверно написал

0

Where(y->not(a.RowCount<= n/2) and not(a.ColCount<=n/2)

0

Тоже вычленяет 4 часть

0

Только не знаю как сумму написать