Предмет: Информатика, автор: anastasiyafomina353

С++ Код виводить 5 найменших за кількістю товарів. Додайте у код виведення, щоб якщо 5 запис і інші записи у файлі мають однакову кількість, виводились також ці записи. Тобто 5 товар має кількість 10 і 6 товар - 10. Виводилось не 5 записів, а 6.

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);
}​ ​​​​​

Ответы

Автор ответа: листиккк
0

Ответ:

void FiveProductLeast(const char* fn) {

   Handmade arr[100];

   OutputTovar(fn);

   int size = AmountTovar(fn);

   if (size == 0) {

       cout << "\nВідсутні дані про товари!\n";

       return;

   }

   if (size < 5) {

       cout << "\nУ файлі менше 5 записів!\n";

   }

   FILE* handmade_store = nullptr;

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

   fread(arr, sizeof(Handmade), size, handmade_store);

   // Сортування масиву

   for (size_t i = 0; i < size - 1; i++) {

       for (size_t j = i + 1; j < size; j++) {

           if (arr[i].num > arr[j].num) {

               Handmade temp = arr[i];

               arr[i] = arr[j];

               arr[j] = temp;

           }

       }

   }

   // Знаходження найменшої кількості товарів

   int min_count = arr[0].num;

   for (size_t i = 1; i < size; i++) {

       if (arr[i].num > min_count) {

           break;

       }

   }

   // Виведення записів з найменшою кількістю товарів

   int count = 0;

   for (size_t i = 0; i < size; i++) {

       if (arr[i].num == min_count) {

           cout << "| " << setw(3) << right << count + 1 << " "

               << "| " << setw(14) << left << arr[i].code << " "

               << "| " << setw(26) << left << arr[i].tovar << " "

               << "| " << setw(13) << left << arr[i].category << " "

               << "| " << setw(17) << left << arr[i].oznaka << " "

               << "| " << setw(8) << right << fixed << setprecision(3) << arr[i].len << " "

               << "| " << setw(5) << right << arr[i].num << " "

               << "| " << setw(17) << left << arr[i].country << " "

               << "| " << setw(9) << right << setprecision(2) << arr[i].cost << " "

               << " |" << endl;

           count++;

           if (count == 5) {

               break;

           }

       }

   }

   Line();

   fclose(handmade_store);

}

Объяснение:

Необхідне оновлення коду для додавання записів з однаковою кількістю товарів.

Можна лучший ответ, пожалуйста?


anastasiyafomina353: Я працюю з файлом і якщо я зроблю масив, це буде обмежувати програму. Можливо зробити з мови кодом це?
листиккк: Так, в коді можна створити динамічний масив, кількість його елементів може бути визначена під час запуску програми або вводитись з клавіатури. Це дозволить уникнути обмежень, пов'язаних з фіксованою кількістю елементів в масиві, як у випадку зі зберіганням даних в файлі.
Похожие вопросы
Предмет: Английский язык, автор: kramatorskarina
Предмет: Биология, автор: vv19051994