<em>// PascalABC.NET 3.2, сборка 1488 от 21.06.2017</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
var a:=ArrRandom(ReadInteger('n='),-50,50); a.Println;
var max:=a.Max;
Writeln('Сумма положительных без максимума равна ',
a.Where(x->(x>0) and (x<>max)).Sum)
end.
<u>Пример</u>
n= 16
-47 -28 38 49 -42 2 49 -29 39 -36 -4 -11 45 -12 -44 -16
Сумма положительных без максимума равна 124
<em>1a)</em>
(-3-7)/(-1)+1 = <u>11 раз</u> выполнится цикл. Стандартная формула вычисления числа шагов.
<em>1b)
</em>Тут k меняется от 0 с шагом 4 до 14 (15 уже нельзя). По той же формуле:
(14-0)/4+1 = 3+1 = <u>4 раза</u> (деление мы выполняем нацело).
<em>1c)</em>
k присваивается значение 10, затем оно уменьшается на 1 (теперь k=9) и проверяется условие завершения цикла k>2.
Условие завершения истинно, поэтому цикл будет выполнен <u>1 раз</u>.
<em>2a)</em>
До входа в цикл s=0, а при каждом проходе по циклу s увеличивается на 1, если выполняется некое условие, т.е. s - это счетчик, значение которого выводится после окончания цикла.
Условие k mod 7 = 0 сообщает нам, что именно подсчитывается: сколько раз k будет делится на 7 без остатка. Значение k изменяется от 1 до 27 и легко найти на этом интервале все числа, кратные 7, если вспомнить таблицу умножения: 7, 14, 21.
Следовательно, будет выведено число <u>3</u>.
<em>2b)</em>
Здесь так же s=0 перед входом в цикл, но в теле цикла s увеличивается уже не на 1, а на k, т.е. это накопление суммы некоторых k. Первоначально k=1, а затем оно с шагом 4 растет, пока остается меньше 18, т.е k = 1, 5, 9, 13, 17. Сумма этих чисел и будет накоплена в s, так что s = 1+5+9+13+17 = <u>45</u>
<em>2с)</em>
Здесь выводится значение p. Перед входом в цикл ему присваивается уже не 0, а 1, так что тут "запахло" произведением, а не суммой. И действительно, в теле цикла p домножается на k, т.е. это произведение неких k. Посмотрим, каких именно.
Первоначально k=0. Входим в цикл, он типа repeat, поэтому входим, не думая. Первое же умножение p на 0 даст 0 и дальше уже нечего
думать: сколько не умножай, ноль нулем и останется. Так и будет выведено число <u>0</u>.
Первое решение понятно, но это только общие мысли, в целом оно ошибочно по двум пунктам
1. В задании идёт речь о 20 веке, а это года 1901,1902......2000. Поэтому в объявлении массива нужно указать именно эти интервалы. Или просто 1 - 100, понятно же, что это один век, а при отображении года следует отображать (1900+i).
2. В задании не определено, с какой точностью это самое население считается, если с точностью до человека, то INTEGER не хватит, поэтому этот вопрос нужно уточнить и в зависимости от точности (до тысяч, до десятков или сотен тысяч человек) выбрать соответствующий формат представления данных.
3. Странно писать 100 одинаковых операторов присваивания(кстати в тексте ещё ошибка - присваивается ОДНО И ТО ЖЕ значение, ведь оператора ввода данных НЕТ!).
Такие вещи делаются в цикле по индексам. Внутри цикла 2 оператора
Ввод()
Присваивание
Опять же в задании не сказано, откуда берутся данные, ведь они могут браться с клавиатуры, с внешнего устройства(диска) или с какого-нибудь другого устройства ввода, например, сканера. Эти вводы реализуются похожими, но РАЗНЫМИ операторами.
Вот мои замечания, хотя, если формально точно реализовывать предложенное задание, нужно всего лишь описать массив, в котором будут храниться некоторые данные. В этом случае действительны лишь замечания 1 и 2.
И ещё. Я не помню, что такое INTEGER. INTEGER 2-байтный точно не хватит, INTEGER 4-байтный должно хватить.
Успехов!
Б1+б2+б3+б4=7
(б1+б2+б3+б4+б5)/5=5
б1+б2+б3+б4+б5=25
б1+б2+б3+б4+б5-б1-б2-б3-б4=б5=25-7=18
Ответ:18