<?php
class Question
{
public $text ; // текст вопроса
public $points = 5 ; // число баллов, по умолчанию 5
public $answers ; // варианты ответов
public $correctAnswer ; // правильный ответ
public $hint ;
}
function createQ( ) {
$questions = [ ] ;
$q = new Question;
$q -> text = "Какая планета располагается четвертой по счету от Солнца?" ;
$q -> points = 10 ; // 10 баллов за ответ
$q -> answers = array ( 'a' => 'Венера' , 'b' => 'Марс' , 'c' => 'Юпитер' , 'd' => 'Меркурий' ) ; // Варианты ответа $q -> correctAnswer = 'b' ; // Правильный ответ
$q -> hint = "Богиня" ;
$questions [ ] = $q ;
$q = new Question;
$q -> text = 'Какой город является столицей Великобритании?' ;
$q -> points = 5 ;
$q -> answers = array ( 'a' => 'Париж' , 'b' => 'Москва' , 'c' => 'Нью-Йорк' , 'd' => 'Лондон' ) ; $q -> correctAnswer = 'd' ;
$q -> hint = "А я уеду жить в ..." ;
$questions [ ] = $q ;
$q = new Question;
$q -> text = 'Кто придумал теорию относительности?' ;
$q -> points = 30 ;
$q -> answers = array ( 'a' => 'Джон Леннон' , 'b' => 'Джим Моррисон' , 'c' => 'Альберт Эйнштейн' , 'd' => 'Исаак Ньютон' ) ; $q -> correctAnswer = 'c' ;
$q -> hint = "Каждый двачер знает кто был этим парнем" ;
$questions [ ] = $q ;
return $questions ;
}
function printQuestions( $questions )
{
$i = 1 ; // номер вопроса
foreach ( $questions as $question ) {
echo "{$i} . {$question->text} \n " ;
echo "Варианты ответов:\n " ;
foreach ( $question -> answers as $letter => $answer ) {
echo " {$letter} . {$answer} \n " ;
}
echo "\n " ;
$i ++;
}
}
function checkAnswers( $questions , $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 ;
// Проверяем ответ
$number = $i + 1 ;
if ( $answer == $question -> correctAnswer ) {
// Добавляем баллы
$correctAnswers ++;
$pointsTotal += $question -> points ;
echo "На $number вопрос дан правильный ответ.\n " ;
} else {
// Неправильный ответ
echo "Неправильный ответ на вопрос №{$number} ({$question->text} )\n " ;
echo "Подсказка: {$question->hint} \n " ;
}
}
// Выведем итог
echo "Правильных ответов: {$correctAnswers} из {$totalQuestions} , баллов набрано: $pointsTotal из $pointsMax \n " ;
}
$test = createQ( ) ;
$answers = array ( 'b' , 'd' , 'a' ) ; printQuestions( $test ) ;
checkAnswers( $test , $answers ) ;
PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0xKTsKCmNsYXNzIFF1ZXN0aW9uCnsKICAgIHB1YmxpYyAkdGV4dDsgICAgICAgICAgIC8vINGC0LXQutGB0YIg0LLQvtC/0YDQvtGB0LAKICAgIHB1YmxpYyAkcG9pbnRzID0gNTsgICAgIC8vINGH0LjRgdC70L4g0LHQsNC70LvQvtCyLCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiA1CiAgICBwdWJsaWMgJGFuc3dlcnM7ICAgICAgICAvLyDQstCw0YDQuNCw0L3RgtGLINC+0YLQstC10YLQvtCyCiAgICBwdWJsaWMgJGNvcnJlY3RBbnN3ZXI7ICAvLyDQv9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCCiAgICBwdWJsaWMgJGhpbnQ7Cn0KCmZ1bmN0aW9uIGNyZWF0ZVEoKSB7CgkkcXVlc3Rpb25zID0gW107CgkkcSA9IG5ldyBRdWVzdGlvbjsKCSRxLT50ZXh0ID0gItCa0LDQutCw0Y8g0L/Qu9Cw0L3QtdGC0LAg0YDQsNGB0L/QvtC70LDQs9Cw0LXRgtGB0Y8g0YfQtdGC0LLQtdGA0YLQvtC5INC/0L4g0YHRh9C10YLRgyDQvtGCINCh0L7Qu9C90YbQsD8iOwoJJHEtPnBvaW50cyA9IDEwOyAvLyAxMCDQsdCw0LvQu9C+0LIg0LfQsCDQvtGC0LLQtdGCCgkkcS0+YW5zd2VycyA9IGFycmF5KCdhJyA9PiAn0JLQtdC90LXRgNCwJywgJ2InID0+ICfQnNCw0YDRgScsICdjJyA9PiAn0K7Qv9C40YLQtdGAJywgJ2QnID0+ICfQnNC10YDQutGD0YDQuNC5Jyk7IC8vINCS0LDRgNC40LDQvdGC0Ysg0L7RgtCy0LXRgtCwCgkkcS0+Y29ycmVjdEFuc3dlciA9ICdiJzsgLy8g0J/RgNCw0LLQuNC70YzQvdGL0Lkg0L7RgtCy0LXRggoJJHEtPmhpbnQgPSAi0JHQvtCz0LjQvdGPIjsKCQoJJHF1ZXN0aW9uc1tdID0gJHE7CgoJJHEgPSBuZXcgUXVlc3Rpb247CgkkcS0+dGV4dCA9ICfQmtCw0LrQvtC5INCz0L7RgNC+0LQg0Y/QstC70Y/QtdGC0YHRjyDRgdGC0L7Qu9C40YbQtdC5INCS0LXQu9C40LrQvtCx0YDQuNGC0LDQvdC40Lg/JzsKCSRxLT5wb2ludHMgPSA1OwoJJHEtPmFuc3dlcnMgPSBhcnJheSgnYScgPT4gJ9Cf0LDRgNC40LYnLCAnYicgPT4gJ9Cc0L7RgdC60LLQsCcsICdjJyA9PiAn0J3RjNGOLdCZ0L7RgNC6JywgJ2QnID0+ICfQm9C+0L3QtNC+0L0nKTsKCSRxLT5jb3JyZWN0QW5zd2VyID0gJ2QnOwoJJHEtPmhpbnQgPSAi0JAg0Y8g0YPQtdC00YMg0LbQuNGC0Ywg0LIgLi4uIjsKCSRxdWVzdGlvbnNbXSA9ICRxOwoJCgkkcSA9IG5ldyBRdWVzdGlvbjsKCSRxLT50ZXh0ID0gJ9Ca0YLQviDQv9GA0LjQtNGD0LzQsNC7INGC0LXQvtGA0LjRjiDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L7RgdGC0Lg/JzsKCSRxLT5wb2ludHMgPSAzMDsKCSRxLT5hbnN3ZXJzID0gYXJyYXkoJ2EnID0+ICfQlNC20L7QvSDQm9C10L3QvdC+0L0nLCAnYicgPT4gJ9CU0LbQuNC8INCc0L7RgNGA0LjRgdC+0L0nLCAnYycgPT4gJ9CQ0LvRjNCx0LXRgNGCINCt0LnQvdGI0YLQtdC50L0nLCAnZCcgPT4gJ9CY0YHQsNCw0Log0J3RjNGO0YLQvtC9Jyk7CgkkcS0+Y29ycmVjdEFuc3dlciA9ICdjJzsKCSRxLT5oaW50ID0gItCa0LDQttC00YvQuSDQtNCy0LDRh9C10YAg0LfQvdCw0LXRgiDQutGC0L4g0LHRi9C7INGN0YLQuNC8INC/0LDRgNC90LXQvCI7CgkkcXVlc3Rpb25zW10gPSAkcTsKCglyZXR1cm4gJHF1ZXN0aW9uczsKfQoKZnVuY3Rpb24gcHJpbnRRdWVzdGlvbnMoJHF1ZXN0aW9ucykKewogICAgJGkgPSAxOyAvLyDQvdC+0LzQtdGAINCy0L7Qv9GA0L7RgdCwCgogICAgZm9yZWFjaCAoJHF1ZXN0aW9ucyBhcyAkcXVlc3Rpb24pIHsKICAgICAgICBlY2hvICJ7JGl9LiB7JHF1ZXN0aW9uLT50ZXh0fVxuIjsKCiAgICAgICAgZWNobyAi0JLQsNGA0LjQsNC90YLRiyDQvtGC0LLQtdGC0L7QsjpcbiI7CgogICAgICAgIGZvcmVhY2ggKCRxdWVzdGlvbi0+YW5zd2VycyBhcyAkbGV0dGVyID0+ICRhbnN3ZXIpIHsKICAgICAgICAgICAgZWNobyAiICB7JGxldHRlcn0uIHskYW5zd2VyfVxuIjsKICAgICAgICB9CgkJZWNobyAiXG4iOwogICAgICAgICRpKys7IAogICAgfQp9CgpmdW5jdGlvbiBjaGVja0Fuc3dlcnMoJHF1ZXN0aW9ucywgJGFuc3dlcnMpIHsKICAgIGlmIChjb3VudCgkcXVlc3Rpb25zKSAhPSBjb3VudCgkYW5zd2VycykpIHsKICAgICAgICBkaWUoItCn0LjRgdC70L4g0L7RgtCy0LXRgtC+0LIg0Lgg0LLQvtC/0YDQvtGB0L7QsiDQvdC1INGB0L7QstC/0LDQtNCw0LXRglxuIik7CiAgICB9CgogICAgJHBvaW50c1RvdGFsID0gMDsgLy8g0YHQutC+0LvRjNC60L4g0L3QsNCx0YDQsNC90L4g0LHQsNC70LvQvtCyCiAgICAkcG9pbnRzTWF4ID0gMDsgICAvLyDRgdC60L7Qu9GM0LrQviDQvNC+0LbQvdC+INC90LDQsdGA0LDRgtGMINCx0LDQu9C70L7QsiDQv9GA0Lgg0LLRgdC10YUg0L/RgNCw0LLQuNC70YzQvdGL0YUg0L7RgtCy0LXRgtCw0YUKICAgICRjb3JyZWN0QW5zd2VycyA9IDA7IC8vINGB0LrQvtC70YzQutC+INC+0YLQstC10YfQtdC90L4g0LLQtdGA0L3QvgogICAgJHRvdGFsUXVlc3Rpb25zID0gY291bnQoJHF1ZXN0aW9ucyk7IC8vINCh0LrQvtC70YzQutC+INCy0YHQtdCz0L4g0LLQvtC/0YDQvtGB0L7QsgogICAgLy8g0KbQuNC60Lsg0LTQu9GPINC+0LHRhdC+0LTQsCDQstC+0L/RgNC+0YHQvtCyINC4INC+0YLQstC10YLQvtCyCiAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkcXVlc3Rpb25zKTsgJGkrKykgewogICAgICAgICRxdWVzdGlvbiA9ICRxdWVzdGlvbnNbJGldOyAvLyDQotC10LrRg9GJ0LjQuSDQstC+0L/RgNC+0YEKICAgICAgICAkYW5zd2VyID0gJGFuc3dlcnNbJGldOyAvLyDRgtC10LrRg9GJ0LjQuSDQvtGC0LLQtdGCCiAgICAgICAgLy8g0KHRh9C40YLQsNC10Lwg0LzQsNC60YHQuNC80LDQu9GM0L3Rg9GOINGB0YPQvNC80YMg0LHQsNC70LvQvtCyCiAgICAgICAgJHBvaW50c01heCArPSAkcXVlc3Rpb24tPnBvaW50czsKICAgICAgICAvLyDQn9GA0L7QstC10YDRj9C10Lwg0L7RgtCy0LXRggogICAgICAgICRudW1iZXIgPSAkaSArIDE7CiAgICAgICAgaWYgKCRhbnN3ZXIgPT0gJHF1ZXN0aW9uLT5jb3JyZWN0QW5zd2VyKSB7CiAgICAgICAgICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCDQsdCw0LvQu9GLCiAgICAgICAgICAgICRjb3JyZWN0QW5zd2VycyArKzsKICAgICAgICAgICAgJHBvaW50c1RvdGFsICs9ICRxdWVzdGlvbi0+cG9pbnRzOwogICAgICAgICAgICBlY2hvICLQndCwICRudW1iZXIg0LLQvtC/0YDQvtGBINC00LDQvSDQv9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCLlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDQndC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L7RgtCy0LXRggogICAgICAgICAgICAKICAgICAgICAgICAgZWNobyAi0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC+0YLQstC10YIg0L3QsCDQstC+0L/RgNC+0YEg4oSWeyRudW1iZXJ9ICh7JHF1ZXN0aW9uLT50ZXh0fSlcbiI7CiAgICAgICAgICAgIGVjaG8gItCf0L7QtNGB0LrQsNC30LrQsDogeyRxdWVzdGlvbi0+aGludH1cbiI7CiAgICAgICAgfQogICAgfQogICAgLy8g0JLRi9Cy0LXQtNC10Lwg0LjRgtC+0LMKICAgIGVjaG8gItCf0YDQsNCy0LjQu9GM0L3Ri9GFINC+0YLQstC10YLQvtCyOiB7JGNvcnJlY3RBbnN3ZXJzfSDQuNC3IHskdG90YWxRdWVzdGlvbnN9LCDQsdCw0LvQu9C+0LIg0L3QsNCx0YDQsNC90L46ICRwb2ludHNUb3RhbCDQuNC3ICRwb2ludHNNYXhcbiI7Cn0KCiR0ZXN0ID0gY3JlYXRlUSgpOwokYW5zd2VycyA9IGFycmF5KCdiJywgJ2QnLCAnYScpOwpwcmludFF1ZXN0aW9ucygkdGVzdCk7CmNoZWNrQW5zd2VycygkdGVzdCwgJGFuc3dlcnMpOwo=