Általános leírás
Törekedj arra, hogy szép, áttekinthető kódot írj! Úgy oldd meg a feladatokat, hogy függvényeket használsz a megoldáshoz! A felhasznált függvényekben ne történjen konzolra való kiírás!
Mindegyik feladatban nagyon fontos, hogy bár két inputfájlt kapsz, úgy írd meg a programod, hogy bármilyen, a feladatkiírásnak megfelelő inputfájlpárral működjön!
3.100-SZ2 Szavazás – pontozásos választás
Az iskola diákönkormányzati elnököt választ. A szavazók minden jelöltet sorrendbe állítanak: első helyre a leginkább támogatott, utolsó helyre a legkevésbé támogatott jelölt kerül. A választás eredményét az alábbi, a feladathoz rögzített szabályok alapján kell meghatároznod.
Bemeneti fájlok
A jeloltek.csv UTF-8 kódolású fájl első sora mezőneveket tartalmaz. Minden további sor egy jelölt egyedi pozitív egész azonosítóját és teljes nevét tartalmazza, pontosvesszővel elválasztva. Az azonosítók nem feltétlenül folytonosak, a sorok sorrendje tetszőleges. Legalább két jelölt van. A nevek nem tartalmaznak pontosvesszőt vagy sortörést; a mezők nincsenek idézőjelezve.
A szavazatok.txt UTF-8 kódolású fájl minden sora egy szavazat. A fájlnak nincs fejlécsora. Egy sorban az összes jelölt azonosítója szerepel pontosvesszővel elválasztva, a szavazó preferenciasorrendjében. Minden jelölt pontosan egyszer szerepel minden szavazaton. Feltételezheted, hogy legalább egy szavazat van, és minden szavazat érvényes. Azonos sorrendet több szavazó is megadhat.
A választás szabályai
Ha J jelölt van, egy szavazólapon az első helyért J − 1,
a második helyért J − 2 pont jár, és így tovább; az utolsó helyért 0 pont.
Egy jelölt összpontszáma az összes szavazólapon szerzett pontjainak összege.
A rangsor elsődleges szempontja az összpontszám, csökkenő sorrendben. Pontegyenlőségnél az első helyezések száma döntsön csökkenő sorrendben, további egyezés esetén a második helyezések száma, majd a harmadik helyezések száma, és így tovább, az összes helyezést figyelembe véve. Ha minden helyezés darabszáma megegyezik, a kisebb azonosítójú jelölt kerüljön előre. A győztes a rangsor első jelöltje.
Feladatok
Minden részfeladat előtt írd ki a sorszámát!
- Olvasd be a jelölteket és a szavazatokat! Írd ki a jelöltek számát és a leadott szavazatok számát!
- Készíts függvényt, amely minden jelöltnél meghatározza, hányszor szerepelt az egyes helyeken! A nem kapott helyezések darabszáma 0 legyen!
- Készíts függvényt, amely kiszámítja a jelöltek összpontszámát! A helyezések darabszámait is őrizd meg a holtversenyek eldöntéséhez!
- Rendezéssel állítsd elő a fenti szabályoknak megfelelő rangsort! Készíts függvényt, amely visszaadja a rendezett eredménylistát! Írd ki minden jelölt azonosítóját, teljes nevét és összpontszámát a rangsor sorrendjében! A nulla pontot kapó jelöltek is szerepeljenek a listában!
- Írd ki a győztes nevét!
Példa
A jeloltek.csv tartalma:
Azonosito;Nev
1;Kovács Anna
2;Nagy Bence
3;Tóth Csilla
A hozzá tartozó szavazatok.txt:
1;2;3
1;2;3
1;2;3
2;3;1
2;3;1
3;2;1
3;2;1
Három jelöltnél az első helyért 2, a másodikért 1, a harmadikért 0 pont jár. A rangsor és a győztes:
2;Nagy Bence;9
1;Kovács Anna;6
3;Tóth Csilla;6
A győztes: Nagy Bence
Nagy Bence kétszer első és ötször második: 2 · 2 + 5 · 1 = 9 pontot szerez. Kovács Anna és Tóth Csilla egyaránt 6 pontos. Kovács Anna kerül előre, mert három első helyezése van, Tóth Csillának pedig kettő.