第12講 Functionプロシージャの再帰的使用の学習

第7話 Functionプロシージャの再帰的使用によって整数をn進数に翻訳する!
コード例

Private Sub CommandButton1_Click()

  Dim a As Long, n As Byte

  a = Cells(2, 4)
  n = Cells(2, 6)
  Cells(4, 2) = f(a, n)

End Sub

Function f(a As Long, n As Byte)

  Dim b As Long

  b = Int(a / n)  
  If b > 0 Then
    f = f(b, n)
  Else
    f = ""
  End If
  f = f + CStr(a Mod n)

End Function

Private Sub CommandButton2_Click()

  Range("D2,F2,B4").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub

こんなに短いコードでも、プログラムはかなり高度であることがお分かりかと思います。
再帰的使用は、初心者にっての一番の難所という意味がよくわかったのではないでしょうか。
尚、b = Int(a / n)のようなことをすると他の言語ではエラーします。
理由は、Dim b As Longを見ればお分かりのように、bはLong型です。
そこへ、整数型を代入しているのですから、型の違う代入をしていることになります。
本当は、b = CLng(Int(a / n))として、Integer型をLong型に変更すべきなのですが、
VBやVBAは、他の言語に比べるとかなり柔軟で変更しなくてもエラーしません。
自動的に、Long型へ変更してくれるのでしょう。
ただ、入門言語であるVBを卒業してVC++などへ移行していくことを考えて、
やはりb = CLng(Int(a / n))としておいた方がよいでしょうね。
CLng(・・)は括弧内のデータを強制的にLong型に変更するものです。

さて、一応Functionプロシージャの再帰的使用の基礎は終了とします。
後で、応用でもう一度戻ってくることになるでしょうが。

第13講は、3次元ループと3次元配列による成績一覧表の高度化を学習し、第14講では高次元配列と低次元配列の関係を考えて、
いよいよSubプロシージャの再帰的使用による3次と4次の魔方陣の自動生成に挑戦します。
そのプログラムは、3次魔方陣と4次魔方陣のすべての解答を作り出してしまいます。
4次では、7040も解答があります。
(ただし、鏡像変換や対象変換などで重ねることが出来るものは同じものであると見なすと880通りです。)

第6話へ 第13講第1話へ

004
  


VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る