在TurboPascal7中除以0

在TurboPascal7中除以0,pascal,freepascal,digits,turbo-pascal,Pascal,Freepascal,Digits,Turbo Pascal,我正在做我的学校项目,我(几乎)对这个问题感到愤怒。我的解决方案的有效性是95%,但我有1个输入错误-我不知道输入,但我知道,输入失败是因为错误代码200,它被0除掉 我的项目是: 整数的数字和定义为整数书面形式的数字和。通常我们使用数字的十进制(以10为基数)表示法计算数字和,但在本练习中,我们将以给定的基数计算它。编写一个函数,当一个自然数以给定的基数写入时,该函数计算该自然数的位数和。使用此函数,编写一个程序,读取两个自然数(每一个在其自己的行上,都以十进制表示):一个基数B和一个数字N。

我正在做我的学校项目,我(几乎)对这个问题感到愤怒。我的解决方案的有效性是95%,但我有1个输入错误-我不知道输入,但我知道,输入失败是因为错误代码200,它被0除掉

我的项目是:

整数的数字和定义为整数书面形式的数字和。通常我们使用数字的十进制(以10为基数)表示法计算数字和,但在本练习中,我们将以给定的基数计算它。编写一个函数,当一个自然数以给定的基数写入时,该函数计算该自然数的位数和。使用此函数,编写一个程序,读取两个自然数(每一个在其自己的行上,都以十进制表示):一个基数B和一个数字N。输出应该是以基数B表示的N的数字和(以十进制表示)。“

我试图通过添加2个条件来解决问题,但没有任何效果,错误仍然存在。 我用的是一个公式,可以在这里找到。 这是代码本身,它并不长

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:我是捷克人,所以变量和函数的名称不是英文的,很抱歉,但我希望这不会是一个问题。

Cislo=0
时,下面对
Ln(Cislo)
的计算会给出运行时错误200。这是因为
Ln(0)
未定义(超出
Ln()的允许范围)
)。

我不知道输入,但我知道输入失败了。你是说你不知道是什么用户输入到你的程序中导致它失败?你已经处理了
Ln(Soustava)
的情况,不允许
Soustava
为1(尽管你的程序允许输入负数,但失败了)。在本例中,您的
mod
是可疑的。如果
mod
的第二个参数为0,则存在被零除的情况。换句话说,如果
Mocnina(Sousstava,i+1)
返回0,您有麻烦了。既然
Mocnina只执行整数幂运算,那么可能是整数溢出条件,溢出正好为0。进行一些调试。为什么人们不再调试?潜伏者–不,我不知道,这是一个测试程序,它验证我的程序,只是它有一些(对我来说)秘密输入并测试我的输出是否正确。是的,我已经处理了Ln(Soustava),其中,要定义除以对数,Soustava(参数)不能是一个。另外,我还处理了另一个条件的问题,当Soustava=0时,所以我可以用Mocnina(Soustava,I)和Mocnina(Soustava,(I+1))除以(或使用“mod”)。此外,程序开始时给出的2个数字是自然的,因此它们肯定不能是负数。这就是我决定在这里寻求帮助的原因。David Heggernan–我想我知道如何在TurboPascal7中调试程序,但正如我问你的,我为什么要调试(使用手表、跟踪等)如果我所有的输入都给了我正确的输出?换句话说,我不知道我的程序在哪种输入上会失败。或者我不理解你的观点,或者你不理解我的观点。谢谢你,先生。我正在学习理论数学,我们还没有定义零是自然数的集合。你有正确的答案吗好主意。谢谢你的帮助,祝你度过愉快的一天。这与自然数无关@Palindrom@DavidHeffernan–您不正确。函数对数是在区间(0,infty)上定义的。如果我假设,自然数集不是{0,1,…},而是{1,2,3,…},在任务中输入的数据应该只是自然数,我想(错了)当Cislo=0时,我不必测试这个例子。自然数的定义可能会有所不同,但至少在ISO的定义中,包括了零。对数域是严格的正实数。自然数是整数。说到数学,我想我知道我在说什么。