ランダム設問、ランダム選択肢

 投稿者: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
 

Re: ランダム設問、ランダム選択肢

 投稿者: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
 

Re: ランダム設問、ランダム選択肢

 投稿者: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://

 

Re: ランダム設問、ランダム選択肢

 投稿者:山中和義  投稿日: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

 

Re: ランダム設問、ランダム選択肢

 投稿者:nuメール  投稿日:2012年 2月 3日(金)03時21分27秒
  > No.1749[元記事へ]

山中和義さんへのお返事です。

山中和義 様

お便りいただきありがとうございます。さらに発展していけそうな、励みになります。
後ほどどう発展できたか、ご報告いたします。
nu
 

戻る