# Route 66 Töltsd fel a 4 részfeladat megoldását tartalmazó bead1, bead2, bead3, bead4 könyvtár tartalmát (csak .ads és .adb fileket !). bead1/ A 66-os úton áll egy benzinkút. Szimuláld a működését. A kút egy védett egységgel legyen megvalósítva. Egyszerre egy autó tud tankolni a kútnál. A tankolás megkezdését az autó a védett egység egyik műveletének meghívásával kérheti. A művelet akkor hajtódik végre, ha szabaddá válik a kút. A kút másik művelete segítségével fizethetnek az autósok: a művelet hatására szabaddá válik a kút. (A kút működjön úgy, mint egy szemafor. Az általa őrzött kritikus szakasz a tankolás lesz.) Az autókat egy taszk típussal valósítsd meg. Egy autó a következőképpen működik. Tankolásra jelentkezik a kútnál. Amikor sorra kerül, három másodperces várakozással szimulálja a tankolás folyamatát. Ezután 0.1 másodpercig tart a sofőrnek, amíg a pénztárhoz megy. Ott fizet, majd elhajt (azaz végetér a taszk). Indíts el 10 autót. Az autók írják ki, hogy épp mit csinálnak. *************************** bead2/ Az út mellett, nem sokkal az eddig szimulált kút után felépült egy újabb kút. Az autósok, ha nem kerülnek elég gyorsan sorra az első kútnál, tovább szoktak hajtani, és a második kútnál tankolnak. Szimuláljuk most ezt! A kút legyen védett típus, és egy tömbben hozz létre belőle kettőt. Az autósok kapjanak egy diszkriminánst, amelyben megadható, hogy hány litert kell tankolniuk. Egy liter betankolása 0.1 másodperc legyen. Az autók, miután odaérnek az első kúthoz, várni kezdenek, hogy tankolhassanak. Ha 3.5 másodpercen belül sorra kerülnek, akkor tankolnak, fizetnek és távoznak. Ha a megadott időkorláton belül nem kerülnek sorra (használj időhöz kötött hívást!), akkor továbbmennek a második kúthoz. Ez 1.0 másodperc. Ott is sorbaállnak, immár időkorlát nélkül. Amikor sorra kerülnek, fizetnek, majd távoznak. A főprogramban allokációval, mutató típuson keresztül indíts el autókat. Az autók indítása között egy kis idő is eltelhet, hogy ne egyszerre érkezzenek a kúthoz. *************************** bead3/ Az autóknak ne csak azt adjuk át paraméterként, hogy hány litert tankoljanak. Legyen paraméter az is, hogy mennyi ideig hajlandóak várakozni az első kútnál, mennyi idő alatt érnek át a második kúthoz, és hogy mennyi ideig tart a sofőrnek a pénztárhoz menni és fizetni. Használj egy rekord típust ezen adatok összefogására, és egy erre mutató típus legyen a taszk típus diszkriminánsának típusa. A főprogram a szabványos bemenetről olvassa be az autók indításához szükséges adatokat. Egy autó kapcsán öt adatra van szükség: a paraméterként átadandó rekord négy mezőjére, illetve az autó elindítása előtti várakozás mértékére. Az első adat egy pozitív egész szám, a többi pedig Duration típusú. (A Duration típushoz IO műveleteket a Ada.Text_IO.Fixed_IO csomagsablon példányosításával kaphatsz.) Olvass be öt adatot, majd a megadott várakozási idő letelte után indíts el egy megfelelően felparaméterezett autót. Ezután kezdheted a következő autó adatainak beolvasását. Feltételezzük, hogy a szabványos bemeneten helyes adatok találhatók. Az adatok beolvasásának és az autók indításának végét a "fájl vége" jelzi. *************************** bead4/ Az előző feladat óta sokat fejlődött az infrastruktúra. A két benzinkút helyett már csak egy áll a 66-os úton, de az a benzinkút négy, egymással párhuzamosan működő kútból áll. Egészítsd ki a védett egységet egy olyan művelettel, amellyel a kútnál sorban állók számát lehet lekérdezni. Ez a szám a védett egység belépési pontjának várakozási sorában álló folyamatok számát ('Count attribútum) jelenti, illetve ennél eggyel nagyobat, ha a kút épp foglalt. Használj négy védett egységet a benzinkúthoz. Az autók paraméterezéséhez olyan rekordot használj, amelyben a tankolni kívánt literek száma, egy várakozási érték és a pénztárhoz érés ideje található. (Tehát csak három mező. Ennek megfelelően kell módosítani a paraméterek beolvasását a szabványos bemenetről...) Az autók a következőképen működjenek. Amikor odaérnek a benzinkúthoz, kiválasztják, hogy melyik kútnál állnak a legkevesebben sorban. Ezen kútnál kezdenek várakozni. Amennyiben letelt a várakozási idő, és nem kerültek sorra, ismét végignézik a kutakat, és egy üres sort keresnek. Ha találnak ilyet, és azonnal sorra kerülnek ott (használj nem blokkoló hívást), akkor ott tankolnak meg. Ha nem sikerül tankolniuk, csalódottan távoznak. Ha vagy a legelőször kiválasztott, vagy a másodszorra kiválasztott kútnál sikerül tankolni, akkor persze távozás előtt fizetnek. Jó munkát!