滝の音

滝の音

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

文章問題を自動生成する その1_2 りんごの値段は? (数値を変更)

はじめに

前回は文章題の「解き方にかかわらない部分」を書き換えました。
今回は「解き方にかかわる部分」を書き換えてみます。

ひながたの問題

書き換えるもとになる文章です。

問題

りんごが1個100円で売られています。
りんごを3つ買う時の値段はいくらでしょう。

解き方

3×100=300
よって300円。

自動でやってみる

今回は「問題文」と「解き方」の両方を書き換える必要があります。
さらに「解き方」では数値の再計算をする必要があります。

Sub 文章題生成_2()
'--------------------------
'文章第の一部を書き換える
'--------------------------

'--------------------------
'変数の定義
'--------------------------
 Dim strA(1 To 2) As String '問題文
 Dim strB(1 To 2) As String '解き方
 Dim num(1 To 3) As Integer '入れ替え用の変数
 Dim trgt As String         '入れ替え用の変数
 Dim i As Integer           '繰り返しの制御変数
 Dim j As Integer           '繰り返しの制御変数
 
'--------------------------
'問題文のひながた
'--------------------------
 strA(1) = "りんごが1個num1円で売られています。"
 strA(2) = "りんごをnum2つ買う時の値段はいくらでしょう。 "
     
'--------------------------
'解き方のひながた
'--------------------------
 strB(1) = "num1×num2=num3"
 strB(2) = "よってnum3円"
 
'--------------------------
'問題文を変更
'--------------------------
 num(1) = Rnd_Num(1, 5) * 10 + 100
 num(2) = Rnd_Num(3, 7)
 num(3) = num(1) * num(2)
 
 
 For i = 1 To 3
    trgt = "num" & i
    For j = 1 To 2
        strA(j) = Replace(strA(j), trgt, num(i))
        strB(j) = Replace(strB(j), trgt, num(i))
    Next
 Next
 
 
'--------------------------
'Debug
'--------------------------
 For i = 1 To 2
 Debug.Print strA(i)
 Next
 
 For i = 1 To 2
 Debug.Print strB(i)
 Next
End Sub

ひながたとなる文章の一部を変更しました。
書き換えたい部分をあらかじめマークしておくと、簡単に処理できるみたいです。

生成結果

せっかくなので生成された文章を載せておきます。

りんごが1個130円で売られています。
りんごを4つ買う時の値段はいくらでしょう。

130×4=520
よって520円

まとめ

簡単な文章題を一問だけ手動で作れば、それに似た問題を自動生成できるようになりました。
意外と簡単でしたね。

次回はひながたの文章と書き換えた文章の管理について書きます。