Mam problem z programem, ponieważ wydaje mi się, że wszystko jest dobrze, natomiast gdy go uruchamiam, wywala błąd przepełnienia stosu. Nie mam pomysłu co jest nie tak więc wrzucam swój kod i proszę o pomoc.
program podzielnosc_przez_3;
var a:integer;
function sumacyfr (a:word) :word;
begin
sumacyfr:=((a mod 10) + sumacyfr(a div 10)) mod 3;
end;
begin
a:=45;
sumacyfr(a);
{if sumacyfr(a)=0 then writeln ('jest podzielna')
else writeln ('nie jest podzielna');}
readln;
end.
dawno nie pisałem w Pascalu (jeśli w ogóle bo nie mogę sobie przypomnieć kiedy) ale ta linijka
sumacyfr:=((a mod 10) + sumacyfr(a div 10)) mod 3;
a dokładnie zmienna o nazwie sumacyfr wygląda podejrzanie. Natomiast po nieco dłuższej analizie kodu to nie widzę zakończenia się tej funkcji rekurencyjnej. Zazwyczaj jest taki fragment który zwraca wartość końcową i nie wywołuje dalej funkcji. W tym przypadku coś takiego: