滝の音

滝の音

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

計算プリントを自動生成する その13_1 負の数(負の数どうし)(足し算と掛け算)

はじめに

今回は負の数を扱います。
ただしいろいろと制約が。。

今回の制約

タイトルに制約を書いてありますが、ここで改めて確認を。

負の数どうし

正の数と負の数では、計算式の文字列を作るときに処理が異なってしまいます。
まずは負の数で鳴らしましょう。

足し算と掛け算

引き算と割り算は、項を入れ替えるところでちょっと問題が生じます。
正の数と負の数を区別なく扱えるようになれば、おそらくここも解決されるはず。

自動でやってみる

Int_Minus_Calculation

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

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

'numの値の決定
'----------------------------------

 kou() = Int_Minus_Num_Select(version)

'----------------------------------
'引き算、割り算用の処理
'----------------------------------
 Select Case version
    Case Is = 1, 3
    Case Is = 2, 4
        tmp = kou(1)
        kou(1) = kou(3)
        kou(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", kou(1))
 ans = Replace(ans, "b", kou(2))
 ans = Replace(ans, "c", kou(3))

'----------------------------------
'文字列を戻す
'----------------------------------
 Int_Minus_Calculation = ans
End Function

「ans」の文字列の初期値が、正の数のみの時とは異なっています。
ここをもっとうまく制御できると正負どちらの数も扱えるのですが。

Int_Minus_Num_Select

Function Int_Minus_Num_Select(version) As String()
'-------------------
'変数の定義
'-------------------
 Dim num(1 To 3) As Integer   '計算式に入れる数値
 Dim ans(1 To 3) As String    '戻り値を入れる変数
 Dim i As Integer       '繰り返しの制御変数
 
'---------------------
'numの値の決定
'---------------------

 num(1) = Rnd_Num(-9, -1)
 num(2) = Rnd_Num(-9, -1)
    
 
'---------------------
'num3の値の決定
'---------------------
 Select Case version
    Case 1
        num(3) = num(1) + num(2)
    Case 3
        num(3) = num(1) * num(2)
  End Select
 
'---------------------
'ansの値の決定
'---------------------
 For i = 1 To 3
    ans(i) = num(i)
 Next
 Int_Minus_Num_Select = ans
 
End Function

偶然にも?「Rnd_Num」関数が負の数に対応していたので助かりました。

まとめ

コードを見ていて思いましたが、過去に書いたコメント文がそのまま残っていたりしますね。
本当はあまりよろしくないのですが、今後できたら気を付ける、くらいにしておきます。

気が向かないことはしない!

次回は制約を一部外します。 なんだか、制約って書くたびにハンターハンターが思い浮かびます笑