計算プリントを自動生成する その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」関数が負の数に対応していたので助かりました。
まとめ
コードを見ていて思いましたが、過去に書いたコメント文がそのまま残っていたりしますね。
本当はあまりよろしくないのですが、今後できたら気を付ける、くらいにしておきます。
気が向かないことはしない!
次回は制約を一部外します。 なんだか、制約って書くたびにハンターハンターが思い浮かびます笑