Az I. 347. feladat (2014. április) |
I. 347. Az egyik asztalitenisz klub Lutri Páros Pingpong Versenyt szervezett egy hétvégi napra. A verseny szabályai a következők voltak:
A helyszínen minden nevező húzott egy számot, és a verseny alatt a játékosokat a kihúzott számok alapján sorsolták. Minden forduló páros partnerét és ellenfelét közvetlenül a játék előtt sorsolták ki. A játékosok az épp aktuális partnerükkel két szettet (nem két nyertet) játszottak a véletlenszerűen kihúzott alkalmi párossal. Kétszer ugyanazt a partnert és ugyanazt az ellenfelet nem kaphatták. Az egész verseny lutri volt a játékosok számára. Ha szerencséjük volt, mindig erős partnerrel játszottak, ha nem, akkor is nyerhettek, mert párosban minden lehetséges.
A játék során minden győztes labdamenetért pont járt a páros mindkét tagjának, függetlenül attól, hogy a mérkőzést megnyerték-e, vagy sem. Mindenkinek annyi pontja lett a végére, ahány pontot szerzett a mérkőzések alatt. A legtöbb pontot összegyűjtő játékos lett a bajnok.
A rendelkezésre álló hely és idő miatt az indulók számát 44-ben korlátozták és végül mindenki 7 mérkőzést játszott. A játszmákat 11 nyert pontig játszották.
1. Készítsünk új adatbázist lutri néven az eredmények kiértékeléséhez. A mellékelt három adattáblát (jatekos.txt, par.txt, merkozes.txt) importáljuk az adatbázisba a fájlnévvel azonos táblanéven (jatekos, par, merkozes). Az állományok tabulátorral tagolt, UTF-8 kódolású szövegfájlok, az első soruk a mezőneveket tartalmazzák. A létrehozás során minden táblában állítsuk be a megfelelő típusokat, és jelöljük meg a kulcsnak megadott mezőt.
Táblák:
A következő feladatok megoldásánál a lekérdezéseket a zárójelben olvasható néven mentsük. Ügyeljünk arra, hogy a megoldásban pontosan a kívánt mezők, kifejezések szerepeljenek, felesleges mezőt ne jelenítsünk meg. A megoldás során feltételezhetjük, hogy nincs két azonos nevű személy.
2. Készítsünk lekérdezést, amely először a nők, majd a férfiak nevét jeleníti meg a születési évük sorrendjében. A listában a nevek és a születési évek jelenjenek meg, az azonos évben születtek esetében ábécé sorrendben. (2nevezok)
3. Készítsünk lekérdezést, amely megadja, hogy hány olyan mérkőzés volt, ahol mindkét szettet az egyik páros nyerte. (3erosebb)
4. Készítsünk jelentést, amely Forrai Laura és párjainak nevét kilistázza mérkőzésenként. A jelentés elkészítését lekérdezéssel készítsük elő. (4forraipartnerei)
5. Lekérdezés segítségével jelenítsük meg azon párosok tagjainak nevét, akik valamelyik szettjüket 0-ra nyerték. (5tuleros)
6. Adjuk meg lekérdezés segítségével a legidősebb játékos mérkőzésenkénti pontszámait. (6legidosebb)
7. Határozzuk meg lekérdezés segítségével az első 10 helyezett nevét és pontszámát. (7elso10)
8. Listázzuk ki lekérdezés segítségével játékosonként, hogy hány győztes szettet szereztek. A felsorolásban a nevek és a győztes szettek száma jelenjen meg az utóbbi szerint csökkenő sorrendben. (8jatszmagyoztes)
Beküldendő egy tömörített állományban (i347.zip) az adatbázis (lutri.odb, lutri.mdb), valamint egy rövid dokumentáció (i347.txt, i347.pdf), amelyből kiderül az alkalmazott adatbázis-kezelő neve és verziószáma.
Az adatbázisba importálandó - honlapunkról letölthető - adattáblák: a jatekos.txt, a par.txt és a merkozes.txt
Letöltendő fájlok:
(10 pont)
A beküldési határidő 2014. május 12-én LEJÁRT.
Minta megoldás:
Kovács Balázs Marcell 11. osztályos tanuló (ELTE Radnóti Miklós Gyakorló Iskola, Budapest) megoldása: lutri.odb
Külön érdemes kiemelni az 5. feladat kétféle megoldását.
A feladat: Lekérdezés segítségével jelenítsük meg azon párosok tagjainak nevével, akik valamelyik szettjüket 0-ra nyerték!
1. megoldás
SELECT j1.nev, j2.nev
FROM par, jatekos AS j1, jatekos AS j2
WHERE j1.id=par.j1id and j2.id=par.j2id and
par.id in (SELECT iif((szett12=0) or (szett22=0),par1,iif((szett11=0) or (szett21=0),par2,0))
FROM merkozes
WHERE szett11=0 or szett21=0 or szett12=0 or szett22=0);
2. megoldás
(SELECT j1.nev, j2.nev
FROM merkozes, par, jatekos AS j1, jatekos AS j2
WHERE merkozes.par1=par.id and par.j1id=j1.id and par.j2id=j2.id and [szett22]*[szett12]=0)
UNION (SELECT j1.nev, j2.nev
FROM merkozes, par, jatekos AS j1, jatekos AS j2
WHERE merkozes.par2=par.id and par.j1id=j1.id and par.j2id=j2.id and [szett11]*[szett21]=0);
Statisztika:
10 dolgozat érkezett. 10 pontot kapott: Kovács Balázs Marcell. 8 pontot kapott: 1 versenyző. 7 pontot kapott: 1 versenyző. 6 pontot kapott: 3 versenyző. 3 pontot kapott: 3 versenyző. Nem versenyszerű: 1 dolgozat.
A KöMaL 2014. áprilisi informatika feladatai