public void OnMegrendelesElkeszult(LancoltLista <ZoldTerulet> T) { if (MegrendelesElkeszult != null) { MegrendelesElkeszult(T); } }
static void Main(string[] args) { int MEGRENDELOK_SZAMA = 10; int GYEPELEMEK_SZAMA = 10000; Console.WriteLine("\n***START***"); List <Megrendelo> megrendeloLista = MegrendeloGenerator(MEGRENDELOK_SZAMA); megrendeloLista.Sort(); // minél több megrendelő kiszolgálása érdekében sorbarendezés növekvő sorrendben LancoltLista <IGyepElem> gyepElemek; feluletek = FeluleteketLancoltListabaTesz(megrendeloLista); try { gyepElemek = GyepRaktar(GYEPELEMEK_SZAMA); Lefedo kivitelezes = new Lefedo(megrendeloLista, gyepElemek, feluletek); MegrendelesErtesito ertesito = new MegrendelesErtesito(); kivitelezes.MegrendelesElkeszult += ertesito.OnMegrendelesElkeszult; kivitelezes.MegrendelesekElkeszitese(); Console.WriteLine("A kiszolgált megrendelők száma: " + kivitelezes.KiszolgaltMegrendelokSzama); } catch (GyepElemTulNagyKivetel gy) { Console.WriteLine("A bekerült gyeptégla területe ({0}) nagyobb, mint a legkisebb zöldterületé ({1})!", gy.GyepElem.Terulet, gy.ZoldTerulet.Terulet); } Console.WriteLine("\n***STOP***\n"); Console.ReadLine(); }
public void ListaElemeketAtrak(LancoltLista <IGyepElem> Honnan, LancoltLista <IGyepElem> Hova) { IGyepElem aktGyepElem; while (!Honnan.UresLista()) { aktGyepElem = Honnan.GetAktElem(1); Hova.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem); Honnan.Torles(aktGyepElem); } }
public void OnMegrendelesElkeszult(LancoltLista <ZoldTerulet> T) { int i = 1; Console.WriteLine("\nMegrendelés elkészült, telkek: \n"); while (T.GetAktElem(i) != null) { Console.WriteLine(T.GetAktElem(i).ToString()); Console.WriteLine(); i++; } }
public static LancoltLista <ZoldTerulet> FeluleteketLancoltListabaTesz(List <Megrendelo> mLista) { LancoltLista <ZoldTerulet> feluletek = new LancoltLista <ZoldTerulet>(); foreach (Megrendelo m in mLista) { for (int i = 0; i < m.FeluletekSzama; i++) { feluletek.BeszurCsokkenoSorrendben(m.Feluletek[i].Terulet, m.Feluletek[i]); } } return(feluletek); }
public static LancoltLista <IGyepElem> GyepRaktar(int gyepekSzama) { LancoltLista <IGyepElem> gyepRaktar = new LancoltLista <IGyepElem>(); IGyepElem gyepElem; int random; ZoldTerulet legkisebbTerulet = feluletek.GetUtolsoElem(); for (int i = 0; i < gyepekSzama; i++) { random = R.Next(0, 4); if (random == 0) { gyepElem = new KertiGyep(R.Next(1, 10), R.Next(1, 10)); } else if (random == 1) { gyepElem = new MediterranGyep(R.Next(1, 10), R.Next(1, 10)); } else if (random == 2) { gyepElem = new ParkGyep(R.Next(1, 10), R.Next(1, 10)); } else { gyepElem = new SportGyep(R.Next(1, 10), R.Next(1, 10)); } if (gyepElem.Terulet > legkisebbTerulet.Terulet) { // A rendszer váltson ki kivételt, ha olyan méretű gyeptégla kerül be, amely meghaladja a legkisebb zöldterület méretét. throw new GyepElemTulNagyKivetel(gyepElem, legkisebbTerulet); } gyepRaktar.BeszurCsokkenoSorrendben(gyepElem.Terulet, gyepElem); } return(gyepRaktar); }
// egy adott megrendelőt szolgál ki; ha az összes telkét sikerült lefedni, igazzal tér vissza public bool AktMegrendeloKiszolgalasa(Megrendelo M) { int i = 0; int j = 1; ZoldTerulet z; ElkeszultTeruletek = new LancoltLista <ZoldTerulet>(); LancoltLista <IGyepElem> kivettGyepElemek = new LancoltLista <IGyepElem>(); while (i < M.FeluletekSzama) { z = Teruletek.GetAktElem(j); // a korábban sorbarendezett Megrendelők ID-i alapján keresi ki a felületek láncolt listájából a lefedendő felületet if (z.MegrendeloID == M.ID && AktTeruletLefedo(z, kivettGyepElemek)) { Teruletek.Torles(z); ElkeszultTeruletek.BeszurCsokkenoSorrendben(z.Terulet, z); i++; } else { if (z.MegrendeloID == M.ID) { return(false); } j++; } } if (i >= M.FeluletekSzama) { OnMegrendelesElkeszult(ElkeszultTeruletek); return(true); } ListaElemeketAtrak(kivettGyepElemek, Elemek); return(false); }
// egy telket fed le, mohó szeretne lenni public bool AktTeruletLefedo(ZoldTerulet Z, LancoltLista <IGyepElem> kivettGyepElemek) { int t = 1; double osszLefedettTerulet = 0; double lefedettsegMerteke = 0; int futasokSzama = 0; IGyepElem aktGyepElem; LancoltLista <IGyepElem> AktTeruletElemei = new LancoltLista <IGyepElem>(); bool tulszamolt = false; while (osszLefedettTerulet < Z.Terulet && !Elemek.UresLista() && lefedettsegMerteke < Z.LefedettsegMin && !tulszamolt) { aktGyepElem = Elemek.GetAktElem(t); tulszamolt = (aktGyepElem == null); if (aktGyepElem != null && (osszLefedettTerulet + aktGyepElem.Terulet) < Z.Terulet) { if (Z is MaganKert && (aktGyepElem is KertiGyep || aktGyepElem is SportGyep)) { osszLefedettTerulet += aktGyepElem.Terulet; AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem); Elemek.Torles(aktGyepElem); } else if (Z is KozPark && (aktGyepElem is ParkGyep || aktGyepElem is SportGyep)) { osszLefedettTerulet += aktGyepElem.Terulet; AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem); Elemek.Torles(aktGyepElem); } else if (Z is FutballStadion && aktGyepElem is SportGyep) { osszLefedettTerulet += aktGyepElem.Terulet; AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem); Elemek.Torles(aktGyepElem); } else { t++; } } else { t++; } futasokSzama++; lefedettsegMerteke = 100 * osszLefedettTerulet / Z.Terulet; } if (lefedettsegMerteke >= Z.LefedettsegMin) { // ha sikerült lefedni a területet - megrendelő nem kerül kiszolgálásra, ha nem sikerül minden területét lefedni ListaElemeketAtrak(AktTeruletElemei, kivettGyepElemek); return(true); } // ha nem sikerült lefedni a területet ListaElemeketAtrak(AktTeruletElemei, Elemek); return(false); }
public Lefedo(List <Megrendelo> megrendelok, LancoltLista <IGyepElem> elemek, LancoltLista <ZoldTerulet> teruletek) { this.Megrendelok = megrendelok; this.Elemek = elemek; this.Teruletek = teruletek; }