2006-12-13

第12回講義:連立一次方程式第2回

このテーマは奥が深いので、今後の課題を紹介しておきます。まずは焦らず前回の課題に取り組んでください。

式の数、未知数の数が4個になると前回のプログラムは使えません。
折角作ったプログラムですので、式の数が増えても使えるようにしましょう。

今回はその準備として、似たような処理を繰り返し書いている部分をFor文を使って1回書くだけで済ませましょう。

Sub 連立一次方程式2()
Dim x(3, 4) As Single
Dim i As Integer, j 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)成分で割るプログラムを書いてください。

Rem (2,1)成分を0にするために第二行から第一行の(2,1)成分倍を引くプログラムを書いてください。
Rem (3,1)成分を0にするために第三行から第一行の(3,1)成分倍を引くプログラムを書いてください。

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

Rem (1,2)成分を0にするために第一行から第二行の(1,2)成分倍を引くプログラムを書いてください。
Rem (3,2)成分を0にするために第三行から第二行の(3,2)成分倍を引くプログラムを書いてください。

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

Rem (1,3)成分を0にするために第一行から第三行の(1,3)成分倍を引くプログラムを書いてください。
Rem (2,3)成分を0にするために第二行から第三行の(2,3)成分倍を引くプログラムを書いてください。

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箇所の色をつけた部分は、それぞれ2回ずつ殆ど似たようなことを書いていますよね。 これをFor文でまとめたいと思います。

Rem (2,1)成分を0にするために第二行から第一行の(2,1)成分倍を引くプログラムを書いてください。
Rem (3,1)成分を0にするために第三行から第一行の(3,1)成分倍を引くプログラムを書いてください。

For p=2 to 3
Rem (p,1)成分を0にするために第p行から第一行の(p,1)成分倍を引くプログラムを書いてください。
Next p

と書けば良いですし、

Rem (1,3)成分を0にするために第一行から第三行の(1,3)成分倍を引くプログラムを書いてください。
Rem (2,3)成分を0にするために第二行から第三行の(2,3)成分倍を引くプログラムを書いてください。

For p=1 to 2
Rem (p,3)成分を0にするために第p行から第三行の(p,3)成分倍を引くプログラムを書いてください。
Next p

と書けば良いです。では

Rem (1,2)成分を0にするために第一行から第二行の(1,2)成分倍を引くプログラムを書いてください。
Rem (3,2)成分を0にするために第三行から第二行の(3,2)成分倍を引くプログラムを書いてください。

の部分はどうすればよいか、考えてみてください。

0 件のコメント: