(Pascal)当时读取并使用可变的一个数字/字符

时间:2017-09-10 23:03:32

标签: converter pascal base

我正在开展一个项目,但我已经陷入困境。我需要制作一个Pascal程序,能够将任意数量的基数(2-16)转换为十进制数(10)。然而我的问题是我不能使用数组/字符串/读/键/类型等等。基本上我只能使用最基本的功能,例如repeat / while / for / if / case等我的问题源于我需要输入变量。它必须是:

  

- "碱:数"

     

- "在基数10"

中回答

例如

  

-16:123

     

-291

我无法使用":"将基数与数字分开。我也不确定如何分开数字。我想过使用Ord这似乎是唯一的方法,但我不知道在哪里放或者如何写它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您不需要数组或其他任何内容。练习要求你应用两件事的知识:如何一次处理输入一个字符,识别信号量(冒号':'),以及理解数字的数字如何与其相关基

数字的基数不是数字的内在质量 - 无论你代表什么基数,7是7是7。基数是文本,人类 - 可读的数字特征。您已经学会了如何处理学校中的多项式:

567 → 5×10² + 6×10¹ + 7×10⁰

那里的10是基数→基数10.如果我们使用十六进制(基数为16),则基数为16:

567₁₆ → 5×16² + 6×16¹ + 7×16⁰

最后一个技巧是了解如何通过乘法和余数运算使用基数来组合和分解数字。让我们重写那个多项式,使其更加明显:

567₁₆ → 5×16×16 + 6×16 + 7×1

因为我们将它乘以16 两次次,所以五位在右起第三位。 6位于右起第二位,因为我们将它乘以16 一个时间。并且7位于最右边的位置,因为我们将它乘以16 次。在代码中,那是:

n := 0;
n := n * 16 + 5;
n := n * 16 + 6;
n := n * 16 + 7;
writeln( 'n = ', n );

对于您的特定作业,第一个数字(在结肠之前':')始终在基数10中。第二个数字(冒号后#39;:')使用由第一个数字给出的基数。

祝你好运!