第20講 n進数演算−−−引き算
第11話 引き算プログラム解説その6
を実現するプログラムエンジン核心部分再掲
For i = 0 To mx - 1
If d(i) < e(i) Then
For j = i + 1 To mx - 1
If d(j) > 0 Then
d(j) = d(j) - 1
Exit For
Else
d(j) = n - 1
End If
Next
d(i) = d(i) + n
End If
c(i) = d(i) - e(i)
Next
参考ダウンロード添付ファイル
解説その3
i = 6 までで、
↓
↓
↓
↓
↓
↓
↓
となっていました。
8巡目に入ります。
i = 7 のとき、
d(7) = 6 e(3) = 1
d(i) ≧ e(i)ですから、
c(i) = d(i) - e(i)
すなわち
c(7) = d(7) - e(7)
が実行され、
c(7) = 6 - 1 = 5
から、
↓
が実現します。
9巡目に入ります。
i = 8 のとき、
d(8) = 1 e(8) = 3
ですから、
If d(i) < e(i) Then
For j = i + 1 To mx - 1
If d(j) > 0 Then
d(j) = d(j) - 1
Exit For
Else
d(j) = n - 1
End If
Next
d(i) = d(i) + n
が実行されて、
For j = 9 To 9
If d(j) > 0 Then
d(j) = d(j) - 1
Exit For
Else
d(j) = 6
End If
Next
は、1回のみのループとなります。
If d(9) > 0 Then
d(9) = d(9) - 1
Exit For
Else
d(9) = 6
End If
肯定側実行されて
d(9) = d(9) - 1
から
d(9) = 2 - 1 = 1
そして、
d(i) = d(i) + n
が実行され、
d(8) = d(8) + 7 = 1 + 7 =8
最後に
c(i) = d(i) - e(i)
から、
c(7) = d(7) - e(7) = 8 - 3 = 5
以上から、
↓
が実現できています。
最後の10巡目です。
i = 8 のとき、
d(8) = 1 e(8) = 0
から、
c(i) = d(i) - e(i)
すなわち
c(8) = d(8) - e(8)
が実行され、
c(7) = 1 - 0 = 1
以上によって、すべての処理が終了して
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
と正しく計算できています。
ミソは、
If d(i) < e(i) Then
For j = i + 1 To mx - 1
If d(j) > 0 Then
d(j) = d(j) - 1
Exit For
Else
d(j) = n - 1
End If
Next
d(i) = d(i) + n
にありす。d(i) < e(i)のときに、上の位から1を借りる、
それは自分の位から見ると10すなわち10進数の7を借りるのですが、
借りられるためには、上の位が財産をもっていなければなりません。
財産が0のときは、さらに上からから借りますが、そこも財産がない場合には、
さらに上の上からお金を借りるわけです。
d(j) > 0
になるまでループが続けられます。
下の位から貸してくれと頼まれて、財産がない位は上の位から1借りますが、
これは自分の位から見ると10すなわち10進数の7です。
7の財産になった位は下に1つ貸して、財産はn - 1 = 6となるわけです。
謎に見えたコードが、トレースと解説によって、
明瞭になったのではありませんか。
以上で、第20講のn進数演算−−−引き算は終了とします。
第20講の終了は、第2部の終了を意味します。
本講義第3部第21講では、電卓作りに挑戦します。
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ