第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次元配列の関係という講を設ける予定になっていますので、
その講で行います。

第5話へ 第8講第1話へ

004


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

数学研究室に戻る