Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Процедуры в Pascale

Автор: Xumuk 18.03.2007 17:48

Описать процедуру SumDigit(N,S), находящую сумму цифр S целого числа N (N — входной, S — выходной параметр). Используя эту процедуру, найти суммы цифр пяти данных чисел.
ВАЩЕ не врубаюсь, помогите пожалуйста! unsure.gif

Автор: compiler 18.03.2007 17:53

Цитата(Xumuk @ 18.03.2007 12:48) *

Описать процедуру SumDigit(N,S), находящую сумму цифр S целого числа N (N — входной, S — выходной параметр). Используя эту процедуру, найти суммы цифр пяти данных чисел.
ВАЩЕ не врубаюсь, помогите пожалуйста! unsure.gif

попробуй так разбей число на отдельные числа (делением на 10, 100, 100...) и суммируй их

Автор: Артемий2 18.03.2007 17:54

Воспользуйся поиском!Подобные задачи решались.

Автор: Tan 18.03.2007 18:08

Есть число, находишь остаток от деления на 10, ложишь в сумматор, делишь нацело на 10 и так до тех пор пока не осталось число которое не делится на 10 (однозначное) его просто прибавлешь к сумматору и так с каждым числом.

Автор: Артемий2 18.03.2007 18:14

Есть простое решение с множеством,но поскольку я с налодонником выложу чуть позже.. smile.gif

Автор: compiler 18.03.2007 18:22

Цитата(Tan @ 18.03.2007 13:08) *

Есть число, находишь остаток от деления на 10, ложишь в сумматор, делишь нацело на 10 и так до тех пор пока не осталось число которое не делится на 10 (однозначное) его просто прибавлешь к сумматору и так с каждым числом.

Tan, а у меня все работает так
 while number<>0 do begin
summ:=summ + (number mod 10);
number:=number div 10;
End;

ИМХО, так проще.. всё в одном цикле..

Автор: -Volvo- 18.03.2007 18:45

summ:=summ + Abs(number mod 10);
, иначе получишь отрицательную сумму при переданном отрицательном числе... Ну, или после цикла взять сумму по модулю...

Автор: compiler 18.03.2007 18:58

Цитата(-Volvo- @ 18.03.2007 13:45) *

иначе получишь отрицательную сумму при переданном отрицательном числе...

точно... не учел

Автор: Tan 18.03.2007 23:19

Вот это объеденение всего вышеупомянутого :

uses crt;
var n,sum : integer;
procedure SumDigits (N : integer; var S : integer);
begin
while n <> 0 do
begin
s:= s + abs(n mod 10);
n:= n div 10;
End;
end;
begin
readln (n);
SumDigits (n,sum);
writeln (sum);
readkey;
end.