滝の音

滝の音

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

計算プリントを自動生成する その7_2 引き算を考える(Int_AddSubの実装)

はじめに

前回「Int_Subtraction」を書きましたが
今回はこれを「Int_Addition」と統合します。

AdditionとSubtracitonの頭3文字をとって「Int_AddSub」関数を!

統合する準備

「Int_AddSub」には作ってほしい計算式が足し算なのか引き算なのか教える必要があります。
なので新たな変数「version」を設けます。
この変数は「level」を足した時と同様に「ひながた」で制御します。

あとは「version」の値と条件分岐でこなします。

自動化してみる

ひながた

Sub ひながた()

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

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

End Sub

Int_AddSub

Function Int_AddSub(version, level) As String
'----------------------------------
'整数の計算式を生成する
'version=1は足し算
'version=2は引き算
'----------------------------------

'----------------------------------
'扱う変数の定義
'----------------------------------
 Dim num() As Integer    '指定する数値
 Dim tmp As Integer      'numを入れ替えるための変数
 Dim ans As String       'strに戻す値

'----------------------------------
'numの値の決定
'----------------------------------
 num() = Int_AddSub_Num_Select(level)

'----------------------------------
'引き算用の処理
'----------------------------------
 If version = 2 Then
    tmp = num(1)
    num(1) = num(3)
    num(3) = tmp
 End If
 
'----------------------------------
'計算式を文字列にする
'----------------------------------
 Select Case version
    Case Is = 1
        ans = "a+b=c"
    Case Is = 2
        ans = "a-b=c"
 End Select

 ans = Replace(ans, "a", num(1))
 ans = Replace(ans, "b", num(2))
 ans = Replace(ans, "c", num(3))
 
'----------------------------------
'文字列を戻す
'----------------------------------
 Int_AddSub = ans
End Function

引き算用の処理をこの関数で行うか一つ下の関数で行うか迷いました。
とりあえず保留でこの関数で行っています。

Int_AddSub_Num_Select

これは「Int_Addition_Num_Select」関数と同じなのですが、命名法にのっとって名前だけ変えました。

まとめ

あらためて見返すと「Int_Addition_Num_Select」での難度の反映の仕方がちょっとまどろっこしい気がしますね。

あと、この体制だと3-5=-2のような計算式が出せないことに気づいてしまいました。
さらに言うとnum(1)=-5のようなことも現状ではできませんね。。

この問題はあとで絶対にぶつかりますがとりあえず保留。

次回は割り算の計算を扱います。
とりあえず整数(正確には自然数)の四則の計算を扱えるようにしましょう。