namespace Feladat07_NapelemHaviTermeles { internal class Program { static void Main(string[] args) { const int NAPOK = 30; const double MIN_TERMELES = 0.0; // teljesen borult nap const double MAX_TERMELES = 38.0; // derült nyári nap const double NAPOS_HATAR = 30.0; const double BORULT_HATAR = 5.0; Random random = new Random(); Console.WriteLine("=== Napelemes rendszer – havi termelési napló ==="); Console.WriteLine(); double osszTermeles = 0; double legjobbNapTermelese = MIN_TERMELES - 1; double leggyengebbNapTermelese = MAX_TERMELES + 1; int legjobbNap = 0; int leggyengebbNap = 0; int naposNapok = 0; int borultNapok = 0; double elozoNap = 0; double legnagyobbValtozas = -1; int valtozasNapja = 0; for (int nap = 1; nap <= NAPOK; nap++) { double termeles = VeletlenTermeles(random, MIN_TERMELES, MAX_TERMELES); Console.WriteLine($"{nap}. nap: {termeles:F1} kWh"); osszTermeles += termeles; if (termeles > legjobbNapTermelese) { legjobbNapTermelese = termeles; legjobbNap = nap; } if (termeles < leggyengebbNapTermelese) { leggyengebbNapTermelese = termeles; leggyengebbNap = nap; } if (termeles >= NAPOS_HATAR) { naposNapok++; } if (termeles < BORULT_HATAR) { borultNapok++; } // Az előző nap termelése egy változóban megmarad, így összevethető a maival. if (nap > 1) { double valtozas = Elteres(termeles, elozoNap); if (valtozas > legnagyobbValtozas) { legnagyobbValtozas = valtozas; valtozasNapja = nap; } } elozoNap = termeles; } double atlag = osszTermeles / NAPOK; Console.WriteLine(); Console.WriteLine("--- Havi összegzés ---"); Console.WriteLine($"Havi összes termelés: {osszTermeles:F1} kWh"); Console.WriteLine($"Napi átlagtermelés: {atlag:F2} kWh"); Console.WriteLine($"Legjobb nap: {legjobbNap}. ({legjobbNapTermelese:F1} kWh)"); Console.WriteLine($"Leggyengébb nap: {leggyengebbNap}. ({leggyengebbNapTermelese:F1} kWh)"); Console.WriteLine($"Napos napok száma (legalább {NAPOS_HATAR:F1} kWh): {naposNapok} nap"); Console.WriteLine($"Borult napok száma ({BORULT_HATAR:F1} kWh alatt): {borultNapok} nap"); Console.WriteLine($"A legnagyobb napi eltérés {legnagyobbValtozas:F1} kWh volt a(z) {valtozasNapja}. napon."); } // A [0,1) tartományt a kívánt termelési tartományra nyújtjuk és toljuk el. static double VeletlenTermeles(Random random, double minimum, double maximum) { return Math.Round(random.NextDouble() * (maximum - minimum) + minimum, 1); } // Két érték eltérése előjel nélkül. static double Elteres(double a, double b) { double kulonbseg = a - b; if (kulonbseg < 0) { kulonbseg = -kulonbseg; } return kulonbseg; } } }