Деление на 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()).

Другие вопросы по тегам