Номер §4.3 ПМ 2

ГДЗ по информатике 8 класс, Босова 2023, страница 163

§. ПМ Сумма цифр и знак числа

Пример 2. Запишем программу нахождения суммы цифр вводимого с клавиатуры натурального трёхзначного числа. Используем тот факт, что положительное трёхзначное число можно представить в виде следующей суммы: x = a · 100 + b · 10 + c, где a, b, c — цифры числа.

var
  x, a, b, c, s: integer;
begin
  writeln('Нахождение суммы цифр трёхзначного числа');
  write('Введите исходное число >>');
  readln(x);
  a := x div 100;
  b := x mod 100 div 10;
  c := x mod 10;
  s := a + b + c;
  write('s=', s)
end.

Чему равна сумма цифр числа 123? А числа −123? Совпадают ли ваши результаты с результатами работы программы? Как можно объяснить и исправить ошибку в программе? Обсудите этот вопрос в группе.

Решение

Знак минус не является цифрой. У числа цифры , , ; у числа − цифры те же. Поэтому в обоих случаях сумма равна .

Проследим работу напечатанной программы для . По определению div даёт неполное частное, а mod — остаток: , , , . Программа получает .

При отрицательном вводе исходная предпосылка программы нарушена: она написана для натурального числа. В Паскале деление целых с отбрасыванием дробной части даёт , а остаток имеет знак делимого: . Затем и . Значит, программа складывает , хотя сумма цифр равна .

Исправление — до выделения цифр заменить число его модулем. Функция abs из таблицы . возвращает , поэтому перед строкой a := x div ; добавляем оператор x := abs(x);. Тогда при вводе − переменная x станет и дальнейшие действия дадут , и . Условие «трёхзначное» при этом сохраняем: рассматриваем числа, модуль которых от до .

Ответ

Сумма цифр и − равна . Исходная программа при − выдаёт −. Перед выделением цифр нужно выполнить x := abs(x);.

Помогло?

Нет твоего задания?Сфоткай, и ДЗмэн решит за пару секунд.

Решить по фото