• ベストアンサー

問題の個数を数える。

最近Javascriptを学び始めたものです。 どうしてもわからないのでここに質問させていただきます。 <title>keisan.html</title> <pre><script type="text/javascript"> <!-- // 変数 i:カウント,n, m:問題,sol:正解,ans:解答, t:正解, f:不正解, var i, n, m, sol, ans ,t ,f; // 10回反復 for (i=1; i<=10; i++) { // 問題作成 n = Math.floor(Math.random() * 10) + 1; m = Math.floor(Math.random() * 10) + 1; sol = n + m; // 正解の保存 // 出題 ans = Number(prompt("第" + i + "問:" + n + "+" + m + "=?")); // 判定 if (ans == sol) document.writeln("第" + i + "問:" + n + "+" + m + "=?"+"解答"+ ans +" " + "正解です。"); else document.writeln("第" + i + "問:" + n + "+" + m + "=?"+"解答"+ ans + " "+ "違います。 "+"正解は"+ sol +"です。") } //問題数のカウント document.writeln("正解した問題数は"+ t +"です。"); document.writeln("不正解だった問題数は"+ f +"です。") // --> </script></pre> ここまで書きました。 最後に正解と不正解の個数を画面に表示するようにしなければなりません。 問題の個数の数える変数(式)がわかりません。 わかる方、ヒントでもいいので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

現在お困りの「問題の個数」とは、「問題に対する回答の、正解と不正解のそれぞれの個数」ということでよろしいでしょうか? 以下の回答は↑が前提ですが・・ Javascript内のコメントを見る限り、「問題数のカウント」を行う場所が 10回反復する処理(for文のブロック)の後に出てきますが、 この部分の考え方を変えてはいかがでしょうか? 問題にすべて回答し終わった後で正解・不正解を集計するのではなく、 1つ1つの問題に答えた時点で、正解・不正解の数をカウントしていくと楽だと思います。 ヒント(1)「正解・不正解数のカウントアップ方法」 t = t + 1; ↑のような書き方をご覧になったことはありますか? この書き方をすると、その変数が持っている値に1だけ追加した数が得られます。 (変な例えですが、日本野鳥の会の人が手に持っているカウンタみたいなものです) ヒント(2)「if文をブロック化」 for文の始めと終わりを{ }で囲むように、if文も始めと終わりを{ }で囲むことで 複数の処理を書くことができます。 以下のような感じです。 if (ans == sol) { // 正解だった場合の処理。 // 処理1:正解した旨をdocument.writeln()で書き出す。 // 処理2:正解の問題数をカウントアップ。 } else { // 不正解だった場合の処理。 // 処理1:不正解の旨をdocument.writeln()で書き出す。 // 処理2:不正解の問題数をカウントアップ。 } 上記2つのヒントを元に少々手を加えれば、変数tとfには自然と 正解数・不正解数が入ると思います。

その他の回答 (2)

  • auty
  • ベストアンサー率58% (284/486)
回答No.3

・ merBleu623様の丁寧な解説にこれ以上追加する必要もないかと思われますが、   初心者にとっては思いがけないところで躓いてしまうことがよくあるものです。 ・ 老婆心ながら、少し変更も加えながら修正してみました。 ・ 変数の初期化     ・ Number()とparseInt()の微妙な違い     ・ 回数と途中終了の追加      が加わっています。 以下のコードを参考にしてみてください。 ------------------------------------------------------------ <html> <title>keisan.html</title> <script type="text/javascript"> <!-- // 変数 i:カウント,n, m:問題,sol:正解,ans:解答, t:正解, f:不正解, mi:未入力 var i, n, m, sol, ans ,t=0 ,f=0; var t=0 ,f=0, mi=0;; var ans0; var count; count = parseInt(prompt("何問回答しますか ?","10")); // count回反復 for (i=1; i<=count; i++) { // 問題作成 n = Math.floor(Math.random() * 10) + 1; m = Math.floor(Math.random() * 10) + 1; sol = n + m; // 正解の保存 // 出題 ans0 = prompt("第" + i + "問:" + n + "+" + m + "=?",""); if (ans0 == null) { // キャンセルボタン: 途中終了 break; } else if (ans0 == "") { mi++; document.writeln("第" + i + "問: " + n + "+" + m + "=? "+"解答 未入力です。"+"\t正解は"+ sol +"です。<br />"); continue; } ans = parseInt(ans0); // 判定 if (ans == sol) { t++; document.writeln("第" + i + "問: " + n + "+" + m + "=? "+"解答"+ ans +" " + "\t正解です。<br />"); } else { f++; document.writeln("第" + i + "問: " + n + "+" + m + "=? "+"解答"+ ans + " "+ "\t違います。"+"正解は"+ sol +"です。<br />"); } } //問題数のカウント if ( count>0 ) { document.writeln("<hr />正解した 問題数は\t"+ t +"です。<br />"); document.writeln("<hr />不正解の問題数は\t"+ f +"です。<br />") document.writeln("<hr />未入力の問題数は\t"+ mi +"です。<br />") document.writeln("<hr />") } // --> </script> <head></head> <body> </body> </html>

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

これって続きの質問ですか? http://oshiete1.goo.ne.jp/qa4082110.html 上記の回答のどこがわからないのでしょうか? それによって回答のしかたが変わってきます

関連するQ&A