Informatika2-2012/Hazi05
Ador (vitalap | szerkesztései) (→Csomagszállító szalag szimulátor) |
Ador (vitalap | szerkesztései) |
||
6. sor: | 6. sor: | ||
A futószalag 10 rekeszre legyen osztva (a szalagot reprezentálja egy 10 elemű, egészeket tartalmazó tömb). | 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 egyesével növekedően kiosztva). Ha valahol nincs csomag, akkor ott 0 érték szerepel a tömbben. | + | A csomagokat csak egy azonosítóval lejöljük a tömbben (egy egész szám, 1-től kezdve egyesével növekedően kiosztva - az azonosítők megfelelő kiosztása is a feladat része). 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.) | 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 lap 2012. március 10., 12:57-kori változata
Csomagszállító szalag szimulátor
A határidő az ünnep miatt márc. 19 hétfő.
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 egyesével növekedően kiosztva - az azonosítők megfelelő kiosztása is a feladat része). 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írha hogy "semmi sincs ott". Ha a felhasználó csak 'k' parancsot ír, szám nélkül, akkor írja ki a "mondd meg honnan vegyuk ki!" üzenetet és várjuk a következő parancsot.
- x - kilép a program (while ciklus vége)
Nem kell hibakezelést írni, vagyis nem kell felkészülni azokra az esetekre amikor hibás parancsot (nem megfelelő karaktert, illetve nem egy darab egész számot a 'k' után) kap a program.
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 k mondd meg honnan vegyuk ki! 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
Egy szép megoldás legalább 5 függvényt tartalmaz, a vezérlő parancsokhoz egyet-egyet (kivéve a kilépést), és a tömb kezdeti 0-kkal feltöltéséhez is egyet (hogy a szalag üresen induljon).
Segítség
- Megadjuk azt a függvényt ami a '0'-'9' számkaraktereket egész értékké alakítja (ez kell a 'k'-val kezdődő parancsok értelmezéséhez):
int atalakit(char c) { return (int)(c - '0'); }
- A szalag tömbje és a mutató lehetnek globális változók. És lehet hogy kell még egy valaminek globális változó.
- A main() függvény kezdődhet pl. így:
int main() { /* itt ne felejtsd el kiüriteni a szalagot használat előtt */ char parancs[3]; /* max 2 karakteras parancsok lesznek, plusz a lezáró '\0' */ parancs[0] = '\0'; /* kezdetben nincs parancs */ /* praktikus ha kiírja a program hogy hogy lehet használni */ printf("parancsok: \n l - lep \n p - kiir \n kn - kivesz n-edik helyrol \n u - uj csomag \n x - kilep\n"); /* ez a fő ciklus */ while (parancs[0] != 'x') { scanf("%s", parancs); /* a parancs[0] - beli karakternek megfelelően függvényhívások, a függvények majd módosítják a szalag állapotát */ } return 0; }