Помогите исправить пожалуйста код. Он должен выводить отсортированную табличку. Проблема в том, что табличка НЕ сортируется
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <Windows.h>
using namespace std;
struct litak {
char tup[50];
char reis[50];
int vutrat;
int kilkist;
float serednVar;
};
void Tabl(litak *x,int y)
{
float nomer = 1.2;
int S1 = 0;
int S2 = 0;
float S3 = 0;
for (int i = 0; i < y; i++) {
x[i].serednVar = x[i].vutrat / x[i].kilkist;
S1 += x[i].vutrat;
S2 += x[i].kilkist;
S3 += x[i].serednVar;
}
cout.setf(ios::left);
for (int i = 0; i < 97; i++) {
cout << '_';
}
cout << endl;
cout << '|' << setw(10) << "№," << setw(15) << "Тип" << setw(15) << "Рейс" << setw(15) << "Витрати" << setw(20) << "Кількість" << setw(20) << "Середня" << setw(21) << '|' << endl;
cout << '|' << setw(10) << "з/п" << setw(30) << "літака" << setw(15) << "на рейс" << setw(20) << "пасажирів" << setw(20) << "вартість (грн)" << setw(21) << '|' << endl;
cout << '|';
for (int i = 0; i < 95; i++) {
cout << '-';
}
cout << '|';
cout << endl;
for (int i = 0; i <y; i++) {
cout << '|' << setw(10) << nomer << setw(15) << x[i].tup << setw(15) << x[i].reis;
cout << setw(15) << x[i].vutrat << setw(20) << x[i].kilkist << setw(20) << x[i].serednVar << setw(21) << '|' << endl;
nomer += 0.1;
}
cout << '|';
for (int i = 0; i < 95; i++) {
cout << '-';
}
cout << '|';
cout << endl;
cout << setw(11)<< '|' << setw(30) << "Разом" << setw(15) << S1 << setw(20) << S2 << setw(20) << S3 << '|' << endl;
cout << '|';
for (int i = 0; i < 95; i++) {
cout << '_';
}
cout << '|';
cout << endl;
cout << "Виписка: " << endl;
cout << "Середні витрати на рейс становлять: " << S1 << endl;
cout << "Середня кількість пасажирів: " << S2 << endl;
cout << "Середня вартість авіаперельотів(одної людини): " << S3 << endl;
}
void sortirov(litak *x, int y) {
int V, K;
float S;
for (int i = 0; i < y - 1; i++) {
for (int j = 0; j < y - i - 1; j++) {
if (x[j].serednVar > x[j+1].serednVar) {
V = x[j].vutrat;
K = x[j].kilkist;
S = x[j].serednVar;
x[j].vutrat = x[j + 1].vutrat;
x[j].kilkist = x[j + 1].kilkist;
x[j].serednVar = x[j + 1].serednVar;
x[j + 1].vutrat = V;
x[j + 1].kilkist = K;
x[j + 1].serednVar = S;
}
}
}
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n;
cout << "Ведіть кількість авіаперельотів: ";
cin >> n;
cin.ignore();
litak* zurnal;
zurnal = new litak[n];
for (int i = 0; i < n; i++) {
cout << "Ведіть тип літака: ";
cin.getline(zurnal[i].tup, 25);
cout << "Ведіть рейс літака: ";
cin.getline(zurnal[i].reis, 25);
cout << "Ведіть витрати на рейс: ";
cin >> zurnal[i].vutrat;
cout << "Ведіть кількість пасажирів: ";
cin >> zurnal[i].kilkist;
cin.ignore();
}
int Vutrat;
int Kilkist;
float SerednVar;
sortirov(zurnal,n);
Tabl(zurnal,n);
return 0;
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Вы среднюю стоимость вычисляете только при выводе в Tabl. А сортируете раньше просто нули (или случайный мусор в памяти).
Посчитать можно сразу при вводе.
cout << "Ведіть кількість пасажирів: ";
cin >> zurnal[i].kilkist;
zurnal[i].serednVar = ( float ) ( zurnal[i].vutrat ) / zurnal[i].kilkist;
cin.ignore();
Добавил ( float ) чтобы не было целочисленного деления.
