5. naloga

Jabolka

Imamo tekoči trak, po katerem prihajajo jabolka. Na začetku traku imamo kamero, ki prepoznava kvaliteto jabolka in ga oceni s številko od 1 do 5. Za kamero je 5 jarkov in sortirna roka, ki lahko jabolko odrine v jarek, pred katerim se nahaja. Vsak jarek pelje v drug zabojček, v katerem se nabirajo sortirana jabolka.

[SLIKA]

Tekoči trak se premika v diskretnih korakih, vedno po en jarek naprej. V enem takem koraku se jabolka na traku premaknejo za en jarek naprej; tisto jabolko, ki je bilo v prejšnjem koraku pred kamero, se premakne do prvega jarka; pred kamero pa lahko pride naslednje jabolko (ni pa nujno, ker so lahko med jabolki na traku tudi presledki — glej sliko).

Napiši program, ki teče v neskončni zanki in skrbi za to, da sortirna roka odrine vsako jabolko v pravi jarek (torej v tisti jarek, čigar številka je enaka oceni jabolka). Predpostavi, da so že na voljo naslednji podprogrami oz. funkcije, ki jih lahko tvoj program kliče za upravljanje s trakom:

  • int PremakniTrak() premakne trak za en jarek naprej in vrne celo število z oceno novega jabolka (od 1 do 5), ki je zdaj (po tem premiku) pred kamero. Če pred kamero ni jabolka, funkcija vrne 0. Med dvema zaporednima klicema funkcije PremakniTrak je trak pri miru.
  • void PremakniRoko(int k) premakne sortirno roko pred jarek k (parameter k mora biti od 1 do 5).
  • void SproziRoko() sproži iztegovanje roke. Če je pred roko jabolko, se bo zvalilo v jarek. Če pred roko ni jabolka, se ne bo zgodilo nič hudega. Podprogram se vrne šele, ko je roka spet v skrčenem položaju in pripravljena na morebitni naslednji premik.

Še deklaracije v drugih programskih jezikih:

{ V pascalu: }
function PremakniTrak: integer;
procedure PremakniRoko(k: integer);
procedure SproziRoko;

# V pythonu:
def PremakniTrak(): ...     # vrne int
def PremakniRoko(k): ...    # parameter ”k“ mora biti int
def SproziRoko(): ...