Деление на 0 в TurboPascal7
Я работаю над своим школьным проектом, и я (почти) в ярости от этой проблемы. Правильность моего решения составляет 95 %, но у меня 1 неверный ввод - я не знаю ввод, но я знаю, что сбой ввода произошел из-за кода ошибки 200, который делится на 0.
Мой проект такой:
„Цифровая сумма целого числа определяется как сумма цифр в письменной форме целого числа. Обычно мы вычисляем сумму цифр, используя десятичное (основание 10) представление числа, но в этом упражнении мы вычислим ее в заданной базе. Напишите функцию, которая вычисляет сумму цифр натурального числа, когда число записывается в заданную базу. Используя эту функцию, напишите программу, которая читает два натуральных числа (каждое в своей строке и оба в десятичном представлении): основание B и число N. Выходные данные должны представлять собой сумму цифр N в основании B (записанную в десятичном представлении) ".
Я попытался исправить проблему, добавив 2 условия, но ничего не сделал, ошибка все еще существует. Я использую формулу, которую можно найти здесь https://en.wikipedia.org/wiki/Digit_sum. Вот сам код, он не длинный.
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.
Я был бы признателен, если бы кто-то мог посмотреть на код и сказать мне, где я делю на 0, потому что я попробовал много входов, потратил много часов на это и не нашел правильного решения. Спасибо вам всем.
PS: я чех, поэтому имена переменных и функций не на английском языке, извините за это, но я надеюсь, что это не будет проблемой.
1 ответ
Когда Cislo = 0
, следующий расчет Ln(Cislo)
дает ошибку времени выполнения 200. Это потому, что Ln(0)
не определено (вне допустимого диапазона Ln()
).