- ベストアンサー
計算練習プログラムの問題作成と保存方法
- 一度に出題される10問が異なる問題になるような計算練習プログラムを作成する課題があります。
- 問題作成時に正解だけでなく問題も保存するようにし、新たに問題を作成したときに保存されている既存の問題と比較して重複しないようにします。
- nとmを配列にして問題の数値を保存し、questionCheck関数を使って問題が重複していないかを判定します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そんなにくわしくないれべるですが、おなじようなミスをおかしたことがあるので。 HTML5 なのか、そうでないのかにより、あまかったりきびしかったり。 form 要素には、action 属性が必須。(HTML5なら略可) その name 属性は、そろそろ id へ。 table 要素の border は?(HTML5ならさらにだめ) <tr><td>番号</td><td>問題</td><td>解答</td><td>正誤</td></tr> 意味合いからすると、th 要素がふさわしいのでは? table 要素の中に、script 要素が出現してはだめ。 script要素の中に、"</" がふくまれるとだめなときがある。 グローバル変数の使用は、極力控えましょう。 document.f.elements これは、 document.forms[~].elements とかにしましょう(.item(n)まで必要か?) questions[i]!==undefined undefined は、書き換えることができます。強固なものにするために判定は ('undefined' !== typeof questions[i]) <input type="button" value="答え合わせ"~ の、input 要素は、インライン要素なので、ブロック要素で囲みましょう (HTML5ならOK) イベントハンドラの第1引数は、イベントオブジェクトと決まっています。なので、 onclick="check(event);" のようしましょう。 呼ばれた側で以下のようにすると、必要なものを得ることができます。 function check (event) { var inp = event.target || event.srcElement; //これでイベントの発生した要素が拾える var doc = inp.ownerDocument; // document の得かた var form = inp.form; // form 要素の取得 } HTML 4.01 でイベント属性を用いるならば、 必ず HTTP ヘッダで Content-Script-Type を指定しなければなりません <meta http-equiv="Content-Script-Type" content="text/javascript"> でも、HTML5では、不要。 きっとあなたの先生は、気づいているとおもいますが・・・。 (関係のないことですが、質問のタイトルは、どのような質問なのか一目で判ると助かる。) (また質問の本質からずれた)
その他の回答 (1)
- dscripty
- ベストアンサー率51% (166/325)
このロジック、フローチャート描いたり、箇条書きしたりして、案を練って無いでしょう。 行き当たりばったり感、出まくりだよ。 モーストアンバリアブルライン(MUL)はこれ! 「var mn = ""+n+m; //mn:nとmを文字列にしたもの」 比較のためだけに数字を文字列に変換してるとこと。 あと、今回は、1~10 の整数だから成功してるけど、1~11 の整数なら、『1+11』と『11+1』の区別がつかないよ? せっかく questions って名前をつけたんだから、問題をそのまま保存して、問題文を表示するところで、再利用しちゃえば? var mn = n + '+' + m; //mn:n+mという文字列 出力部分は 「document.writeln('<tr><td>' + i + '</td><td>' + n[i] + ' + ' + m[i] + ' =</ td>');」 の代わりに、 document.writeln('<tr><td>' + i + '</td><td>' + questions[i] + ' =</ td>'); とする。 まだまだ、きもちわるいところ、多数で、ロジックの練り直しから始めたほうがいいけど、あとは、先生を信じて委ねることにするね!