C/C++

Помогите написать программу на С++

Напишите программу, которая использует структуру для хранения следующих данных о погоде за конкретный месяц:
Общее количество осадков
Высокая температура
Низкая температура
Средняя температура
Программа должна иметь массив из 12 структур для хранения данных о погоде за весь год. Когда программа запускается, она должна просить пользователя вводить данные за каждый месяц. (Следует рассчитать среднюю температуру.) После ввода данных за все месяцы программа должна рассчитать и отобразить среднемесячное количество осадков, общее количество осадков за год, самую высокую и самую низкую температуры за год (и месяцы, в которых они произошли). , и среднее значение всех среднемесячных температур.
Проверка ввода: допускаются только температуры в диапазоне от –100 до +140 градусов по Фаренгейту.
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <array>
#include <numeric>
using namespace std;
float temperature(const char* msg, const float mn, const float mx) {
float value;
do {
cout << msg;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
} while (value < mn || value > mx);
return value;
}
unsigned precipitation(const char* msg) {
cout << msg;
unsigned value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
struct Month {
unsigned n;
unsigned p;
float mnt;
float mxt;
Month() : n(0), p(0), mnt(0), mxt(0) {}
float mdt() {
return (mnt + mxt) / 2.0F;
}
const char* month()const {
return months[n];
}
friend bool operator<(const Month& a, const Month& b) {
return a.mnt < b.mnt;
}
private:
inline static const char* months[] = {
"",
"январь",
"февраль",
"март",
"апрель",
"май",
"июнь",
"июль",
"август",
"сентябрь",
"октябрь",
"ноябрь",
"декабрь"
};
};
Month month(const unsigned number) {
static const auto mn = -100.0F;
static const auto mx = 150.0F;
Month m;
m.n = number;
cout << "Данные за " << m.month() << '\n';
m.p = precipitation("Количество осадков: ");
m.mnt = temperature("Минимальная температура: ", mn, mx);
do {
m.mxt = temperature("Максимальная температура: ", mn, mx);
} while (m.mxt < m.mnt);
puts("");
return m;
}
int main() {
system("chcp 1251 > nul");
array<Month, 12> year;
auto number = 0U;
for (auto& item : year) item = month(++number);
const auto acc_p = [](unsigned acc, Month& m) { return acc += m.p; };
const auto sum_p = accumulate(year.begin(), year.end(), 0U, acc_p);
const auto avg_p = sum_p / year.size();
const auto [pmn, pmx] = minmax_element(year.begin(), year.end());
const auto acc_t = [](float acc, Month& m) { return acc += m.mdt(); };
const auto sum_t = accumulate(year.begin(), year.end(), 0.0F, acc_t);
const auto avg_t = sum_t / year.size();
cout << fixed << setprecision(1)
<< "Среднемесячное количество осадков: " << avg_p << '\n'
<< "Общее количество осадков за год: " << sum_p << '\n'
<< "Самая высокая температура за год: " << pmx->mxt << "F, " << pmx->month() << '\n'
<< "Самая низкая температура за год: " << pmn->mnt << "F, " << pmn->month() << '\n'
<< "Среднее значение всех среднемесячных температур: " << avg_t << "F\n";
system("pause > nul");
}
АМ
Алексанр Михалкин
50 442
Лучший ответ