@ 2017-03-15T13:07:21Z <?php
abstract class Question
{
public $text; // текст вопроса
public $points = 5; // число баллов, по умолчанию 5
public $hint; // подсказка
abstract function checkAnswers($questions, $answers);
}
class ChoiceQuestion extends Question
{
public $options; // варианты ответа
public $correctOption; // правильный вариант
public function checkAnswers($questions, $answers)
{
// Проверим, что число ответов равно числу вопросов (защищаемся от ошибки)
if (count($questions) != count($answers)) {
die("Число ответов и вопросов не совпадает\n");
}
$pointsTotal = 0; // сколько набрано баллов
// сколько можно набрать баллов при всех правильных ответах
$pointsMax = 0;
// сколько отвечено верно
$correctAnswers = 0;
$totalQuestions = count($questions); // Сколько всего вопросов
// Цикл для обхода вопросов и ответов
for ($i = 0; $i < count($questions); $i++) {
$question = $questions[$i]; // Текущий вопрос
$answer = $answers[$i]; // текущий ответ
// Считаем максимальную сумму баллов
$pointsMax += $question->points;
// Проверяем ответ
if ($answer == $question->correctOption) {
// Добавляем баллы
$correctAnswers ++;
$pointsTotal += $question->points;
} else {
// Неправильный ответ
$number = $i + 1;
echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n";
echo "Подсказка: {$question->hint}\n";
}
}
// Выведем итог
echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}\n";
}
}
class NumericQuestion extends Question
{
public $correctAnswer; // правильный ответ
//public $deviation; // допустимая погрешность
public function checkAnswers($questions, $answers)
{
// Проверим, что число ответов равно числу вопросов (защищаемся от ошибки)
if (count($questions) != count($answers)) {
die("Число ответов и вопросов не совпадает\n");
}
$pointsTotal = 0; // сколько набрано баллов
// сколько можно набрать баллов при всех правильных ответах
$pointsMax = 0;
// сколько отвечено верно
$correctAnswers = 0;
$totalQuestions = count($questions); // Сколько всего вопросов
// Цикл для обхода вопросов и ответов
for ($i = 0; $i < count($questions); $i++) {
$question = $questions[$i]; // Текущий вопрос
$answer = $answers[$i]; // текущий ответ
// Считаем максимальную сумму баллов
$pointsMax += $question->points;
// Проверяем ответ
if ($answer == $question->correctAnswer) {
// Добавляем баллы
$correctAnswers ++;
$pointsTotal += $question->points;
} else {
// Неправильный ответ
$number = $i + 1;
echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n";
echo "Подсказка: {$question->hint}\n";
}
}
// Выведем итог
echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}\n";
}
}
// Функция, создающая массив с вопросами:
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.14;
$q4->hint = 'Это 3,14здец какой-то...'; // Подсказка
$questions[] = $q4;
return $questions;
}
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', 1);
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.20 , 7.2.6 - 7.2.33 , 7.3.16 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 1. Какая планета располагается четвертой по счету от Солнца?
Варианты ответов:
a. Венера
b. Марс
c. Юпитер
d. Меркурий
2. Какой город является столицей Великобритании?
Варианты ответов:
a. Париж
b. Москва
c. Нью-Йорк
d. Лондон
3. Кто придумал теорию относительности?
Варианты ответов:
a. Джон Леннон
b. Джим Моррисон
c. Альберт Эйнштейн
d. Исаак Ньютон
4. Напишите число Пи до тысячных или хотя бы сотых.
Fatal error: Uncaught Error: Call to undefined function checkAnswers() in /in/GE6vo:165
Stack trace:
#0 {main}
thrown in /in/GE6vo on line 165
Process exited with code 255 . Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
1. Какая планета располагается четвертой по счету от Солнца?
Варианты ответов:
a. Венера
b. Марс
c. Юпитер
d. Меркурий
2. Какой город является столицей Великобритании?
Варианты ответов:
a. Париж
b. Москва
c. Нью-Йорк
d. Лондон
3. Кто придумал теорию относительности?
Варианты ответов:
a. Джон Леннон
b. Джим Моррисон
c. Альберт Эйнштейн
d. Исаак Ньютон
4. Напишите число Пи до тысячных или хотя бы сотых.
Fatal error: Uncaught Error: Call to undefined function checkAnswers() in /in/GE6vo:165
Stack trace:
#0 {main}
thrown in /in/GE6vo on line 165
Process exited with code 255 . preferences:dark mode live preview
160.1 ms | 402 KiB | 172 Q