在TurboPascal7中除以0
我正在做我的学校项目,我(几乎)对这个问题感到愤怒。我的解决方案的有效性是95%,但我有1个输入错误-我不知道输入,但我知道,输入失败是因为错误代码200,它被0除掉 我的项目是: 整数的数字和定义为整数书面形式的数字和。通常我们使用数字的十进制(以10为基数)表示法计算数字和,但在本练习中,我们将以给定的基数计算它。编写一个函数,当一个自然数以给定的基数写入时,该函数计算该自然数的位数和。使用此函数,编写一个程序,读取两个自然数(每一个在其自己的行上,都以十进制表示):一个基数B和一个数字N。输出应该是以基数B表示的N的数字和(以十进制表示)。“ 我试图通过添加2个条件来解决问题,但没有任何效果,错误仍然存在。 我用的是一个公式,可以在这里找到。 这是代码本身,它并不长在TurboPascal7中除以0,pascal,freepascal,digits,turbo-pascal,Pascal,Freepascal,Digits,Turbo Pascal,我正在做我的学校项目,我(几乎)对这个问题感到愤怒。我的解决方案的有效性是95%,但我有1个输入错误-我不知道输入,但我知道,输入失败是因为错误代码200,它被0除掉 我的项目是: 整数的数字和定义为整数书面形式的数字和。通常我们使用数字的十进制(以10为基数)表示法计算数字和,但在本练习中,我们将以给定的基数计算它。编写一个函数,当一个自然数以给定的基数写入时,该函数计算该自然数的位数和。使用此函数,编写一个程序,读取两个自然数(每一个在其自己的行上,都以十进制表示):一个基数B和一个数字N。
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的定义中,包括了零。对数域是严格的正实数。自然数是整数。说到数学,我想我知道我在说什么。