С++
Прописала программу, которая должна указывать самый жаркий и самый прохладный день и сортировать от меньшего к большему (ну или наоборот, неважно). Программа работает некорректно, а найти ошибку и исправить не могу, второй день голову ломаю. Помогите, пожалуйста!
Код:
#include <iostream>
using namespace std;
// функція чистить буфер вводу при неправильному вводі
void restore_stream(std::istream& stream)
{
stream.clear();
stream.ignore(numeric_limits<streamsize>::max(), '\n');
}
// Функция которая находит максимальную температуру и считает их количество
float tmax(float temperature[], int n)
{
float max, sumMax = 0;
max = temperature[0];
for (int i = 1; i < n; ++i) {
if (temperature[i] > max) {
max = temperature[i];
}
}
for (int i = 0; i < n; ++i) {
if (temperature[i] == max) {
++sumMax;
}
}
return sumMax;
}
// Функция которая находит минимальную температуру и считает их количество
float tmin(float temperature[], int n) {
float min, sumMin = 0;
min = temperature[0];
for (int i = 0; i < n; ++i) {
if (temperature[i] < min) {
min = temperature[i];
}
}
for (int i = 0; i < n; ++i) {
if (temperature[i] == min) {
++sumMin;
}
}
return sumMin;
}
// Сортировка
void sort(float temperature[], int n)
{
int left = 1;
int right = n - 1;
float t = 0.;
while (left <= right)
{
for (int i = right; i >= left; i--) {
if (temperature[i - 1] > temperature[i]) {
t = temperature[i];
temperature[i] = temperature[i - 1];
temperature[i - 1] = t;
left++;
}
}
for (int i = left; i <= right; i++) {
if (temperature[i - 1] > temperature[i]) {
t = temperature[i];
temperature[i] = temperature[i - 1];
temperature[i - 1] = t;
right--;
}
}
}
}
int main() {
int const N = 100;
// Mасив із значеннями точок осі Х
float temperature[N] = {};
// Тут мы вводим н маленькую, это будет количество элементов(дней) в масиве
// а дальше проверка правильности введеной н
int n;
bool in_error = true;
while (in_error) {
cout << " Enter amount of days: ";
if (!(cin >> n)) {
cout << "Error, try again.\n";
restore_stream(cin);
}
else {
if (n <= 0 || n > N)
{
cout << "n must be greater and not equal to 0 and less N!\n";
}
else {
in_error = false;
};
};
};
// Ввод и проверка правильности ввода температури
for (int i = 0; i < n;) {
cout << "Day(" << i + 1 << ") : ";
if (cin >> temperature[i]) {
++i;
}
else {
cout << "Error, try again.\n";
restore_stream(cin);
};
};
// Задание А
float min = temperature[0];
float max = temperature[0];
float sumMax = 0.;
float sumMin = 0.;
sumMax = tmax(temperature, n);
sumMin = tmin(temperature, n);
cout << "The maximum temperature was during " << sumMax << " days.\n";
cout << "The minimum temperature was during " << sumMin << " days.\n";
// Сортировка
sort(temperature, n);
cout << "Sorted array:\n";
for (int i = 0; i < n; ++i) {
cout << "Temperature(" << i + 1 << "): " << temperature[i] << endl;
}
return 0;
}