第28講 n進数演算−−−加法その2
第2話 n進法足し算プログラム解説その1
プログラム主要部分再掲
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
Function cp(x() As Integer, y() As Integer)
Dim i As Integer
For i = 0 To 14
If y(i) = n Then
cp = i - 1
Exit Function
End If
x(i) = y(i)
Next
End Sub
それでは何回かにわたってプログラムを解説していくことにしましょう。
まず、
Function cp(x() As Integer, y() As Integer)
Dim i As Integer
For i = 0 To 14
If y(i) = n Then
cp = i - 1
Exit Function
End If
x(i) = y(i)
Next
End Sub
この関数の目的は、2つあります。
1つ目は、コピーしつつ終わり記号nをなくこと、
2つ目は、それぞれの整数のサイズを取得することです。
例えば、1つ目の整数が
000000n3245602の場合には、
00000003245602
としています。
終わり記号nは、表示のときには便利ですが、計算するときには邪魔です。
なので一端その終わり記号を外しているのです。
次の4行
If y(i) = n Then
cp = i - 1
Exit Function
End If
は、今の例だと
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | n | 3 | 2 | 4 | 5 | 6 | 6 | 2 |
nの1つ手前の3の添え字6を返すことを任務にしています。
コピーすること、
nを0に変更すること、
サイズを取得すること、
の3つの目的を持つ関数ですが、
欲張りすぎているかも知れません。
なるべく汎用性のあるツールにすることが、
プログラミングのコツですから、
サイズ取得は独立させておいた方がよいかも知れませんね。
すでに、初期化ツール、サイズ取得&&コピー&&nを0に変更するツール
の2つを作っていますが、
何回も出てくる操作は、
サブプロシージャかファンクションプロシージャに独立させておくことが、
プログラミングのコツです。
これからも共通ツールをたくさん作っていきます。
第1話へ 第3話へ
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++ 入門 基礎から応用まで
本サイトトップへ