滝の音

滝の音

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

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

はじめに

今回からしばらく文章題を扱います。
ノリとしては「計算プリントを自動生成する」と同じなのですが
文章題と計算プリントってちょっと違うよなーと思ってタイトルを変えました。

「計算プリント系」で書いたことを前提として進めていきます。

「その1」は慣らしです。
とりあえず取り組んでみて、どんなことを考えればいいかをとらえます。

手動でやってみる

とりあえず手動でやってみましょう。
自分で問題を一問生成します。

問題

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

解き方

3×100=300
よって300円。

文章題の生成について

とりあえず1問作ってみて思ったこと。

「問題文」と「解き方」の2つをつくる必要がある。
「問題文」は文字を乱数で並べたものではない。
「解き方」は問題文の意味を読み取って作る。

何もない状態から上のような問題を作成して、さらにその解き方を作成するのは難しそう。
なので、手動で作ったものの一部を書き換えることで生成をします。

自動でやってみる

今回は、りんごを別の果物に書き換えるコードにします。

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

'--------------------------
'変数の定義
'--------------------------
 Dim strA(1 To 2) As String '問題文
 Dim strB(1 To 2) As String '解き方
 Dim box As Variant         'くだもの
 Dim tmp As Integer         'くだものを選ぶ変数
 Dim trgt As String         '書き換え変数
 Dim i As Integer           '繰り返しの制御変数
'--------------------------
'問題文のひながた
'--------------------------
 strA(1) = "りんごが1個100円で売られています。"
 strA(2) = "りんごを3つ買う時の値段はいくらでしょう。 "
     
'--------------------------
'解き方のひながた
'--------------------------
 strB(1) = "3×100=300"
 strB(2) = "よって300円"
 
'--------------------------
'問題文を変更
'--------------------------
 box = Array("りんご", "みかん", "なし", "もも", "かき")
 tmp = Rnd_Num(0, UBound(box))
 trgt = box(tmp)
 
 For i = 1 To 2
    strA(i) = Replace(strA(i), "りんご", trgt)
 Next
 
'--------------------------
'Debug
'--------------------------
 For i = 1 To 2
 Debug.Print strA(i)
 Next
 
 For i = 1 To 2
 Debug.Print strB(i)
 Next
End Sub

とりあえずつらつらと。
一回動かしてみたら、「りんご」から「もも」に変わっていました笑

まとめ

文章の「解き方にかかわらない部分」の書き換えは思った以上に簡単でした。
次回はりんごの値段をと買う個数を書き換えてみましょう。