Программисту было поручено написать программу нахождения суммы отрицательных элементов одномерного массива. Программист разработал
программу, но допустил в ней одну ошибку. Текст программы с ошибкой
представлен ниже:
program n1;
var
k, s: integer;
a: array [1..8] of integer;
begin
for k := 1 to 8 do readln(a[k]);
s := 0;
for k := 1 to 8 do
if a[k] < 0 then s := s + a[1];
writeln(s);
end.
1) Каким окажется ответ после исполнения этой программы, если в качестве
элементов массива будут введены числа 1, 2, 3, 4, -1, -2, -3, -4?
2) Как исправить программу, чтобы она решала поставленную перед
программистом задачу?
1.
program n1;
var
k, s: integer;
a: array [1..8] of integer;
begin
for k := 1 to 8 do readln(a[k]); // с клавиатуры вводится массив из 8
s := 0; элементов
for k := 1 to 8 do
if a[k] < 0 then s := s + a[1]; // в цикле 4 раза к s прибавляют 1-ый элемент
writeln(s); // выводится s
end.
ответ: 4(т.к 1-ый элемент массива 1 и в нём 4 отрицательных элемента)
2.
Надо строку if a[k] < 0 then s := s + a[1];
Заменить на строку if a[k] < 0 then s := s + a[k];
Объяснение:
Объяснение:
В данной программе определяется одномерный массив a, содержащий 8 элементов. Затем с помощью цикла for используется команда readln для ввода значений чисел в массив. Далее инициализируется переменная s, равная 0, которая будет использоваться для хранения суммы отрицательных элементов. Затем с помощью второго цикла for и условного оператора if проверяется каждый элемент массива a. Если элемент меньше нуля, то значение этого элемента прибавляется к переменной s. Однако здесь программа содержит ошибку: вместо прибавления текущего отрицательного элемента, прибавляется a[1] (первый элемент массива).
2) Для исправления программы, чтобы она решала поставленную задачу, нужно заменить a[1] на a[k] (текущий элемент массива) в цикле, который суммирует отрицательные элементы. Правильная версия программы выглядит следующим образом:
program n1;
var
k, s: integer;
a: array [1..8] of integer;
begin
for k := 1 to 8 do
readln(a[k]);
s := 0;
for k := 1 to 8 do
if a[k] < 0 then
s := s + a[k];
writeln(s);
end.
Теперь программа будет работать правильно и вычислит сумму отрицательных элементов массива.