第20講 n進数演算−−−引き算
第11話 引き算プログラム解説その6
wgiuqh
を実現するプログラムエンジン核心部分再掲
  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 までで、
 ww
             ↓
 qnkqwiu
             ↓
 ycghv
             ↓
 gweh
             ↓
 03545
             ↓
 yrtf
             ↓
 wefijvo
             ↓
 weiyhrw
 となっていました。
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
 から、
 weiyhrw
              ↓
 rjiquw
 が実現します。
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
 以上から、
 qwrqfo
             ↓
 vwer
 が実現できています。
最後の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
以上によって、すべての処理が終了して

 ww
             ↓
 qnkqwiu
             ↓
 ycghv
             ↓
 gweh
             ↓
 03545
             ↓
 yrtf
             ↓
 wefijvo
             ↓
 weiyhrw
             ↓
 qw
             ↓
 qwgx
             ↓
 afaxz
と正しく計算できています。

ミソは、
    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講では、電卓作りに挑戦します。

第10話へ 第21講第1話へ
004

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入門へ
本サイトトップへ