Написать программу, которая вводит с клавиатуры элементы вектора целых чисел, пока пользователь не
введет 0. После окончания ввода необходимо рассчитать среднее арифметическое элементов вектора и
вывести на экран элементы, превышающие это значение. (С++)
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк в матрице:');
var m:=ReadInteger('Количество столбцов в матрице:');
Writeln('*** Исходная матрица [',n,',',m,'] ***');
var a:=MatrRandom(n,m,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
Write('Количество элементов, превышающих 2, равно ');
Writeln(a.Rows.SelectMany(x->x).Where(x->x>2).Count)
end.
Пример:
Количество строк в матрице: 4
Количество столбцов в матрице: 7
*** Исходная матрица [4,7] ***
46 81 -90 -42 -7 -2 -16
-32 -12 16 -46 -54 -85 97
26 98 77 68 -21 47 -63
27 8 -1 54 -46 -52 52
Количество элементов, превышающих 2, равно 13
В операторе цикла for i:= 1 to sqrt(k) do значение, возвращаемое функцией sqrt имеет тип real, а в этом операторе все значения должны приводиться к целочисленному типу. Автоматическое приведение типа real к integer в языке Паскаль невозможно, его нужно осуществлять явно при функции Trunc() или Round().
2. НИ РАЗУ И НИЧЕГО НЕ БУДЕТ НАПЕЧАТАНО. Программа не откомпилируется из-за ошибок, которых в операторе if k write(k); сразу две.
Первая - после k пропущено ключевое слово then.
Вторая состоит в том, что после if должно следовать логическое выражение, а k имеет тип char, но не boolean.
3. ОДИН РАЗ, БУДЕТ ВЫВЕДЕНО True.
В цикле должны быть значения порядкового типа и тип boolean этому требованию удовлетворяет. При входе в цикл f=false, цикл выполняется, затем f=true и цикл завершается. При однократном проходе по циклу выполнится оператор g:= not f и g получит значение true. Это значение и будет выведено.