Пример 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);.
