Загрузка данных
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream plik("temp.txt");
ofstream wynik("zad_4.txt");
// Od 1779 do 2006 roku jest dokładnie 228 lat
int lata[228];
double temp[228][12];
// Wczytywanie danych z pliku
for (int i = 0; i < 228; i++) {
plik >> lata[i];
for (int j = 0; j < 12; j++) {
plik >> temp[i][j];
}
}
// ==========================================
// Podpunkt a) i b) - Najniższa i najwyższa średnia roczna
// ==========================================
double min_srednia = 999999.0;
int rok_min_srednia = 0;
double max_srednia = -999999.0;
int rok_max_srednia = 0;
for (int i = 0; i < 228; i++) {
double suma_roku = 0;
for (int j = 0; j < 12; j++) {
suma_roku += temp[i][j];
}
double srednia_roku = suma_roku / 12.0;
// Szukanie minimum
if (srednia_roku < min_srednia) {
min_srednia = srednia_roku;
rok_min_srednia = lata[i];
}
// Szukanie maksimum
if (srednia_roku > max_srednia) {
max_srednia = srednia_roku;
rok_max_srednia = lata[i];
}
}
// Ręczne formatowanie do 2 miejsc po przecinku bez iomanip
// (zaokrąglanie: mnożymy przez 100, dodajemy 0.5 dla dodatnich / odejmujemy 0.5 dla ujemnych, rzutujemy na int i dzielimy przez 100.0)
double min_zaokr = min_srednia;
if (min_zaokr >= 0) min_zaokr = (int)(min_zaokr * 100.0 + 0.5) / 100.0;
else min_zaokr = (int)(min_zaokr * 100.0 - 0.5) / 100.0;
double max_zaokr = max_srednia;
if (max_zaokr >= 0) max_zaokr = (int)(max_zaokr * 100.0 + 0.5) / 100.0;
else max_zaokr = (int)(max_zaokr * 100.0 - 0.5) / 100.0;
wynik << "a) " << min_zaokr << " " << rok_min_srednia << endl;
wynik << "b) " << max_zaokr << " " << rok_max_srednia << endl;
// ==========================================
// Podpunkt c) - Minimalna i maksymalna temperatura dla każdego miesiąca
// ==========================================
wynik << "c)" << endl;
for (int m = 0; m < 12; m++) {
double min_miesiac = 999999.0;
double max_miesiac = -999999.0;
for (int i = 0; i < 228; i++) {
if (temp[i][m] < min_miesiac) {
min_miesiac = temp[i][m];
}
if (temp[i][m] > max_miesiac) {
max_miesiac = temp[i][m];
}
}
wynik << "Miesiac " << m + 1 << ": Min = " << min_miesiac << ", Max = " << max_miesiac << endl;
}
// ==========================================
// Podpunkt d) - Najdłuższy malejący ciąg średnich temperatur sierpnia
// ==========================================
// Indeks 7 odpowiada sierpniowi (styczeń = 0, luty = 1, ..., sierpień = 7)
int najlepsza_dlugosc = 1;
int najlepszy_rok_pocz = lata[0];
int najlepszy_rok_kon = lata[0];
int biezaca_dlugosc = 1;
int biezacy_rok_pocz = lata[0];
for (int i = 1; i < 228; i++) {
if (temp[i][7] < temp[i-1][7]) {
biezaca_dlugosc++;
} else {
if (biezaca_dlugosc > najlepsza_dlugosc) {
najlepsza_dlugosc = biezaca_dlugosc;
najlepszy_rok_pocz = biezacy_rok_pocz;
najlepszy_rok_kon = lata[i-1];
}
biezaca_dlugosc = 1;
biezacy_rok_pocz = lata[i];
}
}
if (biezaca_dlugosc > najlepsza_dlugosc) {
najlepsza_dlugosc = biezaca_dlugosc;
najlepszy_rok_pocz = biezacy_rok_pocz;
najlepszy_rok_kon = lata[227];
}
wynik << "d) Rok poczatkowy: " << najlepszy_rok_pocz
<< ", Rok koncowy: " << najlepszy_rok_kon
<< ", Dlugosc: " << najlepsza_dlugosc << endl;
plik.close();
wynik.close();
return 0;
}