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.
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;
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 ??
Po co ci tu MOD i DIV ?
A w pascalu są funkcje VAL i STR. F1 - wszystko jest w systemie pomocy.
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;
</function sumacyfr(i:longint):byte;
begin
while i>=10 do
i:=i div 10 + i mod 10;
sc1:=i
end;
code>
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.
No tak, przeoczyłem (rekurencja), ale mam jeszcze jedno rozwiązanko
sumacyfr:=succ( pred(liczba) mod 9 )