A MIDI (Musical Instrument Digital Interface) számítógépek és szintetizátorok között adatcserére kidolgozott szabvány. A szabvány részben parancsokat tartalmaz a szintetizátor számára egy hang megszólaltatásának elkezdésére vagy befejezésére.
Ez a program például 3 hangot szólaltat meg egyszerre:
0 ON 60
0 ON 70 0 ON 80 10 OFF 60 10 OFF 80 10 OFF 70 10 ON 62 12 OFF 62 |
10 időegységig fog szólni a 60-as, a 70-es és a 80-as hang, majd két időegységig a 62-es. A program egy sora tehát a következő információkat tartalmazza: először azt az időpillanatot, amikor a parancsot végre kell hajtani, aztán magát a parancsot (ON esetén bekapcsoltni, OFF esetén kikapcsolni kel a hangot), majd annak a hangnak a sorszámát, amire a parancs vonatkozik |
A MIDI programba háromféle probléma fordulhat elő:
a) Tekintsük az alábbi példát:
0 ON 60
10 ON 60 12 OFF 60 20 OFF 60 |
Ha meghallgatjuk ezt a programot, akkor nem fogunk két különálló hangot hallani, csak egyet, mégpedig 12 időegységig. Ezen úgy segíthatünk, hogy OFF parancsot illesztünk a programba 1 időegységgel a második ON parancs elé, az eredeti OFF parancsok közül pedig csak a másodikat hagyjuk meg. Így egy rövid szünetet hallunk a két hang között. |
b) Egy másik probléma adódik akkor, ha ugyanazon időponthoz tartozó ON és OFF parancs is van a programban:
0 ON 60
10 ON 60 10 OFF 60 20 OFF 60 |
0 ON 60
10 OFF 60 10 ON 60 20 OFF 60 |
A bal oldali példában 10 időegységig lesz hallható a hang, a jobb oldaliban 20 időegységig, folyamatosan. (Ebben a pédában a problémát okozó utasítások egymás mellett találhatók, de nem kizárt az sem, hogy legyen közöttük ugyanehhez az időponthoz tartozó más utasítás.) |
A megoldás mindkét esetben ugyanaz: a problémát okozó OFF parancsot 1 időegységgel a a megfelelő ON parancs elé kell áthelyezni. Ez is egy rövid szünetet eredményez a hang második megszólaltatása előtt.
c) Ha a program véget ér, és valamelyik hang még szól, akkor azt az utolsó időpont után 1 időegységgel ki kell kapcsolni.
Írj programot, ami tetszőleges számú MIDI programot beolvas a MIDI.BE nevű állományból, és a fenti változtatások elvégzése után kiírja MIDI.KI állományba. Az egyes MIDI programokat olyan sorok választják el egymástól, amik csak a sor elején álló -1 számot tartalmazzák. Az utolsó program után -2 áll. A kimenet formátuma a bemenetével egyező.Az időpont 0 és 65535 közötti egész szám lehet, a parancsokat (ON, OFF) mindig nagybetűvel írjuk, a hangok sorszámai 1 és 127 közötti egész számok. Egy soron belül az időpontot és a parancsot, valamint a parancsot és a hang sorszámát pontosan egy szóköz választja el.
A sorok az időpont szerint nem csökkenő rendben vannak, de az egy adott időponthoz tartozó parancsok sorrendje tetszőleges.
A megoldás során feltehetjük, hogy kezdetben semmilyen hang nem szól, egy hiba kijavítása nem okoz újabb hibát, valamint, hogy nincs hiba a nulladik időpontban.
Példa:
|
|
0 ON 60
10 ON 60 12 OFF 60 20 OFF 60 -1 0 ON 60 5 ON 70 10 ON 60 10 OFF 60 15 OFF 70 15 ON 70 20 OFF 60 -2 |
0 ON 60
9 OFF 60 10 ON 60 20 OFF 60 -1 0 ON 60 5 ON 70 9 OFF 60 10 ON 60 14 OFF 70 15 ON 70 20 OFF 60 21 OFF 70 -2 |
2. feladat: Kirándulók (50 pont)
Pista barátunkat kinevezték egy turistaház igazgatójáva. Feladata az, hogy az érkező csoportokat beossza a turistaház szobáiba. Az elosztás során természetesen figyelembe kell vennie a szobák befogadóképességét és a turisták igényeit. Segítsünk barátunknak, írjunk programot! Programunk legyen olyan, hogy szabadon meg lehessen adni, hogy a lehetséges feltételek, megszorítások közül melyeket követeljük meg.
Ennek megfelelően a program elején egy egyszerű menüből lehessen kiválasztani, hogy az alábbi feladatok közül melyiket akarjuk megoldani. (2 pont)
Az első részfeladatban legfeljebb 1, a 2.-ban és a 3.-ban pedig
legfeljebb 2 olyan szoba legyen, ami nincs teljesen feltöltve turistákkal,
a 4. részfeladatban ezen kívül az egy szobába teendők mellett a lehető
legkevesebb feltöltetlen hely maradjon!
A program bemenő adatait két szöveges állomány, a SZOBAx.TXT illetve a TURISTAx.TXT írja le. Az első értelemszerűen a rendelkezésre álló szobák adatait, míg a második a turistákról ismert információt tartalmazza. Az állomány nevében szereplő x egy 0 és 9 közötti tetszőleges számjegy lehet - az egy teszthez tartozó állományokat ez azonosítja.
A SZOBAx.TXT állomány formátuma:Az állomány első sora megadja, hogy hány szoba van a turistaszállóban (maximum 10). Ezután minden sor egy-egy szoba befogadóképességét írja le. (A szobák sorszámozása az állománybeli sorrend szerint történik.)
A TURISTAx.TXT állomány formátuma:
Ezt egy olyan sor követi, mely azoknak a pároknak a számát tartalmazza,
akiket egy szobában kell elhelyezni. Ezt a megfelelő számú, párokat tartalmazó
sor követi. A példában a 3. szeretne egy szobában lakni az 5-kel.
Végül az olyan csoportok száma következik, akik nem engednek maguk közé idegeneket, amit soronként követ az egyes csoportok leírása. A csoportok leírása egy darabszámmal kezdődik, majd szóközökkel elválasztva a csoportba tartozó személyek sorszámaival folytatódik. A példában az 1., a 7. és a 8. lehet például egy család, akik nem akarnak másokkal osztozni a szobájukon. |
Példa:
8
|
A program eredménye: (3 pont)
A program eredménye az EREDMx.TXT állományba kerüljön, a következő
formában. Az állomány minden sora egy szobát írjon le, az alábbiak szerint:
szobaszám: turista turista turista Az állománynak a szobasorszámok szerint rendezettnek kell lennie Amennyiben
a feladat nem oldható meg, úgy az állomány egyetlen sort tartalmazzon,
melyben a következő üzenet legyen olvasható:
|
Példa:
1: L2
|