Palindrom - 3 years ago 236

Pascal Question

I am working on my school project and I am (almost) furious about this issue. My solution's validity is 95 %, but I have 1 input wrong – I don't know the input, but I know, that the input failed because of the error code 200, which is divison by 0.

My project is this:

„The digit sum of an integer is defined to be the sum of the digits in the integer's written form. Usually we calculate the digit sum using a number's decimal (base 10) representation, but in this exercise we will compute it in a given base. Write a function that computes a natural number's digit sum when the number is written in a given base. Using this function, write a program that reads two natural numbers (each on its own line, and both in decimal representation): a base B and a number N. The output should be N's digit sum in base B (written in decimal representation).“

I have tried to fix the problem by adding 2 conditions, but it did nothing, mistake still exists.

I am using a formula, which can be found here https://en.wikipedia.org/wiki/Digit_sum .

Here is the code itself, it is not long.

`program CifernySoucetZobecneny;`

var

Soustava, Cislo, i: longint;

HorniMez: longint;

Soucet: real;

function Mocnina(Zaklad: longint; Exponent: longint): longint;

var

i, Pomoc: longint;

begin

Pomoc := 1;

for i := 1 to Exponent do

begin

Pomoc := Pomoc * Zaklad;

end;

Mocnina := Pomoc;

end;

begin

readLn(Soustava);

readLn(Cislo);

if (Soustava = 0) then

begin

writeLn('0');

exit;

end;

if (Soustava = 1) then

begin

writeLn(Cislo);

exit;

end;

HorniMez := Trunc(Ln(Cislo)/Ln(Soustava));

Soucet := 0;

for i := 0 to HorniMez do

begin

Soucet := Soucet + ((1/Mocnina(Soustava, (i)))*((Cislo mod Mocnina(Soustava, (i+1))) - (Cislo mod Mocnina(Soustava, i))));

end;

writeLn(Soucet:0:0);

end.

I would be grateful if someone could look at the code and told me, where am I dividing by 0, because I tried many inputs, spend many hours on this and did not come with the correct solution. Thank you all.

PS: I am Czech, so the names of the variables and functions are not in English, sorry for that, but I hope, that it will not be a problem.

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

When `Cislo = 0`

, a following calculation of `Ln(Cislo)`

gives the runtime error 200. That is because `Ln(0)`

is undefined (outside the allowed range of `Ln()`

).

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**