第27講 n進数演算−−−加法その1
第8話 n進法データ発生マクロ
o
解答例
Dim n As Integer
Private Sub CommandButton1_Click()
  Dim a(14) As Integer
  Dim b(14) As Integer
  n = Cells(2, 16)
  Rows("3:20000").Select
  Selection.ClearContents
  Cells(2, 1).Select
  Call sy(a())
  Call sy(b())
  Call ds(a())
  Call ds(b())
  Call hy(a(), 3)
  Call hy(b(), 4)
End Sub
Sub sy(a() As Integer)
  Dim i As Integer
  For i = 0 To 14
    a(i) = 0
  Next
End Sub
Sub ds(a() As Integer)
  Dim i, m As Integer
  m = Int(10 * Rnd)
  For i = 0 To m
    a(i) = Int(n * Rnd)
    If i = m Then
      If a(i) = 0 Then i = i - 1
    End If
  Next
  a(m + 1) = n
End Sub
Sub hy(a() As Integer, g As Integer)
  Dim i As Integer
  For i = 0 To 14
    If a(i) = n Then Exit For
    Cells(g, 14 - i) = a(i)
    Next
End Sub
Private Sub CommandButton2_Click()
  Rows("3:20000").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
参考ダウンロード添付ファイル

さて、データが出来たところで、
いよいよ足し算のプログラミングに入りましょう。

考え方を説明しましょう。
下の5進数の場合の足し算を例にして考えてみましょう。
     32014
    + 1204
最後に、終わり記号5が入っていますから
     532014
    + 51204
です。
しかし、終わりの記号5
(5進数では0から4までの数字しか入りませんから5が入ることがないので、
終わり記号の意味を持たせることが出来ます。)
は表示のときに、威力を発揮したわけですが、
足し算などの加減乗除では、いろいろいたずらをしますので、
別の配列
Dim d(10000) As Integer,e(10000) As Integer
を用意して、始めはすべての要素を0にしておいた後で、
必要な分だけ、下のように代入しておきます。
    32014
   +01204

こうする利点は終わり記号5に邪魔されないだけでなく、
どちらの桁数の方が大きいのかをいちいち考えなくて済むことになります。
    01204
   +32014
でも全く問題ないわけです。

さて、
    32014
   +01204

に戻して説明を続けましょう。
まず、1の位の和はc(0)=a(0)+b(0)の計算から、
c(0)には8が入ります。
5進数の場合、最大は4までですから
(5)+4(5)=13(5)
です。つまり、繰り上がりが発生します。
c(0)には3を入れて、c(1)には1繰り上げるにはどうしたらよいか、
を解決すれば、足し算は出来ます。
c(0)に3を入れる方は皆さんお分かりですね。
c(0)=(a(0)+b(0)) Mod 5;
で問題は解決します。
では、1の繰り上げはどうでしょうか
c(1)=c(1)+Int((a(0)+b(0))/5);
で一応問題は解決します。
8を5で割ったときの商は1ですから。
Int(8/5)=1ですね。

ところが、2番目以降の場合には問題があります。
それは、繰り上げを組み込まなければならないからです。
ですから、
For i=0 To
   c(i)=(a(i)+b(i)) Mod n;
   c(i+1)=c(i+1)+Int((a(i)+b(i))/n)
Next
ではだめなわけです。
これが正しいのはi=0のときのみです。
ですが、これを改良すれば加法プログラムは完成します。

足し算の計算が終わったところで、最後にc(最後)=n
と終わりの記号を打ち込めば終了です。

これ以上書くとヒントの領域を越えてしまいますので、
ここまでにします。
では皆さん、プログラムを組んでみることにしましょう。

s

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