fork(1) download
  1. <?php
  2.  
  3.  
  4. class Question
  5. {
  6. public $text; // текст вопроса
  7. public $points = 5; // число баллов, по умолчанию 5
  8. public $answers; // варианты ответов
  9. public $correctAnswer; // правильный ответ
  10. public $hint; // подсказка
  11. }
  12.  
  13. // Функция, создающая массив с вопросами:
  14. function createQuestions()
  15. {
  16. $questions = array();
  17.  
  18. // Вопрос 1
  19. $q1 = new Question;
  20. $q1->text = "Какая планета располагается четвертой по счету от Солнца?";
  21. $q1->points = 10; // 10 баллов за ответ
  22. $q1->answers = array('a' => 'Венера', 'b' => 'Марс', 'c' => 'Юпитер', 'd' => 'Меркурий'); // Варианты ответа
  23. $q1->correctAnswer = 'b'; // Правильный ответ
  24. $q1->hint = 'Начинается на букву М, есть ещё такой шоколадный батончик...';
  25. // Кладем вопрос в массив
  26. $questions[] = $q1;
  27.  
  28. // Вопрос 2
  29. $q2 = new Question;
  30. $q2->text = 'Какой город является столицей Великобритании?';
  31. $q2->points = 5;
  32. $q2->answers = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон');
  33. $q2->correctAnswer = 'd';
  34. $q2->hint = 'Начинается на букву Л и является подлежащим в предложении "London is the capital of Great Britain"...';
  35. $questions[] = $q2;
  36.  
  37. // Вопрос 3
  38. $q3 = new Question;
  39. $q3->text = 'Кто придумал теорию относительности?';
  40. $q3->points = 30;
  41. $q3->answers = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон');
  42. $q3->correctAnswer = 'c';
  43. $q3->hint = 'Пожилой мужчина показывает язык...';
  44. $questions[] = $q3;
  45. return $questions;
  46. }
  47. function printQuestions($questions)
  48. {
  49. $i = 1; // номер вопроса
  50.  
  51. foreach ($questions as $question) {
  52. echo "{$i}. {$question->text}\n\n";
  53.  
  54. echo "Варианты ответов:\n";
  55.  
  56. foreach ($question->answers as $letter => $answer) {
  57. echo " {$letter}. {$answer}\n";
  58. }
  59.  
  60. echo "\nПодсказка: {$question->hint}\n\n";
  61.  
  62. $i++;
  63. }
  64. }
  65.  
  66. //$questions = createQuestions();
  67. //printQuestions($questions);
  68.  
  69. function checkAnswers($questions, $answers)
  70. {
  71. // Проверим, что число ответов равно числу вопросов (защищаемся от ошибки)
  72. if (count($questions) != count($answers)) {
  73. die("Число ответов и вопросов не совпадает\n");
  74. }
  75.  
  76. $pointsTotal = 0; // сколько набрано баллов
  77. $pointsMax = 0; // сколько можно набрать баллов при всех правильных ответах
  78. $correctAnswers = 0; // сколько отвечено верно
  79. $totalQuestions = count($questions); // Сколько всего вопросов
  80.  
  81. // Цикл для обхода вопросов и ответов
  82. for ($i = 0; $i < count($questions); $i++) {
  83.  
  84. $question = $questions[$i]; // Текущий вопрос
  85. $answer = $answers[$i]; // текущий ответ
  86. $i++;
  87.  
  88. echo "Ваш ответ на вопрос №$i ({$question->text}): \"{$answer}\"";
  89. $i--;
  90. foreach ($question->answers as $letter => $givenAnswer) {
  91. if ($answer == $letter) {
  92. echo " - {$givenAnswer}.\n";
  93. }
  94. }
  95. echo "Правильный ответ: \"{$question->correctAnswer}\"";
  96. foreach ($question->answers as $letter => $rightAnswer) {
  97. if ($question->correctAnswer == $letter) {
  98. echo " - {$rightAnswer}.\n\n";
  99. }
  100. }
  101. // Считаем максимальную сумму баллов
  102. $pointsMax += $question->points;
  103.  
  104. // Проверяем ответ
  105. if ($answer == $question->correctAnswer) {
  106. // Добавляем баллы
  107. $correctAnswers ++;
  108. $pointsTotal += $question->points;
  109. } else {
  110. // Неправильный ответ
  111. $number = $i + 1;
  112. echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n";
  113. }
  114. }
  115.  
  116. // Выведем итог
  117. echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}.\n";
  118. }
  119.  
  120. $questions = createQuestions();
  121. printQuestions($questions);
  122. $answers = array('b', 'd', 'a');
  123. checkAnswers($questions, $answers);
Success #stdin #stdout 0.02s 52432KB
stdin
Standard input is empty
stdout
1. Какая планета располагается четвертой по счету от Солнца?

Варианты ответов:
  a. Венера
  b. Марс
  c. Юпитер
  d. Меркурий

Подсказка: Начинается на букву М, есть ещё такой шоколадный батончик...

2. Какой город является столицей Великобритании?

Варианты ответов:
  a. Париж
  b. Москва
  c. Нью-Йорк
  d. Лондон

Подсказка: Начинается на букву Л и является подлежащим в предложении "London is the capital of Great Britain"...

3. Кто придумал теорию относительности?

Варианты ответов:
  a. Джон Леннон
  b. Джим Моррисон
  c. Альберт Эйнштейн
  d. Исаак Ньютон

Подсказка: Пожилой мужчина показывает язык...

Ваш ответ на вопрос №1 (Какая планета располагается четвертой по счету от Солнца?): "b" - Марс.
Правильный ответ: "b" - Марс.

Ваш ответ на вопрос №2 (Какой город является столицей Великобритании?): "d" - Лондон.
Правильный ответ: "d" - Лондон.

Ваш ответ на вопрос №3 (Кто придумал теорию относительности?): "a" - Джон Леннон.
Правильный ответ: "c" - Альберт Эйнштейн.

Неправильный ответ на вопрос №3 (Кто придумал теорию относительности?)
Правильных ответов: 2 из 3, баллов набрано: 15 из 45.