文章問題を自動生成する その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
とりあえずつらつらと。
一回動かしてみたら、「りんご」から「もも」に変わっていました笑
まとめ
文章の「解き方にかかわらない部分」の書き換えは思った以上に簡単でした。
次回はりんごの値段をと買う個数を書き換えてみましょう。