Studia dzienne, 7go lutego 2005
Nazwisko
Nr studenta............Nr grupy
Zadanie 6(10punktów) Winda jeździ po pięciokondygnacyjnym budynku (parter oraz 4 pietra) Priorytet kondygnacji jest określony funkcją P(x), gdzie x oznacza numer kondygnacji, z której wzywano windę. Przejechanie jednego piętra zajmuje 3 s, zaś czas postoju na dowolnym piętrze wynosi 5 s.
Użytkownik wzywający windę wciska przycisk, określający przyszły kierunek jazdy. Wezwania dodawane są do listy (jako elementy składające się z numeru piętra wezwania, kierunku i priorytetu), w której elementy uporządkowane są według rosnącej wartości priorytetu. Elementy o tym samym priorytecie znajdują się obok siebie w kolejności dodawania do listy. Kolejnych takich samych wezwań (tzn. wezwań z tego samego piętra i w tym samym kierunku) nie dodajemy do listy zadań.
Zakładamy, że winda realizuje kolejno wezwania z listy zadań zgodnie z przyjętym priorytetem (najpierw te o mniejszej wartości funkcji P). Po realizacji wezwania, tzn. po zawiezieniu użytkownika na piętro, które określił po wejściu do windy, wezwanie jest usuwane z listy i dopiero wtedy może być zrealizowane następne wezwanie.
Mamy dostęp również do zmiennej globalnej WINDA START określającej, z której pozycji winda w danej chwili będzie wyruszała (lub właśnie wyruszyła).
Napisz procedurę wstawiania wezwania do listy, która na podstawie aktualnej zawartości opisanej struktury listowej, obliczy równocześnie ile maksymalnie czasu zajmie oczekiwanie na rozpoczęcie realizacji danego wezwania. Zakładamy, że każdy użytkownik po wejściu do windy może wybrać najodleglejsze piętro w danym kierunku.