Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <array>
- #include <vector>
- #include <fstream>
- #include <iostream>
- #include <iomanip>
- using namespace std;
- class Answer {
- public:
- Answer() = default;
- Answer(string title, bool correctly = false)
- : title_(title), correctly_(correctly) {}
- string title()const {
- return title_;
- }
- bool correctly()const {
- return correctly_;
- }
- void set() {
- correctly_ = true;
- }
- private:
- string title_;
- bool correctly_;
- friend ostream& operator<<(ostream& out, const Answer& answer) {
- out << answer.title_;
- return out;
- }
- };
- class Question {
- public:
- Question() : index_(0U) {}
- void title(const string& value) {
- title_ = value;
- }
- string title()const {
- return title_;
- }
- size_t size()const {
- return box_.size();
- }
- void correctly(const size_t index) {
- box_.at(index).set();
- }
- bool is_correct(const size_t index)const {
- return box_.at(index).correctly();
- }
- void add_answer(Answer&& answer) {
- if (index_ < size()) {
- box_.at(index_) = move(answer);
- ++index_;
- }
- }
- private:
- string title_;
- array<Answer, 4u> box_;
- size_t index_;
- friend ostream& operator<<(ostream& out, const Question& question) {
- out << '\t' << question.title_ << "\n\n";
- for (auto i = 0U; i < question.size(); ++i) {
- out << ' ' << i + 1 << ". " << question.box_.at(i) << '\n';
- }
- out.put('\n');
- return out;
- }
- };
- class Test {
- public:
- bool load(const string& path) {
- ifstream source(path);
- if (source.is_open()) {
- string line;
- while (getline(source, line)) {
- Question question;
- auto size = question.size();
- question.title(line);
- for (auto i = 0U; i < size; ++i) {
- getline(source, line);
- question.add_answer(Answer(line));
- }
- getline(source, line);
- question.correctly(stoul(line) - 1U);
- box_.push_back(question);
- }
- source.close();
- } else {
- return false;
- }
- return true;
- }
- pair<size_t, size_t> begin() {
- pair<size_t, size_t> box{ 0U, box_.size() };
- auto count = 0U;
- for (const auto& item : box_) {
- cout << item << "\n Номер поравильного ответа? ";
- size_t number;
- cin >> number;
- cin.ignore(numeric_limits<streamsize>::max(), '\n');
- --number;
- if (item.is_correct(number)) ++box.first;
- cout.put('\n');
- }
- return box;
- }
- private:
- vector<Question> box_;
- };
- int main() {
- system("chcp 1251 > nul");
- Test test;
- test.load("ботаника.txt"s);
- auto [correct, all] = test.begin();
- cout
- << "Результат: " << correct << "/" << all << " = "
- << fixed << setprecision(2)
- << double(correct * 100U) / all << "%\n";
- system("pause > nul");
- }
- // Примерное содержимое файла ботаника.txt
- /*
- К какому семейству относится РОМАШКА
- Розоцветные
- Астровые
- Сложноцветные
- Вересковые
- 2
- К какому семейству относится ШИПОВНИК
- Вересковые
- Сложноцветные
- Розоцветные
- Астровые
- 3
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement