2. naloga (Lego kocke)

Zoran dela v končni kontroli v tovarni legokock. Vrečke s kockami potujejo po tekočem traku, kjer je vsaka vrečka stehtana, predno se zapakira v škatlo. To se zgodi tako, da medtem ko vrečka potuje po tekočem traku, čitalnik črtne kode prebere črtno kodo z vrečke, tehtnica pa jo stehta na miligram natančno.  Težo vrečke potem računalnik primerja z minimalno in maksimalno dopustno težo in če ne leži med njima, vrečko odstrani s tekočega traku. Tekoči trak se med tem ne ustavlja in tehtnica neprestano deluje, zato mora program poiskati, kdaj je teža te vrečke na tehtnici največja in potem to težo primerjati z referenčno težo.

Na voljo imamo:

  • Tabeli int MinTeza[n], MaxTeza[n], ki vsebujeta minimalno in maksimalno dovoljeno težo za vsako vrsto izdelka - indeks je vrednost  črtne kode.

Funkcije:

  • int CrtnaKoda(), ki vrne črtno kodo z vrečke, ki je na tehtnici; če ni vrečke, vrne -1;
  • int Tehtaj(), ki vrne težo, ki jo trenutno zaznava tehtnica, v miligramih; če na tehtnici trenutno sploh ni vrečke, vrne 0;
  • void OdstraniVrecko(), ki odstrani vrečko, ki je na tehtnici, s tekočega traku. Ta funkcija se vrne iz klica šele, ko je vrečka popolnoma odstranjena.

(Za te funkcije torej predpostavi, da že obstajajo in jih lahko kličeš iz svojega programa.) Napiši program, ki se bo izvajal v neskončni zanki in nadzoroval obnašanje tega dela tekočega traku. Predpostaviš lahko, da vrečke potujejo izredno počasi v primerjavi s hitrostjo delovanja računalnika; da ko vrečka potuje po traku, se teža, ki jo zaznava tehtnica, najprej nekaj časa le povečuje, nato se nekaj časa le zmanjšuje, nato pa je nekaj časa enaka 0 (ko se je dosedanja vrečka že odpeljala mimo tehtnice in nanjo še ni prišla naslednja vrečka); in da je črtna koda vrečke vidna ves čas, ko je ta vrečka na tehtnici.

Še deklaracije v drugih jezikih:

{ v pascalu: }
var MinTeza, MaxTeza: array [1..n] of integer;
function CrtnaKoda: integer;
function Tehtaj: integer;
procedure OdstraniVrecko;

# v pythonu:
MinTeza = [ldots]; MaxTeza = [ldots]
def CrtnaKoda: ...  # vrne int
def Tehtaj: ...     # vrne int
def OdstraniVrecko: ...

<PDF>