// PascalABC.NET 3.2, сборка 1379 от 21.01.2017 // Внимание! Если программа не работает, обновите версию!
begin var m:=ReadInteger('Количество строк в массиве:'); var n:=ReadInteger('Количество столбцов в массиве:'); Writeln('*** Исходный массив [',m,',',n,'] ***'); var a:=MatrRandom(m,n,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); var k:=ReadInteger('Номер столбца для подсчета суммы:'); Writeln('S=',a.Col(k-1).Sum) end.
На случай, если я неверно понял задание и нужна сумма по КАЖДОЙ колонке:
begin var m:=ReadInteger('Количество строк в массиве:'); var n:=ReadInteger('Количество столбцов в массиве:'); Writeln('*** Исходный массив [',m,',',n,'] ***'); var a:=MatrRandom(m,n,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); a.Cols.Select(s->s.Sum).Println end.
Пример Количество строк в массиве: 4 Количество столбцов в массиве: 7 *** Исходный массив [4,7] *** 13 -14 82 88 -38 55 89 11 74 -35 85 13 27 -80 -88 76 -64 -88 -50 28 -13 90 87 -71 -94 -59 95 -83
// PascalABC.NET 3.1, сборка 1219 от 16.04.2016 begin var a:=ReadLines('m17.txt').JoinIntoString.ToIntegers; a.Println; var b:=a.Select((x,i)->Rec(x,i)).Where(x->x.Item1<0) .Select(x->x.Item2).ToArray; if b.Count<>2 then Writeln('Количество отрицательных элементов не равно двум') else begin a:=SeqFill(b[0],0).Concat(a.Skip(b[0]).Take(b[1]-b[0]+1)) .Concat(SeqFill(a.Length-b[1]-1,0)).ToArray; a.Println end end.
Файл с исходными данными имеет имя m17.txt. Тестовый файл находится во вложении. Разбивка на строки сделана по 5 значений, но может быть совершенно произвольной. Также нет привязки именно к 17 числам, главное - чтобы отрицательных чисел было ровно два, иначе будет выдано сообщение о их неверном количестве.
// Внимание! Если программа не работает, обновите версию!
begin
var m:=ReadInteger('Количество строк в массиве:');
var n:=ReadInteger('Количество столбцов в массиве:');
Writeln('*** Исходный массив [',m,',',n,'] ***');
var a:=MatrRandom(m,n,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
var k:=ReadInteger('Номер столбца для подсчета суммы:');
Writeln('S=',a.Col(k-1).Sum)
end.
Пример
Количество строк в массиве: 5
Количество столбцов в массиве: 8
*** Исходный массив [5,8] ***
91 -39 49 29 -60 -58 -88 -5
-80 -5 58 38 -75 -76 -54 -33
-60 -66 98 -88 96 -48 94 2
-4 81 -38 -91 26 -91 32 7
30 83 30 3 22 93 31 0
Номер столбца для подсчета суммы: 4
S=-109
На случай, если я неверно понял задание и нужна сумма по КАЖДОЙ колонке:
begin
var m:=ReadInteger('Количество строк в массиве:');
var n:=ReadInteger('Количество столбцов в массиве:');
Writeln('*** Исходный массив [',m,',',n,'] ***');
var a:=MatrRandom(m,n,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
a.Cols.Select(s->s.Sum).Println
end.
Пример
Количество строк в массиве: 4
Количество столбцов в массиве: 7
*** Исходный массив [4,7] ***
13 -14 82 88 -38 55 89
11 74 -35 85 13 27 -80
-88 76 -64 -88 -50 28 -13
90 87 -71 -94 -59 95 -83
26 223 -88 -9 -134 205 -87
begin
var a:=ReadLines('m17.txt').JoinIntoString.ToIntegers;
a.Println;
var b:=a.Select((x,i)->Rec(x,i)).Where(x->x.Item1<0)
.Select(x->x.Item2).ToArray;
if b.Count<>2 then
Writeln('Количество отрицательных элементов не равно двум')
else begin
a:=SeqFill(b[0],0).Concat(a.Skip(b[0]).Take(b[1]-b[0]+1))
.Concat(SeqFill(a.Length-b[1]-1,0)).ToArray;
a.Println
end
end.
Тестовое решение:
23 14 7 15 0 13 -6 41 18 13 8 42 27 -11 3 19 10
0 0 0 0 0 0 -6 41 18 13 8 42 27 -11 0 0 0
Файл с исходными данными имеет имя m17.txt. Тестовый файл находится во вложении. Разбивка на строки сделана по 5 значений, но может быть совершенно произвольной. Также нет привязки именно к 17 числам, главное - чтобы отрицательных чисел было ровно два, иначе будет выдано сообщение о их неверном количестве.