// PascalABC.NET 3.3, сборка 1625 от 17.01.2018 // Внимание! Если программа не работает, обновите версию!
begin Writeln('*** Исходный массив ***'); var v:=MatrRandom(7,7,-15,15); v.Println(4); Writeln(4*v.ColCount*'-'); var pr3:=v.Row(2).Aggregate(1,(x,y)->x*y); Writeln('Произведение элементов 3-й строки равно ',pr3); Writeln('Количество элементов, больших этого произведения, равно ', v.ElementsByRow.Where(t->t>pr3).Count); Writeln('Максимум в 3-м столбце равен ',v.Col(2).Max) end.
m & 1 - это битовая конъюнкция. Результатом будет 1, если m нечетное, и 0, если m - четное (то есть, содержит или не содержит соответствующий разряд)
Выражение вида T ? X : Y, где T - логическое высказывание, принимает значение X, если T истинно, и Y, если T ложно.
Соответственно, i = (m & 1) == 1 ? m : m + 1 означает, что
если m нечетное, то i = m
если четное, i = m+1 (то есть, первое нечетное число после m)
i += 2 означает, что цикл идет с шагом, соответственно, рассматриваются только нечетные числа.
// Внимание! Если программа не работает, обновите версию!
begin
Writeln('*** Исходный массив ***');
var v:=MatrRandom(7,7,-15,15);
v.Println(4); Writeln(4*v.ColCount*'-');
var pr3:=v.Row(2).Aggregate(1,(x,y)->x*y);
Writeln('Произведение элементов 3-й строки равно ',pr3);
Writeln('Количество элементов, больших этого произведения, равно ',
v.ElementsByRow.Where(t->t>pr3).Count);
Writeln('Максимум в 3-м столбце равен ',v.Col(2).Max)
end.
Пример
*** Исходный массив ***
-4 -12 -15 -2 13 3 -15
-7 -1 -15 2 -2 4 -6
14 5 5 15 -4 3 0
13 15 9 14 11 -9 11
1 14 14 1 -4 -1 -7
15 -10 -13 -3 -8 -12 11
0 -13 -8 4 6 1 -11
Произведение элементов 3-й строки равно 0
Количество элементов, больших этого произведения, равно 24
Максимум в 3-м столбце равен 14