在TurboPascal7中除以0

时间:2017-11-09 17:01:00

标签: pascal freepascal digits turbo-pascal

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

我的项目是:

  

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

我试图通过添加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 个答案:

答案 0 :(得分:1)

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