@ 2017-03-16T15:57:11Z <?php
error_reporting(-1);
abstract class Question
{
public $text; // текст вопроса
public $points = 5; // число баллов, по умолчанию 5
public $hint; // подсказка
abstract function checkQuestionAndAnswer($answer);
}
class ChoiceQuestion extends Question
{
public $options; // варианты ответа
public $correctOption; // правильный вариант
public function checkQuestionAndAnswer($answer)
{
if ($this->correctOption == $answer) {
return true;
} else {
return false;
}
}
}
class NumericQuestion extends Question
{
public $correctAnswer; // правильный ответ
public $deviation; // допустимая погрешность
public function checkQuestionAndAnswer($answer)
{
if ($this->correctAnswer == $answer) {
return true;
} elseif ($answer == $this->correctAnswer - $this->deviation || $answer == $this->correctAnswer + $this->deviation) {
return true;
} else {
return false;
}
}
}
// Функция, создающая массив с вопросами:
function createQuestions()
{
// Создаем пустой массив
$questions = [];
// Вопрос 1
$q1 = new ChoiceQuestion;
$q1->text = "Какая планета располагается четвертой по счету от Солнца?";
$q1->points = 10; // 10 баллов за ответ
$q1->options = array('a' => 'Венера', 'b' => 'Марс', 'c' => 'Юпитер', 'd' => 'Меркурий'); // Варианты ответа
$q1->correctOption = 'b'; // Правильный ответ
$q1->hint = 'Сникерс'; // Подсказка
$questions[] = $q1;
// Вопрос 2
$q2 = new ChoiceQuestion;
$q2->text = 'Какой город является столицей Великобритании?';
$q2->points = 5;
$q2->options = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон');
$q2->correctOption = 'd';
$q2->hint = 'London is the capital of Great Britain'; // Подсказка
$questions[] = $q2;
// Вопрос 3
$q3 = new ChoiceQuestion;
$q3->text = 'Кто придумал теорию относительности?';
$q3->points = 30;
$q3->options = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон');
$q3->correctOption = 'c';
$q3->hint = 'Какой-то еврей... Подождите... Ох, нет...'; // Подсказка
$questions[] = $q3;
// Вопрос 4 - с выбором цифры
$q4 = new NumericQuestion;
$q4->text = 'Напишите число Пи до тысячных или хотя бы сотых.';
$q4->points = 30;
$q4->correctAnswer = 3.141;
$q4->deviation = 0.001;
$q4->hint = 'Это 3,14здец какой-то...'; // Подсказка
$questions[] = $q4;
return $questions;
}
function checkAnswers($questions, $answers) {
if (count($questions) != count($answers)) {
die("Число ответов и вопросов не совпадает\n");
}
$number = 0;
$pointsTotal = 0; // сколько набрано баллов
$pointsMax = 0; // сколько можно набрать баллов при всех правильных ответах
$correctAnswers = 0; // сколько отвечено верно
$totalQuestions = count($questions); // Сколько всего вопросов
// Если ответ из массива $answers и правильный ответ для соответствующего вопроса совпадают - плюсуются $correctAnswers, $pointsTotal
for ($i = 0; $i < count($questions); $i++) {
$number = $i + 1;
$pointsMax += $questions[$i]->points;
if ($questions[$i]->checkQuestionAndAnswer($answers[$i]) == true) {
echo "Ответ на вопрос {$number} правильный\n\n";
$correctAnswers++;
$pointsTotal += $questions[$i]->points;
} else {
echo "Ответ на вопрос {$number} НЕправильный\n Подсказка: {$questions[$i]->hint}\n\n";
}
}
echo "Всего набрано баллов $pointsTotal из $pointsMax.\n Всего правильных ответов: $correctAnswers.\n Всего было вопросов: $totalQuestions\n";
}
function printQuestions($questions)
{
$number = 1; // номер вопроса
foreach ($questions as $question) {
echo "\n{$number}. {$question->text}\n\n";
if (isset($question->options)) {
echo "Варианты ответов:\n";
foreach ($question->options as $letter => $answer) {
echo " {$letter}. {$answer}\n";
}
}
$number++;
}
}
$questions = createQuestions();
$answers = array('b', 'd', 'a', 3.14);
printQuestions($questions);
checkAnswers($questions, $answers);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.33 , 7.2.6 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.27 , 8.2.0 - 8.2.17 , 8.3.0 - 8.3.4 1. Какая планета располагается четвертой по счету от Солнца?
Варианты ответов:
a. Венера
b. Марс
c. Юпитер
d. Меркурий
2. Какой город является столицей Великобритании?
Варианты ответов:
a. Париж
b. Москва
c. Нью-Йорк
d. Лондон
3. Кто придумал теорию относительности?
Варианты ответов:
a. Джон Леннон
b. Джим Моррисон
c. Альберт Эйнштейн
d. Исаак Ньютон
4. Напишите число Пи до тысячных или хотя бы сотых.
Ответ на вопрос 1 правильный
Ответ на вопрос 2 правильный
Ответ на вопрос 3 НЕправильный
Подсказка: Какой-то еврей... Подождите... Ох, нет...
Ответ на вопрос 4 правильный
Всего набрано баллов 45 из 75.
Всего правильных ответов: 3.
Всего было вопросов: 4
preferences:dark mode live preview
167.81 ms | 406 KiB | 191 Q