// PascalABC.NET 3.2, сборка 1439 от 09.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.Row(0).Sum+a.Row(n-1).Sum; s+=a.Col(0).Skip(1).Take(n-2).Sum+a.Col(m-1).Skip(1).Take(n-2).Sum; Writeln('Сумма по периметру ',s) end.
Пример Количество строк в матрице: 4 Количество столбцов в матрице: 5 *** Исходная матрица [4,5] *** 87 -67 11 59 46 -13 86 -74 20 -98 -74 24 6 51 74 26 -93 36 40 66
// 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.
// Внимание! Если программа не работает, обновите версию!
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.Row(0).Sum+a.Row(n-1).Sum;
s+=a.Col(0).Skip(1).Take(n-2).Sum+a.Col(m-1).Skip(1).Take(n-2).Sum;
Writeln('Сумма по периметру ',s)
end.
Пример
Количество строк в матрице: 4
Количество столбцов в матрице: 5
*** Исходная матрица [4,5] ***
87 -67 11 59 46
-13 86 -74 20 -98
-74 24 6 51 74
26 -93 36 40 66
Сумма по периметру 100
// Внимание! Если программа не работает, обновите версию!
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.
Пример
Количество строк/столбцов в матрице: 5
*** Исходная матрица [5,5] ***
-31 -1 -29 -69 -19
-83 84 52 42 52
13 -24 -70 98 -33
60 -94 -84 19 -14
-55 81 -36 57 98
S=-165