- Реализуйте класс Poll (title: строка, variants: массив вариантов)
- Реализуйте класс Variant (text: строка, count: количество голосов)
- Реализуйте оператор вывода для типа Poll который печатает данные
опроса (заголовок, варианты ответов и количество голосов)
- При выводе информации пользователь должен выбрать как отобразить
результаты опроса (количество голосов за каждый вариант или процент
от общего количества голосов для каждого варианта)
Ну мо моему мнению здесь надо сперва создать структуру (или класс, не имеет значение) Variant в котором есть поля std::string и size_t count и все можно сказать с этим классом или структурой мы закончили, потом переходим к классу Poll там вроде должны быть поля std::string title; size_t size; Variant variants = new Variant [size] как то так. Ну оператор вывода я знаю реализацию но сомневаюсь. Просто не пойму как реализовать систему голосов, точнее не знаю как оно должно выглядеть. Был бы рад если б вы помогли мне с реализацей. Заранее извиняюсь что отнимаю у вас время за такую ерунду.
C/C++
Класс Poll и класс Variant (тема инкапсуляция) C++
#include <iostream>
#include <string>
#include <iomanip>
#include <conio.h>
using namespace std;
class Variant {
public:
Variant() : text_("-"), count_(0U) {}
Variant(const string& text, const size_t count) : text_(text), count_(count) {}
void text(string& value) { text_ = value; }
void count(size_t value) { count_ = value; }
string text()const { return text_; }
size_t count()const { return count_; }
private:
string text_;
size_t count_;
friend ostream& operator<<(ostream& out, const Variant& var) {
out << var.text_ << ": " << var.count_;
return out;
}
};
class Poll {
public:
Poll(const string& title, const size_t size) : title_(title), size_(size), pvar_(new Variant[size_]),pos_(0U), type_(true) {}
Poll(const Poll& poll) {
title_ = poll.title_;
size_ = poll.size_;
type_ = poll.type_;
pvar_ = new Variant[size_];
for (auto i = 0U; i < size_; ++i) pvar_[i] = poll.pvar_[i];
}
Poll& operator=(const Poll& poll) {
if (&poll != this) {
title_ = poll.title_;
size_ = poll.size_;
type_ = poll.type_;
pvar_ = new Variant[size_];
for (auto i = 0U; i < size_; ++i) pvar_[i] = poll.pvar_[i];
}
return *this;
}
~Poll() {
if (pvar_) {
delete[] pvar_;
pvar_ = nullptr;
}
}
bool add(const Variant& var) {
if (pos_ < size_) {
pvar_[pos_] = var;
++pos_;
}
return pos_ < size_;
}
void show_count() {
type_ = true;
cout << *this;
}
void show_percent() {
type_ = false;
cout << *this;
}
private:
string title_;
size_t size_;
Variant* pvar_;
size_t pos_;
bool type_;
double sum_()const {
auto s = 0U;
if (pvar_) for (auto i = 0U; i < size_; ++i) s += pvar_[i].count();
return s;
}
friend ostream& operator<<(ostream& out, const Poll& poll) {
out << "\t" << poll.title_ << ":\n";
if (poll.type_) for (auto i = 0U; i < poll.size_; ++i) cout << poll.pvar_[i] << '\n';
else {
auto sum = poll.sum_();
for (auto i = 0U; i < poll.size_; ++i) {
auto per = poll.pvar_[i].count() / sum * 100;
out << poll.pvar_[i].text() << ": " << fixed << setprecision(2) << per << "%\n";
}
}
return out;
}
};
int main() {
system("chcp 1251 > nul");
cout << "Название списка: ";
string title;
getline(cin, title);
cout << "Размер списка: ";
size_t size;
cin >> size;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Poll box(title, size);
Variant var;
do {
cout << "Текст: ";
string text;
getline(cin, text);
var.text(text);
cout << "Количество: ";
size_t count;
cin >> count;
var.count(count);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} while (box.add(var));
cout << "Для количественного вывода нажмите 1\nДля процентного вывода нажмите 2 ";
auto choice = _getch();
cout.put('\n');
if (choice == '1') box.show_count();
else if (choice == '2') box.show_percent();
else puts("Ошибка выбора!");
system("pause > nul");
}
#include <string>
#include <iomanip>
#include <conio.h>
using namespace std;
class Variant {
public:
Variant() : text_("-"), count_(0U) {}
Variant(const string& text, const size_t count) : text_(text), count_(count) {}
void text(string& value) { text_ = value; }
void count(size_t value) { count_ = value; }
string text()const { return text_; }
size_t count()const { return count_; }
private:
string text_;
size_t count_;
friend ostream& operator<<(ostream& out, const Variant& var) {
out << var.text_ << ": " << var.count_;
return out;
}
};
class Poll {
public:
Poll(const string& title, const size_t size) : title_(title), size_(size), pvar_(new Variant[size_]),pos_(0U), type_(true) {}
Poll(const Poll& poll) {
title_ = poll.title_;
size_ = poll.size_;
type_ = poll.type_;
pvar_ = new Variant[size_];
for (auto i = 0U; i < size_; ++i) pvar_[i] = poll.pvar_[i];
}
Poll& operator=(const Poll& poll) {
if (&poll != this) {
title_ = poll.title_;
size_ = poll.size_;
type_ = poll.type_;
pvar_ = new Variant[size_];
for (auto i = 0U; i < size_; ++i) pvar_[i] = poll.pvar_[i];
}
return *this;
}
~Poll() {
if (pvar_) {
delete[] pvar_;
pvar_ = nullptr;
}
}
bool add(const Variant& var) {
if (pos_ < size_) {
pvar_[pos_] = var;
++pos_;
}
return pos_ < size_;
}
void show_count() {
type_ = true;
cout << *this;
}
void show_percent() {
type_ = false;
cout << *this;
}
private:
string title_;
size_t size_;
Variant* pvar_;
size_t pos_;
bool type_;
double sum_()const {
auto s = 0U;
if (pvar_) for (auto i = 0U; i < size_; ++i) s += pvar_[i].count();
return s;
}
friend ostream& operator<<(ostream& out, const Poll& poll) {
out << "\t" << poll.title_ << ":\n";
if (poll.type_) for (auto i = 0U; i < poll.size_; ++i) cout << poll.pvar_[i] << '\n';
else {
auto sum = poll.sum_();
for (auto i = 0U; i < poll.size_; ++i) {
auto per = poll.pvar_[i].count() / sum * 100;
out << poll.pvar_[i].text() << ": " << fixed << setprecision(2) << per << "%\n";
}
}
return out;
}
};
int main() {
system("chcp 1251 > nul");
cout << "Название списка: ";
string title;
getline(cin, title);
cout << "Размер списка: ";
size_t size;
cin >> size;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Poll box(title, size);
Variant var;
do {
cout << "Текст: ";
string text;
getline(cin, text);
var.text(text);
cout << "Количество: ";
size_t count;
cin >> count;
var.count(count);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} while (box.add(var));
cout << "Для количественного вывода нажмите 1\nДля процентного вывода нажмите 2 ";
auto choice = _getch();
cout.put('\n');
if (choice == '1') box.show_count();
else if (choice == '2') box.show_percent();
else puts("Ошибка выбора!");
system("pause > nul");
}
Похожие вопросы
- Передача в метод класса указателя на функцию C++
- С++, Сделайте класс Triangle наследником класса Figure. Напишите программу, в которой будет считываться ..
- Написать программу на C++.Создать класс vector3d, задаваемый тройкой координат. Создать конструктор...
- Помогите понять отношения между классами / C/C++
- Лёгкое задание с классами C++
- Как в C++ продолжить классы разные сгруппировано в файлах .h и .cpp, при этом не переопределяя классы эти?
- Получить имена полей класса c++
- Работа с классами в C++
- C++ класс Реализация класс стека,
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
Это целый положительный ноль.