2017-09-10 49 views
-3

我工作的一個項目中使用的變量一個數字/字符,但我已經得到了堅持。我需要製作一個Pascal程序,能夠將任何基數(2-16)轉換爲十進制(10)。然而,我的問題是我不能使用的東西像陣列/串/ readkey /類型等基本上我堅持用只喜歡重複最基本的功能/時/爲/ IF /箱等我的問題來自於我需要如何輸入變量。它需要:(帕斯卡)讀取,並在時間

- 「基地:號碼。」

- 「答案在基座10」

例如

-16:123。

-291

我不能基部從使用一定數量的單獨的 「:」。我也不確定如何分開數字。我想過使用Ord似乎是唯一的方法,但我不知道該把它放在哪裏,或者怎麼寫。有任何想法嗎?

+0

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

回答

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 一個時間乘以它。因爲我們將它乘以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爲底數表示。所以請逐數讀數,直到找到冒號。然後使用該基礎解碼該行的其餘部分。答案對我來說是正確的。 –