Zliczanie cyfr

0

takie proste pytanko. Próbuję napisać funkcję rekurencyjną zliczającą na okrągło sumę cyfr liczby aż ta suma będzie jednocyfrowa. No i mi jakoś to nie idzie. Proszę o pomoc.

0

Jak to ma działać? :| Podaję liczbę np. 1275 i suma cyfr to 15, i co dalej z tym ma się stać? Ma obliczyć sumę cyfr liczby 15 i ostatecznie zwrócić 6 (suma jest jednocyfrowa)?

Jeżeli tak, to może być o tak:

function Suma(X: Integer): Integer;
var
  S: String;
  n: Integer;
begin
  S := IntToStr(X);
  X := 0;
  for n := 1 to Length(S) do
    X := X + StrToInt(S[n]);
  if X < 10 then Result := X else Result := Suma(X);
end;

0

no wszystko sie zgadza, ale nie dla starego Pascala. dokładnie o to mi chodziło (działanie) ale bez IntToStr i StrToInt tylko na modach jakoś i divach ??

0

Po co ci tu MOD i DIV ?

A w pascalu są funkcje VAL i STR. F1 - wszystko jest w systemie pomocy.

0

unction sc(l:longint):byte;
var s:longint;
begin
repeat
s:=0;
while l>0 do begin
s:=s+ l mod 10; l:=l div 10
end;
l:=s;
until s<10;
sc:=s
end;

0
</function sumacyfr(i:longint):byte;
begin
    while i>=10 do
      i:=i div 10 + i mod 10;
  sc1:=i
end;
code>
0

unction sc(l:longint):byte;
var s:longint;
begin
repeat
s:=0;
while l>0 do begin
s:=s+ l mod 10; l:=l div 10
end;
l:=s;
until s<10;
sc:=s
end;

sumacyfr(i:longint):byte;
begin
while i>=10 do
i:=i div 10 + i mod 10;
sc1:=i
end;

Może się wstrzymaj od odpowiedzi - czytaj temat - ma być rekurencyjnie.

0

No tak, przeoczyłem (rekurencja), ale mam jeszcze jedno rozwiązanko
sumacyfr:=succ( pred(liczba) mod 9 )

1 użytkowników online, w tym zalogowanych: 0, gości: 1