計算プリントを自動生成する その14_1 3数の計算 (ランダム作成関数)
はじめに
リベンジです。
じつは「3数の計算」はその11で扱いました。
当時は力不足で凍結するに至りましたが
今回は何とかなりそうなので再び着手。
今回は「ランダム作成関数」について書きます。
ランダム作成関数とは
いままでとは全然違う考え方をします。
今までは数値の選び方にかなり気を使っていました。
望んだタイプの答えが出るように各項の値を設定していました。
ただそれだと、演算子が複数入るパターンの計算式をつくるのがめちゃくちゃ大変になります。
なので今回はかなり割り切りました。
適当に計算式を作成して、その答えを求める。
答えの値に不満があれば各項の値を適当に修正して、もう一度答えを求める。
というやり方。
コード
ランダムとはいえ、各項の初期値はなんとなく決められます。
なので今回は各項を正の数で設定します。
値と演算子はランダムで。
Function Int_Rnd_Str(NN) As String '------------------ '変数の定義 '------------------ Dim ope() As String '演算子 Dim num() As Integer '数値 Dim i As Integer '繰り返しの制御変数 Dim box As Variant '演算子決定のアシスト変数 Dim tmp As Integer '演算子決定のアシスト変数 Dim ans As String '戻り値 '------------------ 'opeとnumの配列数を指定 '------------------ ReDim ope(1 To NN) ReDim num(1 To NN) '------------------ 'boxの指定 '------------------ box = Array("+", "-", "×", "÷") '------------------ 'opeとnumの値を指定 '------------------ For i = 1 To NN - 1 tmp = Rnd_Num(0, 3) If tmp = 3 Then tmp = Rnd_Num(0, 3) ope(i) = box(tmp) Next For i = 1 To NN num(i) = Rnd_Num(1, 9) If num(i) = 1 Then num(i) = Rnd_Num(1, 9) Next '------------------ 'ansの作成 '------------------ For i = 1 To NN ans = ans & num(i) & ope(i) Next Int_Rnd_Str = ans End Function
引数「NN」に「項の数」という意味を持たせています。
演算子に「÷」が出た場合、数値に「1」が出た場合は一度だけ再考させています。
まとめ
これでとりあえず「3数の計算式の問題」だけは作れます。
ただし答えがいくつか手動でないと求められないし
答えが不必要に複雑になるかもしれません。
次回はこの「ランダム作成した問題の答え」を出してくれる関数を書きます。