Hide

Problem A
Kosningar

Languages en is

Athugaðu að í þessu verkefni þarf úttak að vera nákvæmlega rétt, einnig varðandi fjölda og staðsetninga bilstafa.

Skrifið forrit sem sýnir upplýsingar um kosningar á Íslandi. Inntakið í forritið eru textaskrár með upplýsingum um kjördæmi og stjórnmálaflokka, auk kosningaúrslita í hverju kjördæmi. Úttakið er fallega sniðnar töflur (prentaðar með því að nota sniðstrengi (e. format strings)) sem byggja á upplýsingum úr textaskránum.

Valmynd er sýnd notandanum endurtekið og í hverri ítrun getur hann valið eftirfarandi aðgerðir:

  • 1. Show constituencies

  • 2. Show parties

  • 3. Show results.

  • 9. Quit.

Ef einhver annar valkostur er valinn af notanda framkvæmir forritið ekki neina aðgerð og sýnir valmyndina aftur.

Show constituencies

Þegar þessi valkostur er valinn í fyrsta skipti er notandinn beðinn um skráarnafn sem inniheldur í hverri línu nafn kjördæmis og fjölda kosningabærra manna, aðskilið með semíkommu. Ef hægt er að opna skrána eru upplýsingarnar úr skránni lesnar inn í uppflettitöflu og prentaðar út í töflu. Ef þessi valkostur er síðan valinn aftur þá er taflan sýnd án þess að endurlesa gögnin.

Hér er dæmi um kjördæmisskrá, constit.txt:

Reykjavik sudur;45725
Reykjavik nordur;45638
Sudvestur;73729
Sudur;38424
Nordaustur;29887
Nordvestur;21548

Miðað við ofangreinda inntaksskrá ætti forritið að sýna eftirfarandi töflu:

Constituency        Electorals
------------------------------
Reykjavik sudur          45725
Reykjavik nordur         45638
Sudvestur                73729
Sudur                    38424
Nordaustur               29887
Nordvestur               21548
------------------------------
Total:                  254951

Breidd dálkanna tveggja er 20 fyrir ‘Constituency’ og 10 fyrir ‘Electorals’.

Show parties

Þegar þessi valkostur er valinn í fyrsta skipti er notandinn beðinn um skráarnafn sem inniheldur í hverri línu bókstaf og nafn stjórnmálaflokks aðskilið með semíkommu. Ef hægt er að opna skrána eru upplýsingarnar úr skránni lesnar inn í uppflettitöflu og prentaðar út í töflu. Ef þessi valkostur er síðan valinn aftur þá er taflan sýnd án þess að endurlesa gögnin.

Hér er dæmi um skrá yfir stjórnmálaflokka, constit.txt:

D;Sjalfstaedisflokkurinn
B;Framsoknarflokkurinn
V;Vinstri graen
S;Samfylkingin
F;Flokkur folksins
P;Piratar
C;Vidreisn
M;Midflokkurinn
J;Sosialistaflokkur Islands

Miðað við ofangreinda inntaksskrá ætti forritið að sýna eftirfarandi töflu:


List                       Party
--------------------------------
D         Sjalfstaeðisflokkurinn
B           Framsoknarflokkurinn
V                  Vinstri graen
S                   Samfylkingin
F               Flokkur folksins
P                        Piratar
C                       Vidreisn
M                  Midflokkurinn
J      Sosialistaflokkur Islands

Breidd dálkanna tveggja er 6 fyrir ‘List‘ og 26 fyrir ‘Party’.

Show results

Þegar þessi valkostur er valinn í fyrsta skipti er notandinn beðinn um skráarnafn sem inniheldur kosningaúrslitin. Þessi skrá inniheldur nafn allra kjördæmanna og fyrir hvert kjördæmi fylgja flokksstafir og atkvæðin sem samsvarandi flokkur fékk í viðkomandi kjördæmi. Gera má ráð fyrir að fjöldi kjördæma í skránni sé jöfn þeim fjölda kjördæma sem komu fram í skránni sem gefin var upp í aðgerð 1 (‘Show constituents’) og að fjöldi flokka í skránni sé jafn fjölda flokka sem kom fram í skránni í aðgerð 2 (‘Show parties’). Ef annað hvort gögnin um kjördæmin eða flokkana eru ekki þegar hlaðin inn í forritið þá mun ekki virka að hlaða gögnin um niðurstöðunnar. Ef það hefur tekist að hlaða gögnunum um niðurstöðurnar skal biðja notandann um kjördæmi til að sýna niðurstöður um.

Hér er dæmi um kosningaúrslitaskrá, results.txt:

Reykjavik sudur
D;8809
V;5212
S;4720
B;4077
P;3875
F;3169
C;3067
J;1691
M;1456
Reykjavik nordur
D;7353
V;5597
P;4508
S;4427
B;4329
C;2706
F;2694
J;1976
M;1234
Sudvestur
D;17727
B;8520
V;7087
C;6684
P;4853
S;4748
F;4436
M;2612
J;1738
Sudur
D;7296
B;7111
F;3837
S;2270
M;2207
V;2200
C;1845
P;1660
J;1094
Nordaustur
B;6016
D;4346
V;3040
S;2465
M;2092
F;2026
C;1263
P;1256
J;954
Nordvestur
B;4448
D;3897
V;1978
F;1510
M;1278
S;1195
P;1081
C;1063
J;728

Ef hægt er að opna kosningaúrslitaskrána ætti að lesa hana í uppflettitöflu. Lykillinn er kjördæmisnafn og gildið fyrir hvern lykil er listi af túplum. Sérhver túpla er par sem inniheldur flokksbókstaf og fjölda atkvæða.

Þegar skráin hefur verið lesin er notandi beðinn um að setja inn kjördæmisnafn sem á að sýna kosningaúrslit fyrir. Til dæmis, ef notandinn slær inn ‘Reykjavík norður’, sést eftirfarandi tafla:

Reykjavik nordur
List                           Party     Votes     Ratio
--------------------------------------------------------
D             Sjalfstaedisflokkurinn      7353      21.1
V                      Vinstri graen      5597      16.1
P                            Piratar      4508      12.9
S                       Samfylkingin      4427      12.7
B               Framsoknarflokkurinn      4329      12.4
C                           Vidreisn      2706       7.8
F                   Flokkur folksins      2694       7.7
J          Sosialistaflokkur Islands      1976       5.7
M                      Midflokkurinn      1234       3.5
--------------------------------------------------------
Total:                                   34824     100.0
Turnout:                                            76.3

Breidd dálkanna fjögurra eru 10, 26, 10 og 10 fyrir ‘List‘, ‘Party‘, ‘Votes’ og ‘Ratio’, í sömu röð. Gildið fyrir dálkinn ’Ratio’ ætti að vera sniðið þannig að það hafi einn tölustaf á eftir aukastafnum. Gildi dálksins ‘Turnout’ er reiknað sem hlutfall heildaratkvæða af fjölda kosningabærra manna í viðkomandi kjördæmi.

Þegar kosningaúrslitaskráin hefur verið lesin er hún ekki endurlesin, þegar valkostur, ‘3. Sýna niðurstöður’, er valið aftur af notandanum.

Read Sample Interaction 1 Write
1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
1
File name: 
constit.txt
Constituency        Electorals
------------------------------
Reykjavik sudur          45725
Reykjavik nordur         45638
Sudvestur                73729
Sudur                    38424
Nordaustur               29887
Nordvestur               21548
------------------------------
Total:                  254951

1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
1
Constituency        Electorals
------------------------------
Reykjavik sudur          45725
Reykjavik nordur         45638
Sudvestur                73729
Sudur                    38424
Nordaustur               29887
Nordvestur               21548
------------------------------
Total:                  254951

1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
2
File name: 
bla.txt
1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
2
File name: 
parties.txt
List                       Party
--------------------------------
D         Sjálfstaedisflokkurinn
B           Framsoknarflokkurinn
V                  Vinstri graen
S                   Samfylkingin
F               Flokkur folksins
P                        Piratar
C                       Vidreisn
M                  Midflokkurinn
J      Sosialistaflokkur Islands

1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
2
List                       Party
--------------------------------
D         Sjálfstaedisflokkurinn
B           Framsoknarflokkurinn
V                  Vinstri graen
S                   Samfylkingin
F               Flokkur folksins
P                        Piratar
C                       Vidreisn
M                  Midflokkurinn
J      Sosialistaflokkur Islands

1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
3
File name: 
results.txt 
Constituency: 
Reykjavik nordur
Reykjavik nordur
List                           Party     Votes     Ratio
--------------------------------------------------------
D             Sjálfstaedisflokkurinn      7353      21.1
V                      Vinstri graen      5597      16.1
P                            Piratar      4508      12.9
S                       Samfylkingin      4427      12.7
B               Framsoknarflokkurinn      4329      12.4
C                           Vidreisn      2706       7.8
F                   Flokkur folksins      2694       7.7
J          Sosialistaflokkur Islands      1976       5.7
M                      Midflokkurinn      1234       3.5
--------------------------------------------------------
Total:                                   34824     100.0
Turnout:                                           76.3

1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
3
Constituency: 
Nordaustur
Nordaustur
List                           Party     Votes     Ratio
--------------------------------------------------------
B               Framsoknarflokkurinn      6016      25.6
D             Sjálfstaedisflokkurinn      4346      18.5
V                      Vinstri graen      3040      13.0
S                       Samfylkingin      2465      10.5
M                      Midflokkurinn      2092       8.9
F                   Flokkur folksins      2026       8.6
C                           Vidreisn      1263       5.4
P                            Piratar      1256       5.4
J          Sosialistaflokkur Islands       954       4.1
--------------------------------------------------------
Total:                                   23458     100.0
Turnout:                                           78.5

1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
3
Constituency: 
bla
1. Show constituencies
2. Show parties
3. Show results
9. Quit

Select an action: 
9