計算プリントを自動生成する 一次方程式 その2 (解析関数)
はじめに
おなじみの流れです。
最初に問題を生成する関数をつくって。
次に問題を解析する関数を書きます。
手動でやってみる
2a+5=4a-1
-2a=-6
a=3
2列目の式を「-2a=」とするか「2a=」とするかは流派がありそうですね。
自分は後者なのですが、前者のほうがややこしくないかなとも思います。
自動でやってみる
Function Equation_Analyze() Dim str As String Dim equ() As String Dim ans() As Literal2 Dim ope() As String Dim tmp As Integer Dim trgt As String str = "a+5=3a+5" ReDim equ(1 To 3) equ(1) = str '------------------- 'strを修正 '------------------- tmp = InStr(str, "=") For i = tmp To Len(str) trgt = Mid(str, i, 1) Select Case trgt Case Is = "=", "+" str = left(str, i - 1) & "-" & Mid(str, i + 1) Case Is = "-" str = left(str, i - 1) & "+" & Mid(str, i + 1) End Select Next ans = Lit_Str_Analyze(str) ReDim ope(LBound(ans) To UBound(ans)) For i = LBound(ans) To UBound(ans) - 1 ope(i) = "+" Next equ(2) = Lit_Str_Make(ans, ope, 0) equ(2) = Replace(equ(2), "-", "=") equ(2) = Replace(equ(2), "+", "=-") If ans(1).Va = 0 Then equ(2) = equ(2) & "=0" End If ans(1).Vb = ans(1).Vb * ans(0).Va ans(0).Va = 1 equ(3) = Lit_Str_Make(ans, ope, 0) equ(3) = Replace(equ(3), "-", "=") equ(3) = Replace(equ(3), "+", "=-") If ans(1).Va = 0 Then equ(3) = equ(3) & "=0" End If End Function
腕力でつくっちゃいました。
せっかく作った「Lit_Str_Analyze」を使えないかなーと考えたらこんな風になりました。
0への処理はもうちょっとうまくできる気もしますが、今回は保留で。
まとめ
だいたい今までの流れでは。
その時に作れるギリギリのものを作って2,3日眠ると。
それと全然違うもっと良いものを思いついたりするので。
今日の関数はそのための供物みたいなものです。
なんで供物のフェイズを省略できないのかは謎です。
次回は「値の調整」をします。