第7講 配列の学習
第4話 2次元配列の利用
この話では、2次元配列を利用して、様々な行列を作っていきます。
第8講では、この話を基礎に4次魔方陣と6次魔方陣の作成に挑戦します。
1から順に並んでいる行列を自然配列と名付けます。
この自然配列を最初に作り、
それを転置(縦・横を反対にすること)したり、
逆順に表示させたり、
逆順を転置させたりします。
下のシートはH2に行数、H3に列数を入れて、実行ボタンを押すとそれらが表示されるものです。
実行画面は、H2に3、H3に4を入れた場合です。
シート
実行画面例
自然配列は、
Subプロシジャf0において、グローバル変数Dim a(100, 100) As Integer上にさせいしておき、
そのグローバル配列を利用して、自然配列の表示Subプロシージャf1、自然配列転置の表示Subプロシージャf2、
逆自然配列の表示Subプロシージャf3、逆自然配列転置の表示Subプロシージャf4によって、それぞれを表示させます。
では皆さん、コーティングしてみましょう。
解答例は、30行下。
コード例
Dim a(100, 100) As Integer 'グローバル配列
Private Sub CommandButton1_Click()
Dim h As Byte, o As Byte
h = Cells(2, 8)
o = Cells(3, 8)
f0 h, o '自然配列の生成
f1 h, o '自然配列の表示
f2 h, o '自然配列の転置(縦・横交換)の表示
f3 h, o '逆自然配列の表示
f4 h, o '逆自然配列転置の表示
End Sub
'自然配列の生成
Sub f0(h As Byte, o As Byte)
Dim i As Byte, j As Byte
For i = 0 To h - 1
For j = 0 To o - 1
a(i, j) = o * i + j + 1
Next
Next
End Sub
'自然配列の表示
Sub f1(h As Byte, o As Byte)
Dim i As Byte, j As Byte
Cells(6, 1) = "自然配列"
For i = 0 To h - 1
For j = 0 To o - 1
Cells(7 + i, 1 + j) = a(i, j)
Next
Next
End Sub
'自然配列の転置の表示
Sub f2(h As Byte, o As Byte)
Dim i As Byte, j As Byte
Cells(6, 3 + o) = "自然配列の転置"
For i = 0 To o - 1
For j = 0 To h - 1
Cells(7 + i, 3 + j + o) = a(j, i)
Next
Next
End Sub
'逆自然配列の表示
Sub f3(h As Byte, o As Byte)
Dim i As Byte, j As Byte
Cells(6, 5 + h + o) = "逆自然配列"
For i = 0 To h - 1
For j = 0 To o - 1
Cells(7 + i, 5 + j + h + o) = (o - 1) * h + h + 1 - a(i, j)
Next
Next
End Sub
'逆自然配列転置の表示
Sub f4(h As Byte, o As Byte)
Dim i As Byte, j As Byte
Cells(6, 7 + h + 2 * o) = "逆自然配列の転置"
For i = 0 To h - 1
For j = 0 To o - 1
Cells(7 + i, 7 + j + h + 2 * o) = (o - 1) * h + h + 1 - a(i, j)
Next
Next
End Sub
Private Sub CommandButton2_Click()
Rows("6:1000").Select
Selection.ClearContents
Range("H2:H3").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
結構頭が混乱しますね。
2次元は、ループにしても配列にしても難しいのです。
解説は次話で行います。
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る