計算プリントを自動生成する その4_2 いろいろな足し算(本番)
はじめに
前回、その4_1で関数を変更、追加しました。
今回はいよいよ「いろいろな足し算」を実装します。
足し算の種類
- 繰り上がりなしの1ケタどうしの足し算
- 繰り上がりありの1ケタどうしの足し算
- 制約なしの1ケタどうしの足し算
- 繰り上がりなしの2ケタ+1ケタ
- 繰り上がりありの2ケタ+1ケタ
- 繰り上がりなしの2ケタ+2ケタ
- 1の位が繰り上がる2ケタ+2ケタ
1と3はすでに作っているので、今回作るのはそれ以外です。
自動化してみる
levelと難度の対応
コードを書く前に変数「level」と足し算の種類を対応付けましょう。
level | 足し算の種類 |
---|---|
1 | 繰り上がりなし、1ケタ+1ケタ |
2 | 繰り上がりあり、1ケタ+1ケタ |
3 | 制約なし、2ケタ+1ケタ |
4 | 繰り上がりなし、2ケタ+1ケタ |
5 | 繰り上がりあり、2ケタ+1ケタ |
6 | 繰り上がりなし、2ケタ+2ケタ |
7 | 1の位繰り上がり、2ケタ+2ケタ |
Int_Addition_Num_Selectを書く
前回のコードを書き換えます。
具体的にはSelect Caseを追加してlevelによるnumの設定の変更を実装します。
Function Int_Addition_Num_Select(level) As Integer() '------------------- '変数の定義 '------------------- Dim num() As Integer '計算式に入れる数値 Dim N() As Integer 'num1を作るための変数 Dim M() As Integer 'num2を作るための変数 Dim i As Integer '繰り返しの制御変数 '------------------- 'numの数を決定 '------------------- ReDim num(1 To 3) ReDim N(1 To 2) ReDim M(1 To 2) '------------------- 'N,Mの数値を決定 '------------------- Select Case level Case Is = 1 '1_1繰り上がりなし N(1) = Rnd_Num(1, 8) M(1) = Rnd_Num(1, 9 - N(1)) Case Is = 2 '1_1繰り上がりあり N(1) = Rnd_Num(1, 9) M(1) = Rnd_Num(10 - N(1), 9) Case Is = 3 '1_1制約なし N(1) = Rnd_Num(1, 9) M(2) = Rnd_Num(1, 9) Case Is = 4 '2_1繰り上がりなし N(1) = Rnd_Num(0, 8) N(2) = Rnd_Num(1, 9) M(1) = Rnd_Num(1, 9 - N(1)) Case Is = 5 '2_1繰り上がりあり N(1) = Rnd_Num(1, 9) N(2) = Rnd_Num(1, 8) M(1) = Rnd_Num(10 - N(1), 9) Case Is = 6 '2_2繰り上がりなし N(1) = Rnd_Num(0, 8) N(2) = Rnd_Num(1, 8) M(1) = Rnd_Num(0, 9 - N(1)) M(2) = Rnd_Num(1, 9 - N(2)) Case Is = 7 '2_2繰り上がり1 N(1) = Rnd_Num(1, 9) N(2) = Rnd_Num(1, 7) M(1) = Rnd_Num(1, 9 - N(1)) M(2) = Rnd_Num(1, 9 - N(2)) End Select '--------------------- 'numの値の決定 '--------------------- For i = 1 To 2 num(1) = num(1) + N(i) * 10 ^ (i - 1) num(2) = num(2) + M(i) * 10 ^ (i - 1) Next num(3) = num(1) + num(2) Int_Addition_Num_Select = num End Function
ふぅ。
この部分を書くのはちょっと疲れました。
試行錯誤した結果、変数N,Mを導入することにしました。
まとめ
「Int_Addition_Num_Select」はもっとシンプルな書き方があるかもしれません。
昔に「Nケタ+Mケタでkの位を繰り上がりさせる計算式」を書いたことがあるのですが
もしかしたらそちらを使ったほうが良かったのか。。
ちょっと課題は残りましたが保留で。
とにかくこれで足し算は終わりです。
次回は掛け算をやりましょう。