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 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); }