滝の音

滝の音

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

計算プリントを自動生成する その9 整数の四則の計算

はじめに

その7からしばらく新たな関数を作っていません。
今回もやはり新しい関数は書きません。

そろそろ書きたいですね笑

Int_AddSubとInt_MulDiv

この二つの関数はほとんど機能が似ています。

  1. 数値を下位の関数で決めてくる
  2. 場合によっては数値を入れ替える
  3. 計算式の文字列を作成する

この中に「足し算ならではのこと」や「割り算で起こりうる例外」は含まれません。
そういった専門的なところは「~~_Num_Select」関数で処理しているためです。

これらはちょっとしたベルトコンベアというか。
ようは流すだけの関数です。

なのでこの2つは統合してしまいましょう。

Int_Calculation

「Int_AddSub」や「Int_MulDiv」の作り方と一緒です。

Function Int_Calculation(version, level) As String
'----------------------------------
'整数の計算式を生成する
'version=1は足し算
'version=2は引き算
'version=3は掛け算
'version=4は割り算
'----------------------------------

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

'numの値の決定
'----------------------------------
 Select Case version
    Case Is = 1, 2
        num() = Int_AddSub_Num_Select(level)
    Case Is = 3, 4
        num() = Int_MulDiv_Num_Select(level)
 End Select
 
'----------------------------------
'引き算、割り算用の処理
'----------------------------------
 Select Case version
    Case Is = 1, 3
    Case Is = 2, 4
        tmp = num(1)
        num(1) = num(3)
        num(3) = tmp
 End Select
 
'----------------------------------
'計算式を文字列にする
'----------------------------------
 Select Case version
    Case Is = 1
        ans = "a+b=c"
    Case Is = 2
        ans = "a-b=c"
    Case Is = 3
        ans = "a×b=c"
    Case Is = 4
        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_Calculation = ans
End Function

ちょちょっと条件分岐を足すだけです。

まとめ

これで整数の四則の計算はクリアです。
たとえばversion-Rnd_Num(1,4)とすると
四則の計算がランダムに表れるプリントが作れます。

今回分かったことは。
うまいこと表の面を作ってあげれば、それに対応する裏の面は簡単に引き出せるということ。
骨格の部分は想像以上に使いまわしができるということ。

次回は先に進む前に「今回は保留です」と言っていた箇所をまとめておきましょう。
それらをその場では解決しませんが、どうやったら解決できそうかくらいは考えます。
一段落ついたのでちょっと息抜きの回です。