第28講 n進数演算−−−加法その2
第4話 n進法足し算プログラム解説その3
プログラム主要部分再掲
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


さて、
  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
の5行によって、

データa

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

データb

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

maxとして8が取得されました。
ですから、この場合には、
  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

  For i = 0 To 8
    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
となります。
ここでは、何をしているのでしょうか。データaとb

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

は、
  asz = cp(d(), a()) '終わり記号nをなくし、サイズを取得
  bsz = cp(e(), b()) '終わり記号nをなくし、サイズを取得
によって、データdとeに次のようにコピーされていました。

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

ですから、この図を常に頭に浮かべながら、トレースしてみましょう。
尚、扱っているデータは7進数であることを前提にします。
i=0のとき、
    c(i) = c(i) + d(i) + e(i)
は、
    c(0) = c(0) + d(0) + e(0)
cは
  Call sy(c())
  Call ts(a(), b(), c())
足し算サブプロシージャに来る前にすべて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
13 12 11 10  9 8 7 6 5 4  3 2 1 0

(上の表は、上から順にd,e,c)
c(0) = 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

からd(0) = 、e(0) =
ですから、
    c(0) = c(0) + d(0) + e(0) = 0 + + = 6
です。
次の行
    c(i + 1) = c(i + 1) + Int(c(i) / n)
は、cの要素はすべて0に初期化されていてn=7ですから、
    c(
0 + 1) = c(0 + 1) + Int(c(0) / 7)
          = 0 + Int(6/ 7)
          = 0 + 0
          = 0
すなわち、c(
1) = 0
最後の行
    c(i) = c(i) Mod n

    c(0) = c(0) Mod 7
       = 6 Mod 7
       = 6

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の位が6になり、7の位(左から2番目の位)への繰り上がりがです。
順調なスタートを切りました。

第3話へ 第5話へ

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++ 入門 基礎から応用まで
本サイトトップへ