計算プリントを自動生成する 一次方程式 その1 (問題の自動生成)
はじめに
「方程式」の第一段は「一次方程式」です。
これは昔に何度か扱ったことがあるのですが、今回はそれとは違うアプローチでやりたいですね。
手動で生成してみる
3x+5=x-1
適当に作ってみました。
今までとの違いは3つ。
生成する文字列中に”=”が存在する
文字と数字が少なくとも1項ずつあってほしい
方程式として成立する項の組み合わせであってほしい
このあたりが最初のとっかかりです。
自動で生成する
とりあえず第一案として。
Equation_Make_A
Formula_Make系の方程式バージョンです。
Function Equation_Make_A() As String '------------------- '文字式の方程式を作成する '------------------- NN = 2 '------------------ '変数の定義 '------------------ Dim ope() As String '演算子 Dim kou() As Literal2 '数値 Dim ope_() As String Dim kou_() As Literal2 Dim i As Integer '繰り返しの制御変数 Dim j As Integer '繰り返しの制御変数 Dim str(1 To 2) As String '右辺と左辺 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 '------------------ 'strの生成 '------------------ For i = 1 To 2 For j = 1 To NN Set kou_(j) = kou(i, j) ope_(j) = ope(i, j) Next str(i) = Lit_Str_Make(kou_, ope_) str(i) = Replace(str(i), "(", "") str(i) = Replace(str(i), ")", "") str(i) = Replace(str(i), "+-", "-") Next '------------------ 'strを生成 '------------------ Equation_Make_A = str(1) & "=" & str(2) End Function
Equ_ReDo_Jdg
基本的にこれを強化していくことになりそう。
Function Equ_ReDo_Jdg(kou) As Boolean '---------------- 'kouが適当かチェック '---------------- '---------------- '変数の定義 '---------------- Dim i As Integer '繰り返しの制御変数 Dim j As Integer '繰り返しの制御変数 Dim cnt As Integer '判断のアシスト変数 '---------------- '判断 '---------------- cnt = 0 For i = 1 To UBound(kou, 1) For j = 1 To UBound(kou, 2) If kou(i, j).La <> "" Then cnt = cnt + 1 stock = stock + kou(i, j).Va * (-1) ^ i End If Next Next 'If cnt = 0 Or cnt = UBound(kou, 1) * UBound(kou, 2) Then If cnt <> UBound(kou, 2) Then Equ_ReDo_Jdg = True End If If stock = 0 Then Equ_ReDo_Jdg = True End If End Function
今回は「文字を持つ項が全体の半分」であり「方程式を整理しても文字を持つ項が残る」ことを条件としています。
まとめ
全体的にまだしっくりとは来ていないのですが、これをたたき台として作っていきます。
次回は「解析関数」を作りましょう。