Предмет: Информатика, автор: Rimrat

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

Приложения:

Ответы

Автор ответа: Аноним
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.

Автор ответа: Аноним
0
Т.е. лямбды и оператор цикла соотносятся примерно так, как язык программирования высокого уровня и ассемблер.
Автор ответа: Аноним
0
Или, совсем коротко, использование циклов с лямбдами - это архаизм.
Автор ответа: Аноним
0
Есть и расплата за это: в целом программа с циклами, перемешанными с лямбдами, как ни странно, но будет не только выглядеть длиннее, но работать медленнее, чем без циклов.
Автор ответа: Аноним
0
И еще: должны же мы "вставить Питону", и написать программу короче, чем на нем! Кстати, там операторов цикла формально нет )))
Автор ответа: Аноним
0
В смысле, операторов цикла со счетчиком, там их через диапазоны моделируют.
Похожие вопросы