2007-12-19

行列の和

  1. 前回の回答

    Sub ベクトル()
    Dim n1 As Integer, n2 As Integer, i As Integer
    Dim x() As Single, y() As Single, z() As Single

    Sheets(1).Select
    i = 1
    Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
    i = i + 1
    Loop
    n1 = i - 1

    Sheets(2).Select
    i = 1
    Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
    i = i + 1
    Loop
    n2 = i - 1

    If n1 = n2 Then
    ReDim x(n1)
    ReDim y(n1)
    ReDim z(n1)

    Sheets(1).Select
    For i = 1 To n1
    x(i) = Selection.Cells(i, 1)
    Next i

    Sheets(2).Select
    For i = 1 To n1
    y(i) = Selection.Cells(i, 1)
    Next i

    For i = 1 To n1
    z(i) = x(i) + y(i)
    Next i

    Sheets(3).Select
    For i = 1 To n1
    Selection.Cells(i, 1) = z(i)
    Next i

    Else
    MsgBox ("ベクトルの型が異なるので足し算できません")
    End If

    End Sub

  2. 行列の足し算 ベクトルではなく次のように行列が入力されている場合について足し算するプログラムを書きましょう。
     +  → 

    このように、縦横の2つの方向に数字が並んでいるときには、それを記憶する配列も添え字が2つ必要です。
    Dim x(4,3) As Single
    と書くと、
    x(1,1), x(1,2), x(1,3)
    x(2,1), x(2,2), x(2,3)
    x(3,1), x(3,2), x(3,3)
    x(4,1), x(4,2), x(4,3)
    の12個が使えるようになります。(注:正確にはx(0,0)なども使えるので20個使えます)
    この配列にシートから数字を読み込むためには
    x(1,1)=Selection.Cells(1,1)
    x(2,1)=Selection.Cells(2,1)
    x(3,1)=Selection.Cells(3,1)
    x(4,1)=Selection.Cells(4,1)

    x(1,2)=Selection.Cells(1,2)
    x(2,2)=Selection.Cells(2,2)
    x(3,2)=Selection.Cells(3,2)
    x(4,2)=Selection.Cells(4,2)

    x(1,3)=Selection.Cells(1,3)
    x(2,3)=Selection.Cells(2,3)
    x(3,3)=Selection.Cells(3,3)
    x(4,3)=Selection.Cells(4,3)
    と書きますが、この書き方だと行列の成分の個数と同じ数だけプログラムを繰り返し書かなければなりません。 繰り返す部分をFor文を使ってまとめましょう。

    For i=1 to 4
    x(i,1)=Selection.Cells(i,1)
    Next i

    For i=1 to 4
    x(i,2)=Selection.Cells(i,2)
    Next i

    For i=1 to 4
    x(i,3)=Selection.Cells(i,3)
    Next i

    このようにすると少しはまとめることが出来ますが、まだまだ似たようなプログラムを3回書かなければなりません。

    For i=1 to 4
    x(i,1)=Selection.Cells(i,1)
    Next i

    この赤い部分だけが1, 2, 3と変わりながら繰り返されているので、さらにFor文を使って繰り返します。

    For j=1 to 3
     For i=1 to 4
      x(i,j)=Selection.Cells(i,j)
     Next i
    Next j

    このように書くと、Sheet1の行列を配列xに読み込むことが出来ました。

  3. 課題1:4行3列の行列の足し算を行うプログラムを完成させなさい。

    課題2:行列の型を調べて、行の数同士が等しく、列の数同士が等しい時だけ行列の足し算をし、そうでないときは「行列の型が異なるので足し算できません」と表示するプログラムを作ってください。If 文で条件が二つ以上あるときは、 And や Or を使います。

0 件のコメント: