5. naloga

Dvigalo

V dvonadstropni tovarni robotizirano dvigalo skrbi za prenos zabojev med nadstropji. Zaboji prihajajo po tekočem traku na tehtnico, ločen sistem pa trak zaustavi, kadar je na tehtnici zaboj, ter ga požene, ko se izprazni.

Del dvigala z nosilnostjo 500kg je robotska roka, ki v spodnjem nadstropju prelaga zaboje s tehtnice v dvigalo, v zgornjem nadstropju pa jih razlaga iz dvigala na trak, po katerem se avtomatsko odpeljejo v nadaljnjo obdelavo.

Dvigalo

Napiši program, ki se vrti v neskončni zanki in upravlja dvigalo. Poskrbeti moraš, da masa zabojev na dvigalu nikoli ne preseže nosilnosti dvigala. Predpostavi, da je dvigalo na začetku prazno in parkirano v prvem (torej spodnjem) nadstropju ter da imajo zaboji maso od 1 do 500 kg (vključno). Želimo, da je število premikov med nadstropji čim manjše. (Dvigalo torej vedno naložimo kar najbolj.)

Na voljo imaš naslednje podprograme (funkcije):

  • int Stehtaj() — Vrne maso zaboja na tehtnici. Če na tehtnici ni zaboja, funkcija počaka, dokler se zaboj ne pojavi, nato ga stehta in vrne rezultat.
  • void Nalozi() — Z robotsko roko pren%ese zaboj s tehtnice na dvigalo. Če pri tem masa zabojev na dvigalu preseže nosilnost, se dvigalo pokvari. Podprogram se vrne šele, ko je zaboj naložen. Če je tehtnica prazna ali pa je dvigalo v drugem nadstropju namesto v prvem, podprogram ne naredi ničesar in se takoj vrne.
  • void Razlozi() — Z robotsko roko prenese enega od zabojev z dvigala na trak v drugem nadstropju. Če je bil trak še zaseden (ker je bil na njem nek prejšnji zaboj), Razlozi najprej počaka, da se prejšnji zaboj odpelje. Če je dvigalo v prvem nadstropju namesto v drugem, Razlozi ne naredi ničesar in se takoj vrne.
  • void OdpeljiDvigalo(int StNadstropja) — Odpelje dvigalo v izbrano nadstropje. Podprogram se vrne šele, ko dvigalo prispe na cilj. Parameter StNadstropja ima lahko vrednost 1 ali 2.