• Предмет: Информатика
  • Автор: anastasiyafomina353
  • Вопрос задан 1 год назад

С++ Срочно! Перетворіть виведення записей таким чином, щоб виводилось 5 найменших за кількістю товарів, але якщо є товари у яких кількість совпадає з 5 записом, вони теж виводились.(поки що він просто виводе 5 записей)

В коді вже є сортування, попрацюйте тільки над виведеннням. Дякую)

void FiveProductLeast(const char* fn) {
Handmade a, c;
OutputTovar(fn);
int amount = AmountTovar(fn);
fopen_s(&handmade_store, fn, "r+b");
do {
bool flag = false;
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(&c, sizeof(Handmade), 1, handmade_store);
if (a.num > c.num) {
fseek(handmade_store, sizeof(Handmade) * i, SEEK_SET);
fwrite(&c, sizeof(Handmade), 1, handmade_store);
fwrite(&a, sizeof(Handmade), 1, handmade_store);
flag = true;
}
else {
a = c;
}
}
if (!flag) {
break;
}
else {
fseek(handmade_store, 0, SEEK_SET);
}
} while (true);
fclose(handmade_store);

Hat();
fopen_s(&handmade_store, fn, "rb");
int i = 1;
while (i <= 5 && fread(&a, sizeof(Handmade), 1, handmade_store)) {
cout << "| " << setw(3) << right << i++ << " "
<< "| " << 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();
fclose(handmade_store);
}​ ​​​​​​

Ответы

Ответ дал: 0124567
0

Hat();

fopen_s(&handmade_store, fn, "rb");

int i = 1;

int least_num = 0;

int count = 0;

while (i <= 5 && fread(&a, sizeof(Handmade), 1, handmade_store)) {

if (count == 0) {

least_num = a.num;

}

if (a.num <= least_num) {

cout << "| " << setw(3) << right << i++ << " "

<< "| " << 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;

count++;

}

else if (count > 0 && a.num == least_num) {

cout << "| " << setw(3) << right << i++ << " "

<< "| " << 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;

count++;

}

}

fclose(handmade_store);

if (count < 5) {

cout << "There are no enough records to show." << endl;

}

В данном коде least_num устанавливается в ноль по умолчанию для того, чтобы на первой итерации цикла while была возможность сравнить значение a.num с нулем и вывести первый элемент таблицы. Это сделано для того, чтобы не было ошибки при выводе первого элемента таблицы, если a.num будет равен первому элементу в файле.

В общем случае, значение least_num должно быть установлено на максимальное возможное значение целого числа, чтобы гарантировать вывод первых пяти записей таблицы, даже если все они имеют одинаковое значение поля num.


anastasiyafomina353: Тепер не виводить жодний запис. Ви впевнені в правильності свого коду?
0124567: Какая ошибка
anastasiyafomina353: Вы написали условие для вывода записей if(a.num==least_num) . Однако least_num =0
anastasiyafomina353: И ни одину запись не выводит при вашем коде
0124567: Изменил
anastasiyafomina353: тепер выводит только первую запись
0124567: Попробуйте через нейросеть ввести ваш запрос
0124567: ChatGPT или другие
0124567: Они вам дадут код
Ответ дал: anjikkingg
0

Відповідь:

Hat();

fopen_s(&handmade_store, fn, "rb");

int i = 1;

int least_count = 0;

int least_num = -1;

while (i <= amount && fread(&a, sizeof(Handmade), 1, handmade_store)) {

   if (least_count == 0) {

       least_count = a.num;

       least_num = a.num;

   }

   if (a.num <= least_count && i <= 5) {

       cout << "| " << setw(3) << right << i++ << " "

           << "| " << 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;

       least_count = a.num;

   }

   else if (a.num == least_num) {

       cout << "| " << setw(3) << right << i++ << " "

           << "| " << 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();

fclose(handmade_store);


anastasiyafomina353: виводить тільки перший запис(
anastasiyafomina353: що робити?
anastasiyafomina353: можлива в вашому коді є якась помилка?
Вас заинтересует