// 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.