Продажи на небольшом рынке регистрировались и сохранялись в текстовом файле, состоящем из неизвестного количества строк (порядок, в котором были сохранены строки, также неизвестен). Каждая такая строка имеет следующий формат:
<товар> <категория> <цена>
где:
• <продукт> - название приобретенного продукта (строка длиной не более 30 символов).
• <категория> - это код, состоящий ровно из 3 символов, обозначающий категорию купленного товара (например, еда, одежда и т. Д.). Предположим, что не более 100 различных категорий.
• <цена> - сумма денег, потраченная на покупку (реальная стоимость).
Предстоящие задачи:
1) Откройте входной файл и прочтите из входного файла соответствующую информацию
2) Сгенерируйте информацию с некоторой статистикой о покупках, разделенной по категориям продуктов (т. е. каждая категория должна появляться в файле только один раз). В частности, каждая строка этого файла должна иметь следующий формат:
<категория> <число> <итого> <среднее>
где:
• <число> - общее количество покупок товаров для данной категории.
• указывает общие деньги, потраченные на все покупки для этой категории.
• <среднее> - это средняя сумма денег, используемая для покупки такого рода товаров.
3) Записать сгенерированную информацию из задачи (2) в выходной файл
Напишите программу на C ++,способную генерировать второй текстовый файл со статистикой покупок, разделенной по категориям продуктов (т. е. каждая категория должна появляться в файле только один раз).
Пример: Предположим следующее содержимое для входного файла:
pastaPPP fod 0.82
jeansJJJ clo 39.90
oilLLL fod 6.76
shampooSSS mis 4.30
trousersTTT clo 23.45
breadBBB fod 1.29
Затем содержимое выходного файла должно быть (порядок, в котором появляются категории не имеет значения):
fod 3 8.87 2.96
clo 2 63.35 31.68
mis 1 4.30 4,30
C/C++
Помогите написать программу на С++
Для входного файла input.txt будет сформирован выходной файл output.txt
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
#include <map>
#include <tuple>
#include <iomanip>
using namespace std;
struct Product {
string name;
string code;
double cost;
Product() : cost(0) {}
};
class Shop {
public:
bool load(const char* path) {
ifstream file(path);
if (file.is_open()) {
string line;
while (getline(file, line)) {
istringstream iss(line);
Product item;
iss >> item.name >> item.code >> item.cost;
box.emplace_back(move(item));
}
file.close();
} else return false;
return true;
}
bool save(const char* path) {
if (box.empty()) return false;
map<string, tuple<int, double, double>> data;
tuple<int, double, double> item;
for (const auto& x : box) {
item = { 1, x.cost, x.cost };
if (!data.count(x.code)) {
data[x.code] = item;
} else {
auto& [quantity, sum, average] = data[x.code];
get<0>(item) += quantity;
get<1>(item) += sum;
get<2>(item) = get<1>(item) / get<0>(item) + 1e-12;
data.erase(x.code);
data[x.code] = item;
}
}
ofstream file(path);
if (file.is_open()) {
for (const auto& [key, value] : data) {
auto& [quantity, sum, average] = value;
file << fixed << setprecision(2);
file << key << setw(5) << quantity << setw(10) << sum << setw(10) << average << '\n';
}
file.close();
} else return false;
return true;
}
private:
vector<Product> box;
};
int main() {
Shop shop;
if (shop.load("input.txt") && shop.save("output.txt")) puts("Success!");
else puts("Failure!!");
system("pause > nul");
}
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
#include <map>
#include <tuple>
#include <iomanip>
using namespace std;
struct Product {
string name;
string code;
double cost;
Product() : cost(0) {}
};
class Shop {
public:
bool load(const char* path) {
ifstream file(path);
if (file.is_open()) {
string line;
while (getline(file, line)) {
istringstream iss(line);
Product item;
iss >> item.name >> item.code >> item.cost;
box.emplace_back(move(item));
}
file.close();
} else return false;
return true;
}
bool save(const char* path) {
if (box.empty()) return false;
map<string, tuple<int, double, double>> data;
tuple<int, double, double> item;
for (const auto& x : box) {
item = { 1, x.cost, x.cost };
if (!data.count(x.code)) {
data[x.code] = item;
} else {
auto& [quantity, sum, average] = data[x.code];
get<0>(item) += quantity;
get<1>(item) += sum;
get<2>(item) = get<1>(item) / get<0>(item) + 1e-12;
data.erase(x.code);
data[x.code] = item;
}
}
ofstream file(path);
if (file.is_open()) {
for (const auto& [key, value] : data) {
auto& [quantity, sum, average] = value;
file << fixed << setprecision(2);
file << key << setw(5) << quantity << setw(10) << sum << setw(10) << average << '\n';
}
file.close();
} else return false;
return true;
}
private:
vector<Product> box;
};
int main() {
Shop shop;
if (shop.load("input.txt") && shop.save("output.txt")) puts("Success!");
else puts("Failure!!");
system("pause > nul");
}
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <map>
using namespace std;
struct Categories {
int num = 0; // количество
double sum = 0.0; // итого
};
int main() {
ifstream f_in("input.txt");
string product, category;
double price;
map<string, Categories> products;
while (f_in >> product >> category >> price) {
++products[category].num;
products[category].sum += price;
}
f_in.close();
ofstream f_out("output.txt");
for (const auto& [category, prod] : products) {
f_out << category << " " << prod.num << " ";
f_out << fixed << setprecision(2) << prod.sum << " " << prod.sum / prod.num << "\n";
}
f_out.close();
return 0;
}
#include <iomanip>
#include <fstream>
#include <string>
#include <map>
using namespace std;
struct Categories {
int num = 0; // количество
double sum = 0.0; // итого
};
int main() {
ifstream f_in("input.txt");
string product, category;
double price;
map<string, Categories> products;
while (f_in >> product >> category >> price) {
++products[category].num;
products[category].sum += price;
}
f_in.close();
ofstream f_out("output.txt");
for (const auto& [category, prod] : products) {
f_out << category << " " << prod.num << " ";
f_out << fixed << setprecision(2) << prod.sum << " " << prod.sum / prod.num << "\n";
}
f_out.close();
return 0;
}
Похожие вопросы
- Помогите написать программу на С
- Помогите написать программу на C++
- Помогите написать программу на с++
- Помогите написать программу на с++
- Помогите написать программу
- Помогите написать программу на С++
- С++. Структуры(struct). Помогите написать программу
- Помогите написать программу на С++
- Пожалуйста, помогите написать программу на С++
- Помогите написать программу на СИ