<em>// PascalABC.NET 3.2, сборка 1449 от 23.05.2017</em> <em>// Внимание! Если программа не работает, обновите версию!</em>
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.
<em>Если не устраивают лямбда-выражения, а нужна именно функция, можно написать так:</em>
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.
Program n1; const n=100; var a: array [1..n] of integer; i,k,sum,temp: integer; begin sum:=0; k:=0; for i:=1 to n do begin write('введите ',i,' элемент: '); readln(temp); if temp=0 then break; if temp mod 8=0 then begin a[i]:=temp; k:=k+1; sum:=sum+a[i]; end; end; writeln('ср. ариф: ',sum/k); end.