滝の音

滝の音

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

計算プリントを自動生成する その11 整数3つの四則の計算(a+b×c)

はじめに

整数2つの四則の計算と、それを作るうちに生じた課題を前回までにまとめました。
今回は整数3つの四則の計算です。

今回はとりあえず「a+b×c」を実装します。

手順

  1. 整数を3つ選ぶ
  2. a+b×cの答えを求める
  3. 計算式をつくる

手動でやってみる

手順 数字
整数を3つ選ぶ 3,5,7
a+b×cの答えを求める 38
計算式をつくる 3+5×7=38

自動でやってみる

ひながた_Limited

まずは演算子を2つ用意しないといけないので、変数「version」を配列にします。
今回は「a+b×c」に限っているので、関数の語尾に_Limitedをつけます。

Sub ひながた_Limited()

'------------------------------
'0. 扱う変数の定義
'------------------------------
 Dim N As Integer       '問題数を決める変数
 Dim NN As Integer      '扱う数字の個数
 Dim version() As Integer '計算の種類を決める変数
 Dim level As Integer   '難度を決める変数
 Dim i As Integer       '繰り返しの制御変数
 Dim str As String      '計算式の文字列

'------------------------------
'1. 問題数の指定
'------------------------------
 N = 10
 
 For i = 1 To N
    '------------------------------
    '2. 問題を指定して式を求める
    '------------------------------
    NN = 3
    ReDim version(1, NN - 1)
    version(1) = 1
    version(2) = 3
    level = 1
    
    str = Int_Calculation_Limited(NN, version, level)
 
    '------------------------------
    '3. 出力
    '------------------------------
    Call Insert_Equation(20, 30 * i, str)
 Next

End Sub

Int_Calculation_Limited

Function Int_Calculation_Limited(NN, version, level) As String

'----------------------------------
'扱う変数の定義
'----------------------------------

 Dim num() As Integer       '指定する数値
 Dim ans As String          'strに戻す値

'----------------------------------
'numの値の決定
'----------------------------------
 num() = Int_Calculation_Num_Select_Limited(NN)
 
'----------------------------------
'計算式を文字列にする
'----------------------------------
 ans = "num1+num2×num3=num4"
 
 For i = 1 To NN + 1
    ans = Replace(ans, "num" & i, num(i))
 Next
 
'----------------------------------
'文字列を戻す
'----------------------------------
 Int_Calculation_Limited = ans
End Function

一番の特徴は、計算式を文字列にする箇所です。
いままで「a+b=c」だった部分を「num1+num2×num3=num4」にしています。

Int_Calculation_Num_Select_Limited

Function Int_Calculation_Num_Select_Limited(NN) As Integer()

'--------------------------
'変数の定義
'--------------------------
 Dim num() As Integer
 Dim i As Integer
 
 ReDim num(1 To NN + 1)
'--------------------------
'numの決定
'--------------------------

 For i = 1 To NN
    num(i) = Rnd_Num(1, 9)
 Next
 
 num(4) = num(1) + num(2) * num(3)
 
 Int_Calculation_Num_Select_Limited = num

End Function

今回は限定版なのでとりあえず1ケタの数字を3つランダムに選択することにしました。

まとめ

次回以降にLimitedを外していこうと思っていたのですが
ちょっと思ったより難しそうなので「整数3つの四則の計算」はここでいったん凍結します。

これを進めるには少なくとも
「分数の計算」と「負の数の計算」が必要みたいなので
次回以降はそれらに取り組みます。