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

Варианты ответов:
  a. Да
  b. Не знаю
  c. Все зависит от меня самого
  d. Нет
2. Оп - няша?

Варианты ответов:
  a. Да
  b. Определенно
  c. Он еще и умняша
  d. Все ответы верны
3. Какой город является столицей России?

Варианты ответов:
  a. Киев
  b. Санкт-Петербург
  c. Лондон
  d. Москва
Неправильный ответ на вопрос №1 (Познаю ли Я ООП?)
Подсказка: Всему можно научиться, если постоянно прилагать усилия. (Правильный ответ:c)
Неправильный ответ на вопрос №2 (Оп - няша?)
Подсказка: Оп не только няша, но он еще и очень мудр. (Правильный ответ:d)
Правильных ответов: 1 из 3, баллов набрано: 100 из 111