計算プリントを自動生成する 一次方程式 その4(計算プリントを生成)
はじめに
今回は今まで作った関数を組み合わせるだけです。
未知との互換性が高い関数が書ければめちゃくちゃ簡単な作業なのですが。
関数
ひながたB
まずは表現系から。
Sub ひながた_B() Randomize '------------------------------ '0. 扱う変数の定義 '------------------------------ Dim N As Integer '問題数を決める変数 Dim i As Integer '繰り返しの制御変数 Dim str() As String '計算式の文字列 '------------------------------ '1. 問題数の指定 '------------------------------ N = 4 For i = 1 To N '------------------------------ '2. 問題を指定して式を求める '------------------------------ str = Equation_Make_A() '------------------------------ '3. 出力 '------------------------------ Sheets("Sheet1").Activate Call Equation_Express(str, i) Next End Sub
Equation_Expression
いろいろ数値の調整が必要で見た目が散らかるため、サブ関数化しました。
Function Equation_Express(str, num) '------------------ '複数の式を出力 '------------------ '------------------ '変数の定義 '------------------ Dim i As Integer Dim inter As Integer Dim px As Integer Dim py As Integer Dim loc As Integer Dim tmp As Integer '------------------ '値の指定 '------------------ inter = UBound(str) - LBound(str) + 2 inter = inter * 30 + 10 px = (num - 1) Mod 2 px = 20 + px * 150 py = (num - 1) \ 2 py = py * inter loc = InStr(str(1), "=") '------------------- '挿入 '------------------- For i = LBound(str) To UBound(str) If str(i) = "" Then Exit For tmp = loc - InStr(str(i), "=") tmp = tmp * 10 Call Insert_Str(px + tmp, py + 30 * i, str(i)) Next End Function
Equation_Make_A
Function Equation_Make_A() As String() '------------------- '文字式の方程式を作成する '------------------- NN = 2 '------------------ '変数の定義 '------------------ Dim ope() As String '演算子 Dim kou() As Literal2 '数値 Dim ope_() As String 'hen作成のアシスト変数 Dim kou_() As Literal2 'hen作成のアシスト変数 Dim i As Integer '繰り返しの制御変数 Dim j As Integer '繰り返しの制御変数 Dim hen(1 To 2) As String '右辺と左辺 Dim str As String '第1式 ReSelect: ReDim kou(1 To 2, 1 To NN) ReDim ope(1 To 2, 1 To NN) '------------------ 'kou,opeを指定 '------------------ For i = 1 To 2 ReDim kou_(1 To NN) ReDim ope_(1 To NN) For j = 1 To NN Set kou(i, j) = Lit_Kou_Select(2, 1, 2) Set kou_(i) = kou(i, j) Next ope(i, 1) = "+" ope(i, 2) = "" Next '------------------ 'kouのチェック '------------------ flag = False flag = Equ_ReDo_Jdg(kou) If flag = True Then GoTo ReSelect '------------------ '数値の調整 '------------------ Call Equ_kou_Adjust(kou) '------------------ 'henの生成 '------------------ For i = 1 To 2 For j = 1 To NN Set kou_(j) = kou(i, j) ope_(j) = ope(i, j) Next hen(i) = Lit_Str_Make(kou_, ope_, 0) Next str = hen(1) & "=" & hen(2) '------------------ '戻り値 '------------------ Equation_Make_A = Equ_Analyze(str) End Function
ここに含まれているサブ関数は以前に書いた通りです。
ちょっぴり感想
なんだか。
泳いでいるときに息が苦しくなって。
そのせいで動きも息継ぎも悪くなってもっと苦しくなる。
そんないっぱいいっぱいな仕様になっています。
もっと優雅に泳げれば楽しいのかなと思います。
これはプログラミング技術がどうこうっていうより、もっと根幹にある問題だと思います。
チープに言えば「計画性」です。
ずっと体力をつける練習はしているけど、計画性を磨く練習はしていない気がします。
ってことを昔にも思ったはずなのですが。
まだまだ厳しいです。
まとめ
これで「一次方程式」はいったん終わりです。
この企画もだいぶ書き進めましたね。
たぶん50回くらい投稿していますー。
次回は息抜きがてら、この企画をやっていて思うこと、反省などを書きます。