(帕斯卡)读取,并在时间

问题描述:

我工作的一个项目中使用的变量一个数字/字符,但我已经得到了坚持。我需要制作一个Pascal程序,能够将任何基数(2-16)转换为十进制(10)。然而,我的问题是我不能使用的东西像阵列/串/ readkey /类型等基本上我坚持用只喜欢重复最基本的功能/时/为/ IF /箱等我的问题来自于我需要如何输入变量。它需要:(帕斯卡)读取,并在时间

- “基地:号码。”

- “答案在基座10”

例如

-16:123。

-291

我不能基部从使用一定数量的单独的 “:”。我也不确定如何分开数字。我想过使用Ord似乎是唯一的方法,但我不知道该把它放在哪里,或者怎么写。有任何想法吗?

+0

似乎是https://stackoverflow.com/q/46065522/2292722的副本,虽然任务略有不同。 –

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

数字的基数不是数字的内在质量 - 无论您表示什么基数,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 一个时间乘以它。因为我们将它乘以16 次,所以7在最右边的位置。在代码中,这就是:

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

对于你的特定分配,所述第一数量(冒号之前“:”)总是在底座10上第二个数字(冒号后“:”)采用由下式给出的基数第一个号码。

祝你好运!

+0

对不起,但我真的不明白。 我知道如何改变基地,是的。我只是不知道如何分开输入,所以我可以在Pascal中这样做。这就是我遇到的麻烦。 >“第一个数字(在冒号'之前:')总是以10为底数。” 第一个数字不应该使用任何基数。它应该规定冒号后数字的基数。 – Olimak97

+0

一个数字总是以**表示**。冒号前的部分(基数)确实总是以10为底数表示。所以请逐数读数,直到找到冒号。然后使用该基础解码该行的其余部分。答案对我来说是正确的。 –