
Программисту было поручено написать программу нахождения суммы отрицательных элементов
одномерного массива. Программист разработал программу, но допустил в ней одну ошибку. Текст программы с ошибкой представлен ниже: 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];
Объяснение:



Давайте рассмотрим вашу программу по шагам и найдем ошибки в ней:
pascalprogram 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]; // Ошибка здесь, должно быть s := s + a[k] writeln(s); end.
После исполнения этой программы с введенными числами 1, 2, 3, 4, -1, -2, -3, -4, программа будет неправильно считать сумму отрицательных элементов. Ошибка заключается в том, что вместо
a[k]
используетсяa[1]
при обновлении суммы. Поэтому программа будет добавлять значениеa[1]
к сумме каждый раз, когда найдет отрицательный элемент. Ответ будет равен-16
, что неверно.Чтобы исправить программу и решить задачу корректно, вы должны использовать
a[k]
, чтобы добавить значение текущего отрицательного элемента к сумме. Вот исправленный код:
pascalprogram 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]; // Исправление: использовать a[k] вместо a[1] writeln(s); end.
Теперь программа должна правильно считать сумму отрицательных элементов массива и выведет -10
в случае ввода чисел 1, 2, 3, 4, -1, -2, -3, -4.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili