C/C++
Задача Программирование C++ Нужна программа на С++
Заданы натуральное К и вещественное положительное N. Задано произвольное число записей вида { номер телефона, использованный за месяц трафик }, определить для каждого номера, какую сумму должен заплатить абонент за интернет, если K Гб и менее за месяц предоставляются бесплатно, а все что выше округляется и взимается N рублей за 1 Гбайт.
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <conio.h>
using namespace std;
struct Abonent {
string phone;
double traffic;
Abonent() : traffic(0) {}
double to_pay(double rate, unsigned discont = 0)const {
auto gb = static_cast<unsigned>(round(traffic - discont)) * rate;
return gb > 0? gb : 0;
}
};
class Abonents {
public:
Abonents() : rate_(0), discont_(0) {}
void add(const Abonent& a) {
box_.push_back(a);
}
void add(Abonent&& a) {
box_.emplace_back(a);
}
void rate(double value) {
rate_ = value;
}
void discont(unsigned value) {
discont_ = value;
}
void output()const {
cout.setf(ios::fixed);
cout.precision(2);
for (const auto& i : box_) {
cout << i.phone << " =" << i.to_pay(rate_, discont_) << '\n';
}
cout.precision(8);
cout.unsetf(ios::fixed);
}
private:
double rate_;
unsigned discont_;
vector<Abonent> box_;
};
void flush() {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
Abonent abonent() {
Abonent a;
cout << "Номер телефона: ";
getline(cin, a.phone);
cout << "Суммарный трафик за месяц: ";
cin >> a.traffic;
flush();
return a;
}
int main() {
system("chcp 1251 > nul");
Abonents box;
cout << "Лимит бесплатного трафика (в ГБ): ";
unsigned k;
cin >> k;
box.discont(k);
cout << "Цена за 1 ГБ сверх установленного лимита: ";
double n;
cin >> n;
box.rate(n);
flush();
while (true) {
cout << "Для выхода нажмите клаишу Esc\nДля добавления записи любую другую клаишу... ";
if (_getch() == 0x1B) break;
puts("");
box.add(abonent());
}
system("cls");
box.output();
system("pause > nul");
}
#include <iomanip>
#include <vector>
#include <string>
#include <conio.h>
using namespace std;
struct Abonent {
string phone;
double traffic;
Abonent() : traffic(0) {}
double to_pay(double rate, unsigned discont = 0)const {
auto gb = static_cast<unsigned>(round(traffic - discont)) * rate;
return gb > 0? gb : 0;
}
};
class Abonents {
public:
Abonents() : rate_(0), discont_(0) {}
void add(const Abonent& a) {
box_.push_back(a);
}
void add(Abonent&& a) {
box_.emplace_back(a);
}
void rate(double value) {
rate_ = value;
}
void discont(unsigned value) {
discont_ = value;
}
void output()const {
cout.setf(ios::fixed);
cout.precision(2);
for (const auto& i : box_) {
cout << i.phone << " =" << i.to_pay(rate_, discont_) << '\n';
}
cout.precision(8);
cout.unsetf(ios::fixed);
}
private:
double rate_;
unsigned discont_;
vector<Abonent> box_;
};
void flush() {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
Abonent abonent() {
Abonent a;
cout << "Номер телефона: ";
getline(cin, a.phone);
cout << "Суммарный трафик за месяц: ";
cin >> a.traffic;
flush();
return a;
}
int main() {
system("chcp 1251 > nul");
Abonents box;
cout << "Лимит бесплатного трафика (в ГБ): ";
unsigned k;
cin >> k;
box.discont(k);
cout << "Цена за 1 ГБ сверх установленного лимита: ";
double n;
cin >> n;
box.rate(n);
flush();
while (true) {
cout << "Для выхода нажмите клаишу Esc\nДля добавления записи любую другую клаишу... ";
if (_getch() == 0x1B) break;
puts("");
box.add(abonent());
}
system("cls");
box.output();
system("pause > nul");
}
Похожие вопросы
- Программирование C++, написание программ
- Программирование C++, нужна помощь)
- Задача по c++ на векторы. Часть программы написана. Нужны правки.
- Задача по программированию C++
- Задача по C++
- Задача на C++ (Остатки).
- Задача на языке программирования C++
- Нужна помощь при решении задачи в c++
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Что такое #include <iostream>, std using namespace std В языке программирования C++?