Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <array>
- #include <vector>
- #include <random>
- using namespace std;
- class Question {
- public:
- Question() {
- random_device device;
- gen.seed(device());
- }
- Question(const pair<string, array<string, 4U>>& box)
- : options(box.second), question(box.first), answer(options.front()) {
- random_device device;
- gen.seed(device());
- }
- string show() {
- shuffle(options.begin(), options.end(), gen);
- cout << " " << question << "\n\n";
- int n = 0;
- for (const auto& option : options) {
- cout << ++n << ". " << option << '\n';
- }
- cout << "\nВыберите номер правильного ответа и нажмите Enter: ";
- int choice;
- cin >> choice;
- cin.ignore(cin.rdbuf()->in_avail());
- system("cls");
- --choice;
- return choice < 0 || choice >= int(options.size()) ? "" : options[choice];
- }
- int attempt(const string& value)const {
- return value == answer;
- }
- private:
- mt19937 gen;
- array<string, 4U> options;
- string question;
- string answer;
- };
- class Electronics {
- public:
- inline static string title{ "электронике" };
- Electronics(array<Question, 5U> questions) : questions(questions) {
- random_device device;
- gen.seed(device());
- shuffle(questions.begin(), questions.end(), gen);
- }
- pair<string, int> test(const string& name) {
- pair<string, int> box{ name, 0 };
- for (auto& question : questions) {
- if (question.attempt(question.show())) {
- ++box.second;
- }
- }
- return box;
- }
- private:
- mt19937 gen;
- array<Question, 5U> questions;
- };
- class Query {
- public:
- Query() {
- random_device device;
- gen.seed(device());
- }
- array<Question, 5U> get() {
- shuffle(box.begin(), box.end(), gen);
- array<Question, 5U> questions;
- copy(box.begin(), box.begin() + 5U, questions.begin());
- return questions;
- }
- private:
- mt19937 gen;
- inline static vector<Question> box{
- { { "Полупроводниковый резистор, электрическое сопротивление (проводимость)\nкоторого нелинейно зависит от приложенного напряжения",
- { "Варистор", "Переменный резистор", "Подстроечный резистор", "Фоторезистор" } } },
- { { "Электронный прибор, в котором пьезоэлектрический эффект и явление\nмеханического резонанса используются для построения высокодобротного\nрезонансного элемента электронной схемы",
- { "Кварцевый резонатор", "Мемристор", "Бареттер", "Самовосстанавливающийся предохранитель" } } },
- { { "Электрический конденсатор, ёмкость которого нелинейно изменяется\nв широких пределах в зависимости от напряжения, приложенного к его обкладкам",
- { "Вариконд", "Стабилитрон", "Переменный конденсатор", "Варикап" } } },
- { { "Полупроводниковый прибор с тремя электродами и одним p-n переходом",
- { "Однопереходный транзистор", "Полевой транзистор", "Биполярный транзистор", "Составной транзистор" } } },
- { { "Интегральная схема, в которой наряду с элементами, неразъёмно связанными\nна поверхности или в объёме подложки, используются навесные\nмикроминиатюрные элементы",
- { "Гибридная микросхема", "Цифровая интегральная схема", "Аналоговая интегральная схема", "Аналого-цифровая интегральная схема" } } },
- { { "Электронный прибор, состоящий из излучателя света и фотоприёмника,\nсвязанных оптическим каналом и, как правило, объединённых в общем корпусе",
- { "Оптрон", "Фототиристор", "Фоторезистор", "Фотодиод" } } },
- { { "Ионный прибор, в котором при помощи одного или нескольких управляющих\nэлектродов обеспечивается управление моментом возникновения разряда",
- { "Тиратрон", "Кенотрон", "Игнитрон", "Клистрон" } } },
- { { "Электромеханический бистабильный знакосинтезирующий индикатор с матричным\nпринципом формирования изображения",
- { "Блинкерное табло", "Семисегментный индикатор", "Матричный индикатор", "Газоразрядный индикатор" } } },
- { { "Резистор, сопротивление которого изменяется в зависимости от его деформации",
- { "Тензорезистор", "Фоторезистор", "Стабистор", "Подстроечный резистор" } } },
- { { "Что не входит в цепь колебательного контура?",
- { "Резистор", "Катушка индуктивности", "Конденсатор", "Источник электрической энергии" } } }
- };
- };
- void test_electronics() {
- Query query;
- while (true) {
- auto test = query.get();
- Electronics electronics(test);
- cout << "Введите Ф.И.О.: ";
- string person;
- getline(cin, person);
- auto [name, result] = electronics.test(person);
- cout
- << "Студент " << name
- << " сдал test по " << electronics.title
- << " на оценку " << result << '\n';
- system("pause");
- system("cls");
- }
- }
- int main() {
- system("chcp 1251 > nul");
- test_electronics();
- system("pause > nul");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement