> 例えば、回答が5個あって、その中から2つ正解しないと点数が
付かない(ようするに部分採点をしない)ようにする方法はあります
でしょうか?
「すべての正解を選択した場合のみ評点を与える」という設定はできないようです。
下記のプログラム修正で、けんけん様のご希望の動作を実現することができると思います。
修正対象プログラム: question/type/multichoice/questiontype.php
修正箇所: 374行目
修正内容:
[変更前]
[変更後]
回答ありがとうございます。
>「すべての正解を選択した場合のみ評点を与える」という設定はできないようです。
>下記のプログラム修正で、けんけん様のご希望の動作を実現することができると思い
>ます。
>修正対象プログラム: question/type/multichoice/questiontype.php
>修正箇所: 374行目
なるほど!確かにできますね。
でも、ソース修正でしか対応できないということですね。
しかし、全部正解しないと評価されないというオプションは欲しいと思います。
要望って出せるんでしょうか?
それとも自分で修正して send_pr しないとだめ?
またしばらく触ってみて分からないことがあったら質問させていただきます。
ありがとうございました。
英語で記載する必要がありますが、下記ページで要望を出すことができます。
[Moodle Tracker]
http://tracker.moodle.org/
アカウントを作成して、「CREATE NEW ISSUE」をクリックした後、「Project: Moodle、
Issue Type: Improvement」を選択してください。
「Next >>」ボタンをクリックすると要望の詳細な入力欄が表示されます。
学内の方から同様のご質問を受け,吉田さんご呈示のコードを参考に実装しました.
#BlackBoardでは,この問題形式が作れるそうです...
具体的には,下の図の様に多肢選択問題の編集画面に「部分正解不可」というオプションを追加しました.
一応ヘルプファイルも作成しました.(下図参照)
また,この改造はMOODLE_18_CVSの2008/02/07版に対して実装しています.
コードに対する変更点
簡単なコメント
Avoid partial gradingのみだと、不正解選択肢をいちいち負に設定しなければならず面倒だ、という指摘をユーザから受けたので、以下の様に
/moodle/question/type/multichoice/questiontype.php を編集してみました。すなわち、複数回答を許可した場合、0を負にし、和が1の場合のみ正解とする、ということです。これで、ユーザの要求をすべて満たすのかどうか、よくわかりませんが、「コードに対する変更点」を推測してみました。なお、行番号は、Moodle 2.0.2 に対応しています。
373 function grade_responses(&$question, &$state, $cmoptions) {
374 $state->raw_grade = 0;
375 if($question->options->single) {
376 $response = reset($state->responses);
377 if ($response) {
378 $state->raw_grade = $question->options->answers[$response]->fraction;
379 }
380 } else {
381 foreach ($state->responses as $response) {
382 if ($response) {
383 // Set to negative valuses
384 if (((float) $question->options->answers[$response]->fraction) === 0.0) {
385 (float) $question->options->answers[$response]->fraction = -0.0001;
386 }
387 $state->raw_grade += $question->options->answers[$response]->fraction;
388 }
389 }
390 }
391 // Avoid partial grading
392 if ($state->raw_grade != 1.0) { $state->raw_grade = 0; }