A KöMaL 2015. márciusi informatika feladatai
Kérjük, ha még nem tetted meg, olvasd el a versenykiírást.
Feladat típusok elrejtése/megmutatása:
I-jelű feladatokA beküldési határidő 2015. április 10-én LEJÁRT. |
I. 370. Egy vad hegyi folyón csak egy rossz állapotú függőhídon lehet átkelni. A híd egymáshoz rögzített kötelekből és azokra keresztbe erősített lécekből áll. A lécek hiányosak és kevés van belőlük.
Felújítás, illetve a lécek átrendezése előtt megmérték az egymás melletti lécek távolságát a bal parttól a jobbig. Rendelkezésünkre állnak és a honlapunkról letölthetők a centiméterekben mért adatok a hid.txt állományban.
Az állomány első sorában a függőhíd \(\displaystyle H\) hossza található (\(\displaystyle 300\le H\le 50\;000\)), második sorában az elméletileg meghatározott biztonságos \(\displaystyle L\) lépéshossz (\(\displaystyle 40\le L \le 80\)) van. Az ezt követő \(\displaystyle N\) sor (\(\displaystyle 1\le N\le H\)) a lécek távolságát tartalmazza. A léceken való lépkedés akkor biztonságos, ha távolságuk kisebb az \(\displaystyle L\) lépéshossznál. (A lécek annyira keskenyek, hogy saját szélességük elhanyagolható.)
Például (a / jel soremelést jelöl): 352 / 75 / 28 / 74 / 84 / 22 / 69 / 73 / ...
A példában a híd hossza 352 cm, a biztonságos lépéstávolság 75 cm, az első léc a bal parttól 28 cm, majd a második léc az elsőtől 74 cm távolságban van.
Készítsünk programot i370 néven, amely megoldja az alábbi feladatokat.
A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írjuk a képernyőre a feladat sorszámát (például 4. feladat: ). Az ékezet nélküli kiírás is megengedett.
1. Olvassuk be a hid.txt állomány adatait és a következő feladatokat ezek alapján oldjuk meg.
2. Írjuk ki a képernyőre az utolsó léc és a jobb part távolságát.
3. Adjuk meg centiméterben, hogy a bal partról indulva milyen távolságig lehet biztonságosan a hídon átmenni. Ha a teljes hídon biztonságosan lehet közlekedni, akkor írjuk ezt ki.
4. Írjuk ki a híd leghosszabb olyan szakaszának kezdő és utolsó lécének sorszámát, ahol végig veszélyesen nagy távolságban vannak a lécek.
5. Egy lécet el kell távolítanunk. Hány helyről választhatunk olyat, amelyet felszedve az előzőről a következőre még biztonságosan át lehet lépni?
6. Gyűjtsük ki és írjuk ki a képernyőre azoknak a lécpároknak a sorszámait, amelyek közé legalább egy újabb lécet kell elhelyezni a biztonságos átkeléshez. Például: 2-3.
7. Adjuk meg, hogy minimálisan hány lécet kell majd a teljes hídra felszerelni a biztonságos állapot eléréséhez.
8. A még rossz állapotú hídon ketten kézen fogva szeretnének átmenni. Megállapodnak, hogy a biztonság kedvéért a hídon végig minden lábuk külön lécen legyen. Léceket visznek magukkal, hogy ahol kell, maguk előtt lefektessék azokat. A hátsó ember visszanyúlva egy lépés távolságban egy általuk letett lécet fel is tud venni és társának előre tudja adni. Számoljuk ki, hogy minimálisan hány léccel a kezükben induljanak el a hídon, hogy biztonságosan át tudjanak kelni. (A hídon már eredetileg ott lévő lécek rögzítve vannak és nem felszedhetők.)
Példa: A és B ember lábainak helye mozgásuk során: A_láb1 5, A_láb2 4, B_láb1 3, B_láb2 2, B az 1. lécet felveheti, ha nincs rögzítve, előre adhatja. A előre letehet egy lécet \(\displaystyle L\) távolságban, A_láb2 6, B_láb2 4, a 2. lécet felveheti ... Beküldendő a program forráskódja (i370.pas, i370.cpp, ...), valamint a program rövid dokumentációja (i370.txt, i370.pdf, ...), amely megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.
Letölthető fájl: hid.txt.
(10 pont)
I. 371. A sportegyesületekben a technikai vezetők egyik feladata a bajnokságban résztvevő csapatok mérkőzéseinek egyeztetése. Rendelkezésünkre áll a merkozesek.txt forrásállományban egy folyamatosan frissített havi naptár a csapatok mérkőzéseinek időpontjaival. A technikai vezető - velünk ellentétben - nem nagyon ért a táblázatkezeléshez, ezért egy-egy dátum alá ugyan be tudja írni, hogy melyik csapat fog aznap játszani, illetve, ha a mérkőzés aznap elmarad, akkor ki is tudja törölni a csapat nevét, de más szerkesztésre nem vállalkozik. Az egyesületben 8 csapat van és egy hónapban legfeljebb 15 játéknap lehetséges.
Segítsük a munkáját a csapatok tájékoztató adatainak elkészítésével. Táblázatkezelő program segítségével oldjuk meg a következő feladatokat. A megoldásban saját függvény vagy makró nem használható.
1. Töltsük be a tabulátorokkal tagolt, UTF-8 kódolású merkozesek.txt szövegfájlt a táblázatkezelőbe a mintának megfelelően. A megoldásnak adatok változtatása esetén is jól kell működnie. Munkánkat i371 néven mentsük el a táblázatkezelő alapértelmezett formátumában.
2. Hozzunk létre egy új munkalapot, amely majd az egyik csapat adatait és a rájuk vonatkozó információkat fogja megjeleníteni.
Példa a serdülő fiú csapat munkalapjára:
3. Alakítsuk ki a minta szerinti táblázatszerkezetet és az első sor, valamint a B oszlop feliratait készítsük el. A D oszloptól jobbra segédszámításokat végezhetünk, amelyek értelmezését feliratokkal segítsük elő.
4. A B2 cellába írjuk be, hogy az aktuális munkalap információi melyik csapatra vonatkoznak. Később ennek a munkalapnak a másolásával és a csapat nevének a megváltoztatásával annak a csapatnak az információit szeretnénk látni.
5. Az A2 cellától lefelé írassuk ki azokat a dátumokat, amikor a csapatnak mérkőzése lesz. Az időpontok rendezetten jelenjenek meg, közöttük üres cella nem lehet. A megjelenítésnek a lehetséges 15 napra kell működnie. Az utolsó mérkőzés dátuma után a többi cella üresen jelenjen meg.
6. A C2 cellában határozzuk meg, hogy a csapat az aktuális hónapban hány mérkőzést fog játszani.
7. A C3 cellában határozzuk meg, hogy hány nap a legkisebb pihenőidő két játéknap között.
8. A C4 cellában határozzuk meg, hogy hányszor fordul elő, hogy az adott hónapban egymás utáni napokon lesz mérkőzése a csapatnak.
9. Formázzuk a táblázatot és a C oszlopban állítsuk be a mértékegységeket a minta szerint.
10. Másoljuk le a munkalapot még legalább két példányban és a B2 cellájuk átírásával másik két csapat adatait jelenítsük meg. A munkalapokat nevezzük el a csapatnevek szerint.
Beküldendő a táblázatkezelő munkafüzet (i371.xls, i371.ods, ...), illetve egy rövid dokumentáció (i371.txt, i371.pdf, ...), amelyben szerepel a megoldáskor alkalmazott táblázatkezelő neve, verziószáma.
A megoldáshoz szükséges letölthető állomány: merkozesek.txt.
(10 pont)
I. 372. Az OpenGL egy térbeli alakzatok számítógépes megjelenítésére alkalmas platformfüggetlen programozási felület. Elsősorban C nyelven készülnek hozzá programok, de a versenykiírásban szereplő más nyelveken is elérhető, pl. Lazarusban vagy Visual Basicben. Az interneten több magyar és idegen nyelvű irodalom, film és példaprogram található, amelyekből tájékozódhatunk a programozásáról. Érdemes a GLUT vagy más, az adott programozási nyelven és környezetben elérhető OpenGL kiegészítőt fölhasználni.
Készítsünk OpenGL alkalmazást, amely egy kocka belsejében pattogó pontszerű test mozgását mutatja. A program a kocka éleit és a lassan pattogó test pályáját jelenítse meg. A test véletlenszerű kezdősebességgel induljon és a kocka felületével tökéletesen rugalmasan ütközzön. A megjelenítésnél alkalmazzunk perspektivikus vetítést, a programban lehessen zoomolni, azaz közelíteni és távolodni a kockától, valamint úgy mozgatni a ,,kamerát'', hogy az mindig a kocka középpontja felé nézzen.
Beküldendő egy tömörített i372.zip állományban a program dokumentációja (i372.txt, i372.pdf) és a program fordításához szükséges forrásállományok. A dokumentáció pontosan adja meg, hogy milyen programozási nyelven és környezetben, mely kiegészítők segítségével fordítható és futtatható a program.
(10 pont)
S-jelű feladatokA beküldési határidő 2015. április 10-én LEJÁRT. |
S. 97. Egy elefántcsorda szép rendezetten, egy sorban halad. Az elefántokat 1-től \(\displaystyle N\)-ig számozzuk (\(\displaystyle 1\le N\le 100\;000\)). Az 1-es elefánt a legkisebb, és szép sorban az \(\displaystyle N\)-edik a legnagyobb. Az lenne a célravezető, ha a legkisebb elefánt menne legelöl, a második utána, stb. Ám ez nem feltétlenül van így. Egy elefántpár - a sorból kiválasztott két elefánt - rossz sorrendben van, ha a nagyobb megy előrébb. Számoljuk ki, hogy hány elefántpár van rossz sorrendben.
A program olvassa be a standard input első sorából \(\displaystyle N\)-et, majd a következő sorból \(\displaystyle N\) egész számot, melyek az elefántokat jelölik sorrendben, majd írja a standard output első és egyetlen sorába a rossz elefántpárok számát.
Magyarázat: az (1,3), (1,4), (2,3), (2,4) és (3,4) párok vannak rossz sorrendben.
Pontozás és korlátok: A programhoz mellékelt, a helyes megoldás elvét tömören, de érthetően leíró dokumentáció 1 pontot ér. A programra akkor kapható meg a további 9 pont, ha bármilyen hibátlan bemenetet képes megoldani az 1 mp futásidőkorláton belül.
Beküldendő egy tömörített s97.zip állományban a program forráskódja (s97.pas, s97.cpp, ...) az .exe és más, a fordító által generált állományok nélkül, valamint a program rövid dokumentációja (s97.txt, s97.pdf, ...), amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.
(10 pont)
Figyelem!
Az informatika feladatok megoldásait ne e-mailben küldd be! A megoldásokat az Elektronikus munkafüzetben töltheted fel.