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

Варианты ответов:
  a. Венера
  b. Марс
  c. Юпитер
  d. Меркурий
2. Какой город является столицей Великобритании?

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

Варианты ответов:
  a. Джон Леннон
  b. Джим Моррисон
  c. Альберт Эйнштейн
  d. Исаак Ньютон
Неправильный ответ на вопрос №2 (Какой город является столицей Великобритании?)
Подсказка: Вспомни Лепса
Правильных ответов: 2 из 3, баллов набрано: 40 из 45