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