Liftszimulátor Beta nyelven
Készítette: Zsolt Ferenc
Tartalom
Felhasználói dokumentáció
A program egy lift műkődését szimulálja. A program indítása után a felhasználónak a következő adatokat kell megadni:
- az épület -amelyben a lift műkődik- emeleteinek száma. Ez egy nullánál nagyobb egész szám lehet.
- utasok száma, azaz a szimuláció alatt összesen hány utas utazzon a lifttel. Ez szintén egész szám lehet.
- lift sebessége.Ez egy 1 és 10 közé eső egész szám lehet.
Ezután elindul a szimuláció. Ennek során a program véletlenszerű (1 és 5 mp közé eső)időközönként generál egy új
utast véletlenszerű kiindulási helyzettel (emeletszámmal) és céllal. Természetesen az utas célja és kiindulási
helyzete nem egyezhet meg. Az új utas jelez a liftnek, amely teljesíti ezeket a hívásokat egy adott
algoritmus szerint.
A program futása során a következő információk jelennek meg a képernyőn:
- Új utas létrehozásakor a program kiírja annak kiindulási helyzetét, sorszámát és célját.
- Ha a lift mozgásban van, akkor ha új emeletre érkezik, kiírja a helyzetét.
- Egy utas ki- és beszállásakor kiírja a lift helyzetét, az utas azonosítóját és célját.
- Ha egy utas megérkezik a célemeletre és kiszállt a liftből, akkor a maradék utasok száma jelenik meg.
Ha a megadott paraméternek megfelelő számú utas létrejött és a lift mindegyiket elszállította a kívánt
helyre (azaz a maradék utasok száma 0 lesz), a program befejezi műkődését.
Fejlesztői dokumentáció
A program a következő (osztály)mintákból:
- utas
- Az utast megvalósító minta.
Attribútumai:
- emelet
- Az emeletet valósítja meg.
Attribútumai:
- azonosító: az emelet száma
- utasok: az emeleten tartozkodó utasokat tartalmazó sor
- utasszám: az emeleten lévő utasok száma
Műveletei:
- betesz: beteszi az utasok sorba a paraméterbe kapott utast
- kivesz: kiveszi az utasok sorból megadott helyen lévő utast
- vanutas: visszaadja a megkapott emelet írányába utazni szándékozó utasok közül az utasok sorban a
legelsőt. Ha nincs ilyen utas, akkor NONE-nal tér vissza. Ha a cél 0, akkor a sorban legelső utast
adja meg.
- jelzes: megnézi, van-e a megadott írányba utazni szándékozó személy az utasok sorban. Ha igen, akkor
beteszi az írányító igénysorába az emelet számát a megfelelő előjellel.(lásd írányító minta)
- lift
- A liftet valósítja meg.
A minta addig hívogatja a halad műveletét, amíg el nem "fogynak" az utasok.
Attribútumai:
- ferohely: a lift férőhelyeinek száma
- helyzet: a lift helyzete
- utasszam: a liftben éppen tartozkodó utasok száma
- utasok: a liftben lévő utasokat tartalmazó sor
- aktcel: a lift pillanatnyi célja
Műveletei:
- betesz: betesz egy utast az utasok sorba
- kivesz: kivesz az utasok sorban leghátul lévő olyan utast, akinek célja megegyezik a lift helyzetével
- halad: lekérdezi az írányítótól, hogy merre kell mennie, majd emeletről emeletre lépkedve elmegy a
megadott célig. Útközben minden emeleten megnézi van-e kiszálló illetve beszálló utas. Ha lift helyzete
a lift céljával megegyezik, akkor lenulláza a lift célját. Ezután kiteszi a kiszálló utasokat. Ha nem marad
utas a liftben és a lift célja nulla, kér egy új célt az írányítótól. Ezután megnézi van-e beszálló utas
az emeleten. Ha a beszálló utas célja "továbbvisz" a lift célján, akkor az új utas célja lesz a lift célja.
Az adott emelet törlődik az írányító igénysorából, de ha még marad utas az emeleten, aki a megadott cél
írányába utazna (csak nem fér már be a liftbe), akkor az adott emelet újra bekerül az igénysorba.
- írányító
- A lift vezérlőjét megvalósító minta. Tárolja a hívásokat és megadja a következő célját a liftnek, ha az
lekéri.
Attribútumai:
- igenyek: az utasok hívásait tartalmazza időrendben
- igenyszam: az igénysorban lévő igények száma
Műveletei:
- ujigeny: a megkapott igényt beteszi az igények sorba, ha az még nem szerepel benne
- igenyad: visszaadja a sor elején álló igénynek megfelelő előjelű igények közül az abszolútértékben
legnagyobbat
- igenykivesz: kiveszi a megkapott igényt az igénysorból
- utasgeneráló
- Véletlenszerű hellyel és céllal generál új utasokat és azokat beteszi az helyzetnek megfelelő azonosítójú
emeletre.
A program globális változói:
- emeletszám
- emeletek száma
- utasperemelet
- legfeljebb ennyi utas lehet egyidőben egy emeleten
- maxutas
- a szimuláció alatt legfeljebb ennyi utas fog utazni a liften
- maradekutas
- ennyi utast kell még a liftnek elszállítani
- liftido
- egy emelet megtételéhez szükséges idő
A program műkődése: előszőr bekéri a felhasználótól az emeletszam, maxutas és liftido értékeit. Ezután inicializálja
a maradék változókat is, létrehozza az emeleteket. Végül párhuzamosan elindítja az utasgeneralo és lift szálakat.
Forráskód
A program forráskódja: lift.bet
Zsolt Ferenc (dragon@inf.elte.hu)
2000.07.03.