滝の音

滝の音

名こそ流れてなお聞こえけれ

計算プリントを自動生成する 一次方程式 その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回くらい投稿していますー。

次回は息抜きがてら、この企画をやっていて思うこと、反省などを書きます。