A KöMaL 2015. februári 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. március 10-én LEJÁRT. |
I. 367. Egy \(\displaystyle M\times N\) (\(\displaystyle 5\le M, N\le 100\)) négyzetből álló négyzetháló egyes négyzeteiben átlósan egy tükröt helyeztünk el, amelynek mindkét oldala tökéletesen visszaveri a fényt. A tükrök a négyzetek középpontja körül könnyen elfordulhatnak. A fény egy időegység alatt egy egységnyi (a négyzet oldalhosszának megfelelő) utat tesz meg. A fénysugár a négyzetháló oldalára merőlegesen lép be, valamely négyzet oldalfelező pontján át. Minden pillanatban, amikor a fénysugár a négyzetháló egy négyzetének oldalához ér, a tükrök 90 fokkal elfordulnak.
A bemeneti fájl első sorában a sorok, majd az oszlopok száma olvasható. A második sor adja meg, hogy milyen irányból (b, j, f, l), hányadik egységben (fentről lefele és balról jobbra számozunk) lép be a rendszerbe a fény. Az alatta levő \(\displaystyle M\) sor mindegyikében pontosan \(\displaystyle N\) karakter van. A szóköz karakter (a mintán o) jelöli azokat az egységeket, ahol nincs tükör, a \ és / karakterek pedig a tükröket, valamint azok kezdeti állapotát mutatják.
A kimeneti fájl első sorában a kilépésig eltelt idő, a második sorában pedig - a bemenet második sorával egyező formában - a kilépési hely olvasható. Ha a fény nem lép ki a rendszerből, az első sorba a -1 érték kerüljön, a második pedig maradjon üresen.
A program első parancssori argumentuma a bemeneti fájl neve, a második pedig a kimeneti fájl neve legyen.
Beküldendő egy tömörített i367.zip állományban a program forráskódja (i367.pas, i367.cpp, ...), valamint a program rövid dokumentációja (i367.pdf), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.
(10 pont)
I. 368. Barátunk számítógépet szeretne vásárolni, de nem tud eligazodni a processzorok egyes tulajdonságai között. Segítségül néhány CPU jellemzőiből, valamint informatika áruházakból és azok árlistáiból adatbázist építettünk, hogy megkönnyítsük a választást és a vásárlást.
Készítsünk új adatbázist i368 néven. Honlapunkról letölthető az ixyz.zip állományban a cpu.csv, ceg.csv és arlista.csv - pontosvesszővel tagolt, UTF-8 kódolású - szöveges állomány. A szöveges fájlok az első sorban tartalmazzák a mezőneveket. A táblák szerkezete a következő leírás szerinti. Importáljuk az állományokat és hozzuk létre a cpu, ceg és arlista táblákat, majd állítsuk be a megfelelő típusokat és kulcsokat.
Táblák:
Az arlista tábla kapcsolja össze a processzorok és cégek adatait, úgy, hogy természetesen minden üzletben egy termék csak egyszer, egy áron szerepel.
A következő feladatok megoldásánál a lekérdezéseket, táblákat és jelentéseket a zárójelben olvasható néven mentsük. Ügyeljünk arra, hogy a megoldásban pontosan a kívánt mezők az előírt néven szerepeljenek.
Szeretnénk megtudni, hogy mely processzorok a leggyorsabbak a három mért sebesség alapján. A három érték átlagát közvetlenül nem érdemes átlagolnunk, hiszen értékeik különböző tartományokba esnek, ezért a három sebesség mindegyikénél kiválasztjuk a maximumot, majd minden értéket a saját legnagyobb értékéhez viszonyítunk.
1. A számításhoz először hozzunk létre egy lekérdezést, amely az MBM1, MBM2 és MBM3 névvel meghatározza az egyes sebességértékek maximumát. (1maxbm)
2. Ezután készítsünk egy lekérdezést, amiben a processzorok id azonosítója és a három sebesség a megfelelő maximális értékkel történő osztás után szerepel SBM1, SBM2, SBM3 néven, valamint egy teljesitmeny mező, amely az előző három érték átlaga. (2teljes)
3. Készítsünk lekérdezést, amely teljesítmény szerinti csökkenő sorrendben megadja a processzorok és foglalatuk típusát és a teljesítmény értékét. (3sorban)
A processzorok csíkszélességének csökkentésével csökken a fogyasztás is. Ugyanakkor az egyre összetettebb, nagyobb órajellel működő, több processzormagot és esetleg beépített grafikus egységet is tartalmazó CPU-k fogyasztása meghaladja a kisebb tudású processzorok fogyasztását. Vizsgáljuk meg, hogy mennyiben támasztják alá az adatok ezeket az általános meglátásokat.
4. Bővítsük a cpu táblát egy GP nevű logikai mezővel, és készítsünk módosító lekérdezést, amely értékét meghatározza, hogy van-e grafikus egység a processzorban. (4gp)
5. Adjuk meg lekérdezéssel a processzormagok és szálak száma, valamint a csíkszélesség értéke szerinti csoportosításban az adott csoportba sorolható, grafikus egységet nem tartalmazó processzorok számát és fogyasztásuk átlagát. (5fogyaszt)
6. Készítsünk lekérdezést, amely megadja azoknak a processzoroknak a típusát, teljesítményét és fogyasztását, amelyek alap és turbo órajele között legalább 0,5 GHz a különbség. (6turbo)
7. Készítsünk lekérdezést, amely megadja a legalább 60% teljesítményű processzorok közül az első három legkisebb fogyasztású típusát és azon cégek nevét, akik forgalmazzák ezeket a processzorokat. (7kisfogy)
Barátunk végül is úgy dönt, hogy egy 8 magos AMD processzort választ, ezért most szeretné tudni, hogy milyen áron érhetők el ezek a IV. és XIII. kerületi boltokban.
8. Készítsünk lekérdezést, amely kilistázza a fenti feltételnek megfelelő processzorok típusát, teljesítményét, árát, valamint az üzletek nevét, irányítószámát és címét. (8amd8)
Barátunk közben úgy dönt, hogy nem csak abban a két kerületben érdeklik a fenti processzorok, hanem bármelyik webáruházban megvásárolná őket.
9. Adjuk meg lekérdezéssel annak a cégnek a nevét, amelynél a választott processzorok közül a legolcsóbban elérhető a választott eszközök egyike, valamint adjuk meg a processzor típusát és árát. (9web)
Barátunk végül úgy gondolja, hogy érdemes lenne megvizsgálni a talált processzorral hasonló árfekvésű többi CPU-t is, hátha egy kicsit több pénzért sokkal jobbat kaphatunk.
10. Készítsünk jelentést, amelyen megjelenítjük a 30000-40000 Ft árkategóriába eső processzorok típusát, teljesítményét, grafikus egységének típusát, árát, azon üzletek nevét, ahol a fenti tartományba eső árban kapható. A jelentés legyen a processzorok típusa szerint csoportosítva, azon belül ár szerint növekvő sorrendbe rendezve. A jelentés címe legyen ,,További processzorok 30-40 ezerért'', az adatok feletti fejléc ,,Típus, Ár, Cég Neve, Teljesítmény, Grafika'' szavakból álljon. A jelentés A4-es méretben, álló tájolással készüljön, az összes mező és érték legyen teljes egészében látható. Ha szükséges, készítsünk az adatok kiválasztásához lekérdezést. (10többi)
Forrás: a processzorokra vonatkozó adatok a CHIP magazin 2015. januári számából valók.
Beküldendő egy tömörített állományban (i368.zip) a megoldást tartalmazó adatbázis vagy az SQL lekérdezéseket tartalmazó szövegfájl (i368.odb, i368.accdb, i368.sql), valamint egy rövid dokumentáció (i368.txt, i368.pdf), amelyből kiderül az alkalmazott adatbázis-kezelő neve és verziószáma.
Letölthető fájl: ixyz.zip
(10 pont)
I. 369. Írjunk egy olyan programot, ami az alábbi, mínuszokból és X-ekből, valamint sortörésekből álló szöveget ebben a formában kiírja a kimenetre. A program nem olvashat be fájlból és nem írhat fájlba. A feladatban cél az, hogy a forráskód minél kevesebb karaktert tartalmazzon. Vigyázat, a programnak pontosan ugyanezt a szöveget kell kiírnia, nem szabad eltéveszteni!
Pontozás: A programhoz mellékelt, a helyes megoldás elvét tömören, de érthetően leíró dokumentáció 1 pontot ér. A program pontozása a következőképp zajlik: aki a legkevesebb karakterrel megoldotta (a forráskód mérete a legkisebb), az további 9 pontot kap. A többiek a legkisebb méretű programhoz viszonyítva százalékos arányban kapnak pontot.
Beküldendő egy tömörített i369.zip állományban a program forráskódja (i369.pas, i369.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 (i369.txt, i369.pdf, ...), amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.
(10 pont)
S-jelű feladatokA beküldési határidő 2015. március 10-én LEJÁRT. |
S. 96. Egy \(\displaystyle D\) (\(\displaystyle 1\le D\le 10^{15}\)) hosszú rudat szeretnénk szétvágni \(\displaystyle N\) (\(\displaystyle 1\le N \le 500\;000\)) db kisebb rúdra. Tudjuk a kisebb rudak hosszát: az \(\displaystyle i\)-edik hossza \(\displaystyle r_i\) (\(\displaystyle 1\le r_i\le 10^{15}\)) és azt is tudjuk, hogy a kisebb rudak összhossza \(\displaystyle D\). Egy \(\displaystyle L\) hosszú rúd szétvágása tetszőleges hosszúságú két részre \(\displaystyle L\) forint. Egy vágással egyszerre csak egy rudat szabad kettévágni. Daraboljuk föl a lehető legolcsóbban a teljes \(\displaystyle D\) hosszú rudat a megadott \(\displaystyle r_i\) hosszú részekre.
A program olvassa be a standard input első sorából \(\displaystyle N\)-et és \(\displaystyle D\)-t, majd a következő \(\displaystyle N\) sorból az \(\displaystyle r_i\) egészeket, majd írja a standard output első sorába a minimális pénzt, amennyivel megoldható a szétdarabolás.
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 s96.zip állományban a program forráskódja (s96.pas, s96.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 (s96.txt, s96.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.