Házi feladat

3100 Szavazás – pontozásos választás

Á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!

  1. Olvasd be a jelölteket és a szavazatokat! Írd ki a jelöltek számát és a leadott szavazatok számát!
  2. 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!
  3. 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!
  4. 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!
  5. Í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ő.