2008-01-23

期末試験

  1. 前回の解答

    このブログでの説明どおりにプログラムを書くと次のようになります。

    Sub 連立一次方程式1()
    Dim x(3, 4) As Single
    Dim i As Integer, j As Integer, k As Integer, basho As Integer

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

    Sheets(2).Select
    For i = 1 To 3
     x(i, 4) = Selection.Cells(i, 1)
    Next i

    Sheets(3).Select
    basho = 1
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    Rem (1,1)成分を1にするために第一行を(1,1)成分で割るプログラムを書いてください。

    k = x(1, 1)

    For j = 1 To 4
     x(1, j) = x(1, j) / k
    Next j

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    Rem (2,1)成分を0にするために第2行から第1行×(2,1)成分を引きます。

    k = x(2, 1)

    For j = 1 To 4
     x(2, j) = x(2, j) - x(1, j) * k
    Next j

    Rem (3,1)成分を0にするために第3行から第1行×(3,1)成分を引きます

    k = x(3, 1)

    For j = 1 To 4
     x(3, j) = x(3, j) - x(1, j) * k
    Next j

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    Rem (2,2)成分を1にするために第2行を(2,2)成分で割ります

    k = x(2, 2)

    For j = 1 To 4
     x(2, j) = x(2, j) / k
    Next j

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    Rem (1,2)成分を0にするために第1行から第2行×(1,2)成分を引きます

    k = x(1, 2)

    For j = 1 To 4
     x(1, j) = x(1, j) - x(2, j) * k
    Next j

    Rem (3,2)成分を0にするために第3行から第2行×(3,2)成分を引きます

    k = x(3, 2)

    For j = 1 To 4
     x(3, j) = x(3, j) - x(2, j) * k
    Next j

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    Rem (3,3)成分を1にするために第3行を(3,3)成分で割ります

    k = x(3, 3)

    For j = 1 To 4
     x(3, j) = x(3, j) / k
    Next j

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    Rem(1,3)成分を0にするために第1行から第3行×(1,3)成分を引きます

    k = x(1, 3)

    For j = 1 To 4
     x(1, j) = x(1, j) - x(3, j) * k
    Next j

    Rem (2,3)成分を0にするために第2行から第3行×(2,3)成分を引きます

    k = x(2, 3)

    For j = 1 To 4
     x(2, j) = x(2, j) - x(3, j) * k
    Next j

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    End Sub

  2. 発展課題の解答

    レポート課題が出来た人には、似たようなことを繰り返し書いている部分をFor文を使ってまとめるプログラムを考えてもらいました。

    Sub 連立一次方程式2()

    Dim x(3, 4) As Single, i As Integer, j As Integer, k As Integer, basho As Integer

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

    Sheets(2).Select
    For i = 1 To 3
     x(i, 4) = Selection.Cells(i, 1)
    Next i


    Sheets(3).Select
    basho = 1
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i


    For i = 1 To 3
     For k = i + 1 To 4
      x(i, k) = x(i, k) / x(i, i)
     Next k
     x(i, i) = 1
     For j = 1 To 3
      If i <> j Then
       For k = i + 1 To 4
        x(j, k) = x(j, k) - x(i, k) * x(j, i)
       Next k
       x(j, i) = 0
      End If
     Next j
    Next i

    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
     For j = 1 To 4
      Selection.Cells(i, j) = x(i, j)
     Next j
    Next i

    End Sub

  3. 期末試験

    Sheet1に書かれた行列の行の数と列の数を数えて、その転置行列、つまり行と列を入れ替えた行列をSheet2に出力するプログラムを書きなさい。
    例えば、Sheet1に

    12
    34
    56
    と書かれていたら、Sheet2に
    135
    246
    と出力するプログラムです。

0 件のコメント: