第28講 n進数演算−−−加法その2
第9話 n進法足し算プログラム解説その8
プログラム主要部分再掲
Sub ts(a() As Integer, b() As Integer, c() As Integer)
  Dim i As Integer, j As Integer
  Dim d(14) As Integer, e(14) As Integer
  Call sy(d())
  Call sy(e())
  Dim asz As Integer, bsz As Integer
  asz = cp(d(), a()) '終わり記号nをなくし、サイズを取得
  bsz = cp(e(), b()) '終わり記号nをなくし、サイズを取得
  Dim max As Integer
  max = asz
  If bsz > max Then max = bsz
  For i = 0 To max
    c(i) = c(i) + d(i) + e(i)
    c(i + 1) = c(i + 1) + Int(c(i) / n)
    c(i) = c(i) Mod n
  Next
  If c(max + 1) > 0 Then c(max + 2) = n Else c(max + 1) = n
End Sub

  For i = 0 To max
    c(i) = c(i) + d(i) + e(i)
    c(i + 1) = c(i + 1) + Int(c(i) / n)
    c(i) = c(i) Mod n
  Next
によって、

13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0

となり、最後の1行を迎えたわけです。
  If c(max + 1) > 0 Then c(max + 2) = n Else c(max + 1) = n
max = 8 ですから、
c(max + 1) > 0 は c(9) > 0
となり、If文の条件は満たされませんから、否定側のc(max + 1) = n
が実行され、c(9) = n です。すなわち、

13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0

終わりの印n=が刻印されて無事足し算の任務が遂行されたわけです。

もし、今の例が

13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0

と c(9) > 0 を満たすなら、肯定側の c(max + 2) = n
が実行されc(10) = n となり、

13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0
13 12 11 10 9 8 7 6 5 4  3 2 1 0

c(10) に終わりの印n=が刻印されことになるのです。

大変難解に見えたtsもトレースすると、
すっきり理解できるのではないでしょうか。

さて、次は引き算に挑戦です。
引き算は、足し算より難度が上になります。
そして、かけ算は引き算より難度が上がり、
割り算になるとかけ算の難度より、遙かに上がることになります。
素数を探索するためには平方根も考えなければならないのですが、
平方根は割り算よりさらに遙かに難しくなります。
ですが、この講義を一つ一つクリアしていけば、
巨大素数探索という難しい課題も、征服できるのです。



第8話へ 第29講第1話へ

004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
Visual C++ によるC言語 入門 C++ 入門 基礎から応用まで
本サイトトップへ