ドリル作成ツール VB6 |
7.問題作成の処理
フォームの[作成開始(→追加)]をクリックしたときの処理をプログラムする。
問題文の作成と問題・解答の作成である。
Private Sub cmdSakusei_Click() 'ドリル作成 Dim bmax As Long Dim n As Integer Dim mn As Integer Dim dat(MONMAX) As Double Dim mondai As String Dim kaito As String Dim mon(SYURUI) As String mon(M2TO10) = "次の2進数を10進数にしなさい。" & vbCrLf mon(M10TO2) = "次の10進数を2進数にしなさい。" mon(M16TO10) = "次の16進数を10進数にしなさい。" & vbCrLf mon(M10TO16) = "次の10進数を16進数にしなさい。" mon(M2TO16) = "次の2進数を16進数にしなさい。" mon(M16TO2) = "次の16進数を2進数にしなさい。" If optBytes(0).Value = True Then bmax = &HFF '1バイト ElseIf optBytes(1).Value = True Then bmax = &HFFFF& '2バイト End If '問題作成 mondai = "" For n = 0 To SYURUI - 1 mn = vsrMonSuu(n).Value '出題数 If mn > 0 Then mondai = mondai & Left(KAKKO1, 1) & Trim(txtMNumber.Text) & Right(KAKKO1, 1) & mon(n) If Right(mon(n), 1) <> vbCrLf Then If optBytes(0).Value = True Then '1バイト mondai = mondai & "ただし、先頭の0を省略せずに1バイトで答えなさい。" & vbCrLf ElseIf optBytes(1).Value = True Then '2バイト mondai = mondai & "ただし、先頭の0を省略せずに2バイトで答えなさい。" & vbCrLf Else mondai = mondai & vbCrLf End If End If If chkFloat.Value = 0 Then RansuuN mn, dat(), 1, bmax '※1 整数出題データ取得 Else GetData mn, dat() '※2 実数出題データ取得 End If '※3 問題 If n = M2TO10 Or n = M2TO16 Then mondai = mondai & Mondai2(mn, dat(), bmax) & vbCrLf & vbCrLf ElseIf n = M16TO10 Or n = M16TO2 Then mondai = mondai & Mondai16(mn, dat(), bmax) & vbCrLf & vbCrLf ElseIf n = M10TO2 Or n = M10TO16 Then mondai = mondai & Mondai10(mn, dat(), bmax) & vbCrLf & vbCrLf End If '※3 解答 kaito = kaito & Left(KAKKO1, 1) & Trim(txtMNumber.Text) & Right(KAKKO1, 1) If n = M10TO2 Or n = M16TO2 Then kaito = kaito & Mondai2(mn, dat(), bmax) & vbCrLf ElseIf n = M10TO16 Or n = M2TO16 Then kaito = kaito & Mondai16(mn, dat(), bmax) & vbCrLf ElseIf n = M2TO10 Or n = M16TO10 Then kaito = kaito & Mondai10(mn, dat(), bmax) & vbCrLf End If txtMNumber.Text = Str(Val(txtMNumber.Text) + 1) End If Next n DisplayMondai mondai, kaito '※4 End Sub
※1までで問題文などを設定している。
※1 出題数の個数分だけ乱数で整数を用意する。用意した整数値は配列datに記憶される。RansuuNプロシージャは共通処理(標準モジュールDrillSub.BAS)で作成したものである。
※2 出題数の個数分だけ乱数で実数を用意する。用意した整数値は配列datに記憶される。プログラムは後で示す。
※3 問題データと解答データを作成している。2進数用、10進数用、16進数用に分けて、それぞれMondai2, Mondai10, Mondai16プロシージャで処理している。プログラムは次のページで示す。
※4 問題データ(変数mondai)と解答データ(変数kaito)を引数にDisplayMondaiプロシージャを呼び出し、問題と解答を表示している。
Private Sub GetData(num As Integer, arry() As Double) '実数データ作成 Dim n As Integer, sbin As String For n = 1 To num arry(n) = Ransuu(0, &HFF) '(1) sbin = "0." & Right("00000000" & Dec2Bin(arry(n)), Val(txtSyosu.Text)) '(2) arry(n) = Bin2Dec(sbin) + Ransuu(0, &HFF) '(3) Next n End Sub
For〜Nextで必要な個数の実数値を作成する。
(1) 1バイトの範囲の乱数を発生し、配列arryに記憶する。(2)配列arryを2進数に変換し、小数のけた数(txtSyosu.Text)分だけ取り出している。"0.101010"のような形で変数sbinに記憶する。(3)変数sbin(2進数の実数)を10進数値に変換し、1バイトの範囲の乱数(整数)と加算して実数値を作成し、配列arryに記憶する。
Copyright © 2003 Hiroshi Masuda |