計算プリントを自動生成する その12_2 分数の計算
はじめに
前回は分数クラスを作成しました。
今回はそれを使って分数の計算を実装します。
自動でやってみる
いきなり四則の計算を想定して書きます。
クラスモジュール
これは前回書いた通りです。
Fra_Calculation
Function Fra_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 'numを入れ替えるための変数 '---------------------------------- 'kouの値の決定 '---------------------------------- kou() = Fra_Num_Select(version) '---------------------------------- '計算式を文字列にする '---------------------------------- 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)) '---------------------------------- '文字列を戻す '---------------------------------- Fra_Calculation = ans End Function
これは「Int_Calculation」とほとんどおなじコードです。
「Num_Select」系の関数からの戻り値をString型にしたところが変更点です。
ちなみに「Fra」は「Fraction」の頭三文字です。
Fra _Num_Select
戻り値の型をStringにしたことで少し意味合いが変わりました。
Num_SelectよりもTerm_Makeのほうが近いかもしれませんね。
しばらくは名残でそのままの名前にしておきます。
Function Fra_Num_Select(version) As String() '------------------------ '変数の定義 '------------------------ Dim kou(1 To 3) As Fraction '分数 Dim swt As Integer Dim ans(1 To 3) As String '戻り値用の変数 '------------------------ 'kouの値を仮決め '------------------------ Set kou(1) = New Fraction Set kou(2) = New Fraction Set kou(3) = New Fraction kou(1).Va = Rnd_Num(1, 3) kou(1).Vb = Rnd_Num(3, 8) kou(2).Va = Rnd_Num(1, 3) kou(2).Vb = Rnd_Num(1, 3) * kou(1).Vb '------------------------- 'versionを反映してkou1,2を本決定 '------------------------- Select Case version Case Is = 1 Case Is = 2 If kou(1).Va * kou(2).Vb - kou(1).Vb * kou(2).Va < 0 Then swt = kou(1).Va kou(1).Va = kou(2).Va kou(2).Va = swt swt = kou(1).Vb kou(1).Vb = kou(2).Vb kou(2).Vb = swt End If Case Is = 3 swt = kou(2).Va kou(2).Va = kou(2).Vb kou(2).Vb = swt Case Is = 4 End Select '------------------------- 'kou3を決定 '------------------------- Select Case version Case Is = 1 kou(3).Va = kou(1).Va * kou(2).Vb + kou(1).Vb * kou(2).Va kou(3).Vb = kou(1).Vb * kou(2).Vb Case Is = 2 kou(3).Va = kou(1).Va * kou(2).Vb - kou(1).Vb * kou(2).Va kou(3).Vb = kou(1).Vb * kou(2).Vb Case Is = 3 kou(3).Va = kou(1).Va * kou(2).Va kou(3).Vb = kou(1).Vb * kou(2).Vb Case Is = 4 kou(3).Va = kou(1).Va * kou(2).Vb kou(3).Vb = kou(1).Vb * kou(2).Va End Select '------------------------------ 'kouの約分 '------------------------------ kou(1).Fit kou(2).Fit kou(3).Fit '------------------------------ '戻り値を決定 '------------------------------ ans(1) = kou(1).Str ans(2) = kou(2).Str ans(3) = kou(3).Str Fra_Num_Select = ans End Function
こちらは整数の時とはだいぶ違う仕様にしました。
とくに引き算や割り算。
計算前に値を調整するタイプに変えました。
まとめ
これらを組み合わせることでとりあえず分数の四則の計算が実装されました。
難度設定は、正直やっていて頭が痛くなるので保留します。
第12回までやってみてなんとなく気づきました。
あんまり気が乗らないものを義務感で行うとモチベーションが下がって、コードを書くこと自体がおっくうになってしまうことに。
めんどくさいなと感じたものはどんどん保留なり凍結なりして
「最初の願い」を失わいようにしたいなぁと思います。
次回は負の数。
次々回は3数の計算のリベンジ。
こんな流れで行きます。