投稿者:nu
投稿日:2012年 1月31日(火)15時53分31秒
|
|
|
!いつも楽しく拝見しております。
!また、処理にてこずりまして、ランダム選択肢、ランダム設問まではうまくいきました。
!ただ、どういうわけか、正解を選んでも"間違いです。"の後で"正解です。"が出力され、
!また、明らかに誤答を選んでも、正解になったりするなど、納得がいきません。
!できれば、
!(1)別の外部記憶装置から、問題・回答ファイルを出力
!(2)別ファイルに入力して答案を作成
!(3)答案の採点
!(4)統計解析
!まで行いたいです。
!お分かりになる方、御指導くださるようお願いします。
!Microsoft Basic 互換モードで動作します。
!下の!問題集に自分で作成した問題、回答を入力、
!ランダム設問、ランダム選択肢が出題されます。
!----------------------------------------------------------------
1000 DIM A$(10,10),Q(10),ANS(10)
1010 cls 3
1020 RANDOMIZE
1030 LET Q(1)=INT(RND*2+1)
1040 LET Q(2)=INT(RND*2+1)
1050 IF Q(2)><Q(1) THEN GOTO 1070
1060 IF Q(2)=Q(1) THEN GOTO 1040
1070 GOSUB 1190
1080 FOR i=1 TO 2
1090 h=Q(i)
1100 PRINT A$(h,0)
1110 PRINT " 1.";A$(h,1);" 2.";A$(h,2);" 3.";A$(h,3);" 4.";A$(h,4)
1120 INPUT B
1130 IF B=ANS(h) THEN GOSUB 1160
1140 IF B><ANS(h) THEN GOSUB 1150
1150 PRINT A$(0,0)&A$(h,0)
1160 PRINT A$(0,1)
1170 NEXT i
1180 END
1190 RANDOMIZE
1200 LET AA=INT(RND*4)+1
1210 LET AB=INT(RND*4)+1
1220 IF AA><AB THEN GOTO 1240
1230 IF AA=AB THEN GOTO 1210
1240 LET AC=INT(RND*4)+1
1250 IF AC><AA AND AC><AB THEN GOTO 1270
1260 IF AC=AA OR AC=AB THEN GOTO 1240
1270 LET AD=INT(RND*4)+1
1280 IF AD><AA AND AD><AB AND AD><AC THEN GOTO 1300
1290 IF AD=AA OR AD=AB OR AD=AC THEN GOTO 1270
1300 !問題集
1310 LET A$(0,0)="間違いです。"
1320 LET A$(0,1)="正解です。"
1330 LET A$(1,0)="何を持っていますか?"
1340 LET A$(1,AA)="do":A$(1,AB)="What":A$(1,AC)="you":A$(1,AD)="have":ANS(1)=ABAAACAD
1350 LET A$(2,AA)="Coke":A$(2,AB)="feel":A$(2,AC)="I":A$(2,AD)="*":ANS(2)=ACABAA
1360 LET A$(2,0)="コーラが飲みたい。"
1370 RETURN
!おっくうの教材作成日記
!を参考にして作成。
nu
|
|
|
投稿者:nu
投稿日:2012年 1月31日(火)21時48分51秒
|
|
|
!首都名クイズです。
!Microsoft BASIC互換モードで動作します。
0010 OPTION BASE 0
0020 DIM A$(2,3),B$(2,3)
0021 RANDOMIZE
0022 LET Q(1)=INT(RND*2+1)
0023 LET Q(2)=INT(RND*2+1)
0024 IF Q(2)=Q(1) THEN GOTO 0023
0025 IF Q(2)><Q(1) THEN GOTO 0030
0030 GOSUB 0170
0040 FOR i=1 TO 2
0041 LET h=Q(i)
0050 PRINT "1."&A$(h,j)
0060 PRINT "2."&A$(h,k)
0070 PRINT "3."&A$(h,l)
0080 PRINT "全角カタカナで「,」(コンマ)で区切って入力してください。"
0085 PRINT "<例>サンチャゴ,ペキン,トウキョウ"
0090 INPUT C$,D$,E$
0100 IF C$><B$(h,j) OR D$><B$(h,k) OR E$><B$(h,l) THEN GOTO 0090
0110 IF C$=B$(h,j) AND D$=B$(h,k) AND E$=B$(h,l) THEN GOTO 0120
0111 ! IF j=1 OR k=1 OR l=1 OR C$(1)="ワシントンD.C." OR C$(2)="ワシントンD.C." OR C$(3)="ワシントンD.C." THEN GOTO 0120
0120 PRINT "正解"
0130 PRINT "1."&A$(h,j);B$(h,j)
0140 PRINT "2."&A$(h,k);B$(h,k)
0150 PRINT "3."&A$(h,l);B$(h,l)
0160 NEXT i
END
0170 RANDOMIZE
0180 LET j=INT(RND*3+1)
0190 LET k=INT(RND*3+1)
0200 IF k=j THEN GOTO 0190
0210 IF k><j THEN GOTO 0220
0220 LET l=INT(RND*3+1)
0230 IF l=k OR l=j THEN GOTO 0220
0240 IF l><k AND l><k THEN GOTO 0250
0250 LET A$(1,1)="アメリカの首都はどこか。":A$(1,2)="イタリアの首都はどこか。":A$(1,3)="フランスの首都はどこか。":B$(1,1)="ワシントン":B$(1,2)="ローマ":B$(1,3)="パリ"
0260 LET A$(2,1)="マルタの首都はどこか。":A$(2,2)="ハンガリーの首都はどこか。":A$(2,3)="ブルガリアの首都はどこか。":B$(2,1)="バレッタ":B$(2,2)="ブダペスト":B$(2,3)="ソフィア"
0270 RETURN
!いくつかの文章をランダムに、改行した状態で表示させる方法 を参考にして作成しました。
!nu
|
|
|
投稿者:nu
投稿日:2012年 2月 2日(木)05時17分16秒
|
|
|
> No.1747[元記事へ]
投稿できないと思い、あせりました。
利用方法を見て、納得です。
!Microsoft Basic 互換モードで動作します。
!下の!問題集に自分で作成した問題、回答を入力、
!ランダム設問、ランダム選択肢が出題されます。
!----------------------------------------------------------------
!並べかえがやっとできました。
!(1)別の外部記憶装置から、問題・回答ファイルを出力
!(2)別ファイルに入力して答案を作成
!(3)答案の採点
!(4)統計解析
!まで行いたいです。
!----------------------------------------------------------------
!【配列宣言】
!WRD$(10,10):これから並べかえる単語
!QTN(10):問題番号
!ANS(10,10):正解の順番の単語
!RES(10,10):回答された順番の単語
001000 OPTION BASE 0
001100 DIM WRD$(10,10),QTN(10),ANS(10,10),RES(10,10)
001200 RANDOMIZE
001300 LET QTN(1)=INT(RND*2)+1
001400 LET QTN(2)=INT(RND*2)+1
001500 IF QTN(2)=QTN(1) THEN GOTO 001400
001600 IF QTN(2)><QTN(1) THEN GOTO 010000
010000 GOSUB 018900
010100 FOR i=1 TO 2
010200 LET h=QTN(i)
010300 PRINT WRD$(h,5)
010400 PRINT " 1."&WRD$(h,A)&" 2."&WRD$(h,B)&" 3."&WRD$(h,C)&" 4."&WRD$(h,D)
010500 INPUT RES(h,1),RES(h,2),RES(h,3),RES(h,4)
010600 IF RES(h,1)><ANS(h,1) OR RES(h,2)><ANS(h,2) OR RES(h,3)><ANS(h,3) OR RES(h,4)><ANS(h,4) THEN GOTO 010500
010700 IF RES(h,1)=ANS(h,1) AND RES(h,2)=ANS(h,2) AND RES(h,3)=ANS(h,3) AND RES(h,4)=ANS(h,4) THEN GOTO 010800
010800 PRINT "正解です。"
010900 PRINT RES(h,1);RES(h,2);RES(h,3);RES(h,4)
010950 GOSUB 018900
011000 NEXT i
011100 END
! 4語の問題集
018900 RANDOMIZE
019000 LET A=INT(RND*4)+1
019100 LET B=INT(RND*4)+1
019200 IF B><A THEN GOTO 019400
019300 IF B=A THEN GOTO 019100
019400 LET C=INT(RND*4)+1
019500 IF C><A AND C><B THEN GOTO 019700
019600 IF C=A OR C=B THEN GOTO 019400
019700 LET D=INT(RND*4)+1
019800 IF D><A AND D><B AND D><C THEN GOTO 020000
019900 IF D=A OR D=B OR D=C THEN GOTO 019700
020000 LET WRD$(1,5)="何を持っていますか?":WRD$(1,1)="What":WRD$(1,2)="do":WRD$(1,3)="you":WRD$(1,4)="have":ANS(1,A)=1:ANS(1,B)=2:ANS(1,C)=3:ANS(1,D)=4
020100 LET WRD$(2,5)="何処を飛んでいますか?":WRD$(2,1)="Where":WRD$(2,2)="do":WRD$(2,3)="you":WRD$(2,4)="fly":ANS(2,A)=1:ANS(2,B)=2:ANS(2,C)=3:ANS(2,D)=4
020200 RETURN
! おっくうの教材作成日記
! を参考にして作成。
nu 201202020615
http://
|
|
|
投稿者:山中和義
投稿日:2012年 2月 2日(木)13時07分54秒
|
|
|
> No.1748[元記事へ]
nuさんへのお返事です。
問題集の書式を検討してみました。
1000 !n語の問題集
1010 RANDOMIZE !毎回異なるようにする
1020
1030 LET C=0 !正解数
1040
1050 DIM Q(100),W$(10),A(10) !問題、語彙、答え
1060
1070 READ M !問題の個数
1080 CALL shuffle(M,Q) !シャッフルする
1090
1100 FOR i=1 TO M
1110 RESTORE 7010
1120 FOR k=1 TO Q(i)
1130 READ Q$ !質問文
1140 READ N !n語
1150 FOR j=1 TO N !語彙
1160 READ W$(j)
1170 NEXT j
1180 NEXT k
1190 PRINT Q$ !問題文を表示する
1200
1210 CALL shuffle(N,A) !シャッフルする
1220
1230 LET ANS=0 !n進法の数値へ
1240 FOR j=1 TO N !語彙を表示する
1250 PRINT STR$(j); ") "; W$(A(j))
1260 LET ANS=ANS+(j-1)*N^(N-A(j))
1270 NEXT j
1280
1290 PRINT "正しい順に語彙を並べなさい。"
1300 PRINT "番号を順に入力してください。 例. 2314"
1310 INPUT PROMPT "?": T
1320 LET S=0
1330 FOR j=1 TO N !10進法n桁をn進法n桁へ
1340 LET S=S+(MOD(T,10)-1)*N^(j-1)
1350 LET T=INT(T/10)
1360 NEXT j
1370 !!!PRINT S;ANS !debug
1380
1390
1400 IF S=ANS THEN !採点する
1410 LET C=C+1
1420 PRINT "正解です。"
1430 ELSE
1440 PRINT "誤りです。"
1450 END IF
1460 PRINT "正しい並びは、";
1470 FOR j=1 TO N
1480 PRINT W$(j); " ";
1490 NEXT j
1500 PRINT "です。"
1510
1520
1530 PRINT !次へ
1540 NEXT i
1550
1560 PRINT "正解率は、"; M;"問中"; C;"回です。"
7000 DATA 3 !問題の個数
7010 DATA "何を持っていますか?" !第1問
7020 DATA 4, "what","do","you","have"
7030 DATA "コーラが飲みたい。" !第2問
7040 DATA 3, "i","feel","coke"
7050 DATA "太陽から近い順に並べなさい。" !第3問
7060 DATA 6, "水星","金星","地球","火星","木星","土星"
9500 END
9510 EXTERNAL SUB shuffle(N,A()) !シャッフルする
9520 FOR i=1 TO N !数字を準備する
9530 LET A(i)=i
9540 NEXT i
9550 FOR i=N TO 2 STEP -1 !シャッフルする
9560 LET p=INT(RND*(i-1))+1 !左側 1~i-1
9570 IF i>2 THEN
9580 LET t=A(i) !右端iと交換する
9590 LET A(i)=A(p)
9600 LET A(p)=t
9610 ELSE !残り2枚の場合
9620 IF RND<0.5 THEN !1/2の確率で交換する
9630 LET t=A(i) !右端iと交換する
9640 LET A(i)=A(1)
9650 LET A(1)=t
9660 END IF
9670 END IF
9680 NEXT i
9690 END SUB
|
|
|
投稿者:nu
投稿日:2012年 2月 3日(金)03時21分27秒
|
|
|
> No.1749[元記事へ]
山中和義さんへのお返事です。
山中和義 様
お便りいただきありがとうございます。さらに発展していけそうな、励みになります。
後ほどどう発展できたか、ご報告いたします。
nu
|
|
|
戻る