滝の音

滝の音

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

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

はじめに

良いか悪いかはよくわかりませんが、個人的には1つのシステムに実装されている関数は、少ないほうが格好良いと思っています。
といっても実利はあまりないのですが。
モチベーションが下がらないという個人的な利はありますが。。

えっと。
というわけで引き算は新たに関数を増やさずに作ってみようと思います。

と思ったのですがちょっと内容が濃いので今回も2回に分けます。
今回はどうやって関数を増やすことなく引き算を実装するのかと
「Int_Subtraction」関数の実装をします。

え、関数増やしてるんじゃん。
って突っ込まないでください笑

引き算の実装の仕方

例えば1ケタの引き算を実装したい場合。
5-3=2
のような。

Num(1)を1~9
Num(2)を1~num(1)

のように設定することもできます。

がこれでは新たに「Int_Subtraction」と「Int_Subtraciton_Num_Select」の2つを作らなければならない。
さらにlevelの反映という、正直ダルい部分を考える手間があります。

これらの面倒を回避するために「Int_Addition」を少し書き換えることにしました。

自動でやってみる

先ほど書いた通り、「Int_Addition」を書き換えます。
一気に書き換えるとわかりにくいので、まずは便宜的に「Int_Subtraction」関数を書きます。

Function Int_Subtraction(level) As String
'----------------------------------
'整数の引き算の計算式を生成する
'----------------------------------

'----------------------------------
'扱う変数の定義
'----------------------------------
 Dim num() As Integer    '指定する数値
 Dim ans As String      'strに戻す値

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

'----------------------------------
'引き算用の処理
'----------------------------------
 Dim tmp As Integer '繰り返しの制御変数
 tmp = num(1)
 num(1) = num(3)
 num(3) = tmp
 
'----------------------------------
'計算式を文字列にする
'----------------------------------
 ans = "a-b=c"
 ans = Replace(ans, "a", num(1))
 ans = Replace(ans, "b", num(2))
 ans = Replace(ans, "c", num(3))
 
'----------------------------------
'文字列を戻す
'----------------------------------
 Int_Subtraction = ans
End Function

「Int_Addition」とだいたい同じ機能になっていることが分かりますか?
実際「Int_Addition_Num_Select」関数で数値の選択を行っています。

変わった部分は2つ。
引き算用の処理の追加。
Ansの値が「a+b=c」から「a-b=c」へ変更。

3+5=8
の3と5を入れ替えて+を-に変えると…
8-5=3
となります。

これを自動で行うのが、今回追加された処理です。

まとめ

関数を増やさないことが格好いい!
とか言ったのに関数を増やしちゃいました笑

このままでは恥ずかしいので次回に関数を一つ減らします。
具体的に言うと、「Int_Addition」と「Int_Subtraction」を統合して「Int_AddSub」関数を実装します。