С++ Перетворіть код так, щоб виводилось 5 найменших за кількістю товара. Кількість товару - a.num
void FiveProductLeast(const char* fn) {
Handmade a, b;
int n = 0;
int amount = AmountTovar(fn);
fopen_s(&handmade_store, fn, "rb");
do {
fread(&a, sizeof(Handmade), 1, handmade_store);
for (size_t i = 0; i < amount - 1; i++)
{
fseek(handmade_store, sizeof(Handmade) * (i + 1), SEEK_SET);
fread(&b, sizeof(Handmade), 1, handmade_store);
n++;
if (a.num > b.num) {
for (int i = 0; i < 5; i++) {
Hat();
cout << "| " << setw(3) << right << n << " "
<< "| " << setw(14) << left << a.code << " "
<< "| " << setw(26) << left << a.tovar << " "
<< "| " << setw(13) << left << a.category << " "
<< "| " << setw(17) << left << a.oznaka << " "
<< "| " << setw(8) << right << fixed << setprecision(3) << a.len << " "
<< "| " << setw(5) << right << a.num << " "
<< "| " << setw(17) << left << a.country << " "
<< "| " << setw(9) << right << setprecision(2) << a.cost << " "
<< " |" << endl;
Line();
}
}
}
} while (true);
fclose(handmade_store);
}
Answers & Comments
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
#include <fstream>
using namespace std;
struct Handmade {
char code[15];
char tovar[27];
char category[14];
char oznaka[18];
double len;
int num;
char country[18];
double cost;
};
void Hat() {
// Реалізація функції Hat() для виведення заголовків таблиці.
}
void Line() {
// Реалізація функції Line() для виведення розділювача.
}
int AmountTovar(const char* fn) {
// Реалізація функції AmountTovar() для розрахунку кількості товарів у файлі.
}
bool compareByNum(const Handmade& a, const Handmade& b) {
return a.num < b.num;
}
void FiveProductLeast(const char* fn) {
ifstream handmade_store(fn, ios::binary);
vector<Handmade> products;
Handmade temp;
while (handmade_store.read(reinterpret_cast<char*>(&temp), sizeof(Handmade))) {
products.push_back(temp);
}
sort(products.begin(), products.end(), compareByNum);
for (size_t i = 0; i < 5 && i < products.size(); i++) {
Handmade& a = products[i];
Hat();
cout << "| " << setw(3) << right << (i + 1) << " "
<< "| " << setw(14) << left << a.code << " "
<< "| " << setw(26) << left << a.tovar << " "
<< "| " << setw(13) << left << a.category << " "
<< "| " << setw(17) << left << a.oznaka << " "
<< "| " << setw(8) << right << fixed << setprecision(3) << a.len << " "
<< "| " << setw(5) << right << a.num << " "
<< "| " << setw(17) << left << a.country << " "
<< "| " << setw(9) << right << setprecision(2) << a.cost << " "
<< " |" << endl;
Line();
}
handmade_store.close();
}