// PascalABC.NET 3.2, сборка 1437 от 03.05.2017 // Внимание! Если программа не работает, обновите версию!
function GetDiagNeganives(a:array[,] of integer):sequence of integer; begin for var i:=0 to a.RowCount-1 do if a[i,i]<0 then yield(i) end;
function GetSumm(a:array[,] of integer; t:sequence of integer):integer; begin Result:=0; foreach var e in t do Result+=a.Row(e).Sum end;
procedure MatrixWrite(a:array[,] of integer); begin var n:=a.RowCount; Writeln('*** Исходная матрица [',n,',',n,'] ***'); a.Println(4); Writeln(4*a.ColCount*'-') end;
begin var n:=ReadInteger('Количество строк/столбцов в матрице:'); var a:=MatrRandom(n,n,-99,99); MatrixWrite(a); var s:=GetDiagNeganives(a); Writeln('S=',GetSumm(a,s)) end.
// PascalABC.NET 3.2, сборка 1437 от 03.05.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк в массиве:'); var m:=ReadInteger('Количество колонок в массиве:'); Writeln('*** Исходный массив [',n,',',m,'] ***'); var a:=MatrRandom(n,m,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); var s:=a.ElementsWithIndexes.Where(x->x[2]<0); Writeln(s.Count,' отрицательных элементов с суммой ',s.Select(x->x[2]).Sum); Writeln('*** Результирующий массив ***'); foreach var ijV in s do a[ijV[0],ijV[1]]:=0; a.Println(4) end.
Пример Количество строк в массиве: 4 Количество колонок в массиве: 7 *** Исходный массив [4,7] *** 97 -4 -24 49 1 86 -15 -84 -17 -56 -76 -26 -77 49 -8 48 -29 60 20 82 90 -28 -4 -69 32 -63 -35 -72