Zliczanie cyfr

Odpowiedz Nowy wątek
2005-02-04 09:56
gucio
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.

Pozostało 580 znaków

2005-02-04 09:59
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;

Pozostało 580 znaków

2005-02-04 11:34
gucio
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 ??

Pozostało 580 znaków

2005-02-04 12:19
0

Po co ci tu MOD i DIV ?

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

Pozostało 580 znaków

2005-02-04 14:31
Xitami
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;

Pozostało 580 znaków

2005-02-04 17:20
Xitami
0

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

Pozostało 580 znaków

2005-02-05 01:23
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.


Pozostało 580 znaków

2005-02-06 21:14
Xitami
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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