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

С++ Код виводить 5 найменших за кількістю товарів. Додайте у код виведення, щоб якщо 5 запис і інші записи у файлі мають однакову кількість, виводились і ці записи. Тобто 5 товар має кількість 10 і 7 товар - 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);
}​ ​​​

Ответы

Автор ответа: papelde44
0

Ответ:

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;

int min_num = -1; {

if (i == 6) {

}

if (a.num == min_num || 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 ;

}

else {

}

}

Line();

fclose(handmade_store);

}

```

Объяснение:

нужно изменить условие цикла while вместе i < = 5 на a.num == min_num


anastasiyafomina353: Щось ви зовсім не зрозуміло зробили. Та скобки у вас відкриваються та закриваються в якихось рандомних місцях
Похожие вопросы
Предмет: Математика, автор: Аноним