Informatika2-2012/Hazi05

A MathWikiből
A lap korábbi változatát látod, amilyen Ador (vitalap | szerkesztései) 2012. március 9., 00:05-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Csomagszállító szalag szimulátor

A repülőtereken szokott lenni olyan körbe-körbe menő futószalag amin a csomagok vannak. Ilyet kell modellezni egy C programmal.

A futószalag 10 rekeszre legyen osztva (a szalagot reprezentálja egy 10 elemű, egészeket tartalmazó tömb). A csomagokat csak egy azonosítóval lejöljük a tömbben (egy egész szám, 1-től kezdve egyszesével növekedően kiosztva). Ha valahol nincs csomag, akkor ott 0 érték szerepel a tömbben.

Van egy speciális hely ahol az új csomagok a szalagra kerülnek. Ennek az aktuális helyét egy mutató jelölje, ezt kell léptetni a szalag forgatása helyett (az int tömb elemeinek mozgatása helyett). Írj egy függvényt ami ezt a mutatót lépteti eggyel, úgy, hogy ha a tömb utolsó elemére mutat akkor a léptetés után az első elemre mutasson. (A mutató kezdetben mutasson a 0. elemre.)

A szimulátor programot néhány egyszerű paranccsal kell vezérelni:

parancsok egy vagy két karakteres stringek (egy while ciklusban scanf()-fel kérjétek be őket):

  • u - Új csomag oda ahová a "bejövő" mutató mutat, de csak ha üres ott a rekesz(különben "ott mar van csomag!" üzenetet ír ki). A csomag sorszáma legyen eggyel nagyobb mint az eddigi utolsó csomagé volt. Sikeres csomag-kiadás esetén kiírja hogy "uj:" és a kiosztott azonosítót.
  • l - Lépteti a futószalagot (illetve gyakorlatilag a mutatót), és kiírja hogy "lep"
  • p - Kiírja az állapotot (a lenti példán látható módon)
  • kn - Kiveszi a csomagot az n-edik rekeszből (n egy szám 0 és 9 között) ha van ott csomag és hozzáférhető a rekesz. Ezesetben kiírja az azonosítóját a lenti példában látható módon ("kiveve: x"). Ha a "bejövő" helyet kijelölő mutató is éppen ide mutat, ahonnan kivennénk a csomagot, akkor kiírja hogy "most nem hozzaferheto!" a rekesz vagyis nem lehet kivenni a csomagot. Ha hozzáférhető a rekesz de nincs a kért helyen csomag, akkor kiírjha hogy "semmi sincs ott".
  • x - kilép a program (while ciklus vége)


Egy példa futtatás be-és kimenete (az egy vagy kétbetűs sorok a parancsok amiket be kell gépelni, a többit ezekre válaszul a program írja ki):

   p
   allapot: 
    0 0 0 0 0 0 0 0 0 0
    ^                  
    |                  
   l
   lep
   u
   uj: 1
   l
   lep
   u
   uj: 2
   l
   lep
   u
   uj: 3
   u
   ott mar van csomag!
   l
   lep
   l
   lep
   u
   uj: 4
   p
   allapot: 
    0 1 2 3 0 4 0 0 0 0
              ^        
              |        
   k5
   most nem hozzaferheto!
   l
   lep
   k5
   kiveve: 4
   l
   lep
   u
   uj: 5
   u
   ott mar van csomag!
   l
   lep
   u
   uj: 6
   l
   lep
   u
   uj: 7
   p
   allapot: 
    0 1 2 3 0 0 0 5 6 7
                      ^
                      |
   k9
   most nem hozzaferheto!
   k1
   kiveve: 1
   k1
   semmi sincs ott
   l
   lep
   p
   allapot: 
    0 0 2 3 0 0 0 5 6 7
    ^                  
    |                  
   u
   uj: 8
   l
   lep
   p
   allapot: 
    8 0 2 3 0 0 0 5 6 7
      ^                
      |                
   x
Személyes eszközök