第7講 配列の学習
第6話 転置・逆転置・対称変換等の解答例
コード例
Dim a(100, 100) As Integer 'グローバル配列
Private Sub CommandButton1_Click()
Dim n As Byte
n = Cells(2, 8)
f0 n '自然配列の生成
f1 n '自然配列の表示
f2 n '自然配列の転置(縦・横交換)の表示
f3 n '逆自然配列の表示
f4 n '逆自然配列転置の表示
f5 n '自然配列の逆転置の表示
f6 n '自然配列のx軸対称配列の表示
f7 n '自然配列のy軸対称配列の表示
f8 n '自然配列の逆転値のy軸対称配列の表示
End Sub
'自然配列の生成
Sub f0(n As Byte)
Dim i As Byte, j As Byte
For i = 0 To n - 1
For j = 0 To n - 1
a(i, j) = n * i + j + 1
Next
Next
End Sub
'自然配列の表示
Sub f1(n As Byte)
Dim i As Byte, j As Byte
Cells(6, 1) = "自然配列"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(7 + i, 1 + j) = a(i, j)
Next
Next
End Sub
'自然配列の転置の表示
Sub f2(n As Byte)
Dim i As Byte, j As Byte
Cells(6, 3 + n) = "自然配列の転置"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(7 + i, 3 + j + n) = a(j, i)
Next
Next
End Sub
'逆自然配列の表示
Sub f3(n As Byte)
Dim i As Byte, j As Byte
Cells(6, 5 + n + n) = "逆自然配列"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(7 + i, 5 + j + n + n) = (n - 1) * n + n + 1 - a(i, j)
Next
Next
End Sub
'逆自然配列転置の表示
Sub f4(n As Byte)
Dim i As Byte, j As Byte
Cells(6, 7 + n + 2 * n) = "逆自然配列の転置"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(7 + i, 7 + j + n + 2 * n) = (n - 1) * n + n + 1 - a(i, j)
Next
Next
End Sub
'自然配列の逆転置の表示
Sub f5(n As Byte)
Dim i As Byte, j As Byte
Cells(8 + n, 1) = "自然配列の逆転置"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(9 + i + n, 1 + j) = a(n - 1 - j, n - 1 - i)
Next
Next
End Sub
'自然配列のx軸対称配列の表示
Sub f6(n As Byte)
Dim i As Byte, j As Byte
Cells(8 + n, 3 + n) = "自然配列のx軸対称配列"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(9 + i + n, 3 + j + n) = a(i, n - 1 - j)
Next
Next
End Sub
'自然配列のy軸対称配列の表示
Sub f7(n As Byte)
Dim i As Byte, j As Byte
Cells(8 + n, 5 + 2 * n) = "自然配列のy軸対称配列"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(9 + i + n, 5 + j + 2 * n) = a(n - 1 - i, j)
Next
Next
End Sub
'自然配列の逆転値のy軸対称配列の表示
Sub f8(n As Byte)
Dim i As Byte, j As Byte
Cells(8 + n, 7 + 3 * n) = "自然配列の逆転置のy軸対称配列"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(9 + i + n, 7 + j + 3 * n) = a(n - 1 - j, i)
Next
Next
End Sub
逆転置、頭が爆発しそうになりませんでしたか。
を中心に対して、点対称移動して
から、転置すればよいのです。
点対称移動するには a(n - 1 - i, n - 1 - j)ですから、逆転置はa(n - 1 - j, n - 1 - i)です。
さて、課題を出してこの話を閉めましょう。
今回、転置・逆転置・対称変換などを、
2次元配列Dim a(100, 100) As Integerを使って考えましたが、
実は、1次元配列でも出来ます。考えてみましょう。
解答は、後に多次元配列と1次元配列の関係という講を設ける予定になっていますので、
その講で行います。
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る