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

2. Какой город является столицей Великобритании?
Варианты ответов:
  a. Париж
  b. Москва
  c. Нью-Йорк
  d. Лондон

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

Неправильный ответ на вопрос №1 (Какая планета располагается четвертой по счету от Солнца?)
Подсказка: Эту планету хотят осваивать первой.

Неправильный ответ на вопрос №3 (Кто придумал теорию относительности?)
Подсказка: И этим парнем был ...

Правильных ответов: 1 из 3, 
    баллов набрано: 5 из 45