Задание 3 Параграф 8 ГДЗ Босова 11 класс (Информатика)
- Программист написал программу суммирования элементов массива, но допустил в ней ошибку:
Program summa;
const n=10;
var a: array [1..n] of integer;
s, i: integer;
begin
for i:=1 to n do
begin
readln(a[i]);
s:=s+i
end;
writeln(‘s=’, s)
end.1) Что получится в результате выполнения этой программы, если в качестве элементов массива ввести числа: $$1, -2, 3, -4, 5, -6, 7, -8, 9, -10$$?
2) Придумайте пример такого массива, обработка которого с помощью этой программы приводила бы к правильному результату.
3) Найдите ошибку, допущенную программистом.
В программе допущена ошибка: вместо суммы элементов массива вычисляется сумма индексов.
При вводе 10 элементов цикл выполнится для $$i=1,2,\dots,10$$, поэтому значение $$s$$ станет равным
$$s=1+2+3+4+5+6+7+8+9+10=55.$$
Но в исходном тексте решения указано, что переменная $$s$$ не была инициализирована нулём, поэтому в зависимости от среды выполнения результат может быть неопределённым. В корректной программе перед циклом должно быть $$s:=0$$. Тогда при ошибочном сложении индексов получится $$55$$.
Для правильной работы программы нужно заменить строку
s:=s+i
на
s:=s+a[i]
Пример массива, для которого ошибочная программа даст правильный результат: если сумма его элементов равна $$55$$, например
$$10,\ 15,\ -30,\ 5,\ 13,\ 7,\ 9,\ 45,\ -3,\ -16.$$
Проверка:
$$10+15-30+5+13+7+9+45-3-16=55.$$
Ответ
1) При корректной инициализации $$s:=0$$ программа выведет $$s=55$$. Если $$s$$ не инициализировать, результат неопределён.
2) Подойдёт любой массив из 10 элементов, сумма которых равна $$55$$, например $$10,\ 15,\ -30,\ 5,\ 13,\ 7,\ 9,\ 45,\ -3,\ -16$$.
3) Ошибка в строке $$s:=s+i$$. Нужно писать $$s:=s+a[i]$$.

