Harjutusülesanne
1. Võistlused
Ülesande lahenduses peavad kõik deklaratsioonid olema päisefailis osalejad_tulemused.h
ja kogu lähtekood peale main
funktsiooni failis osalejad_tulemused.cpp
.
Igal aastal toimuvad erinevad spordivõistlused. Täiskasvanute üritustel saavad osalejad mingi koha. Laste üritustel võitjaid ei selgitata, lapsed on alati võitjad. Kõikide tulemuste andmed on failis järgmisel kujul:
38002055060;4. Tartu Linnamaraton;4
37806135649;34. Tartu Rattaralli;2
60212243307;9. Tartu Rulluisumaraton
34501234215;18. Tartu Rattamaraton;1
Failis on igal real andmed järjekorras: osaleja isikukood, võistluse nimi, saadud koht (lapsosaleja puhul kohta pole). Eraldajaks on semikoolon.
Programm peab sisaldama abstraktset klassi Osalenud
, klasse Tulemus
, Osaleja
ja Lapsosaleja
. Funktsioonis main
luuakse tulemuste vektor ja osalejad ning testitakse ka erinevate liikmefunktsioonide tööd. Kõikide klasside kõik isendiväljad peavad olema privaatsed.
Klassis Tulemus
peavad olema privaatsed isendiväljad järgmise info jaoks: osaleja isikukood (string
), võistluse nimi (string
) ja saadud koht (int
).
Klassis peab olema kolme parameetriga konstruktor osaleja isikukoodi , võistluse nime ja saadud koha määramiseks, samuti vajalikud get
-funktsioonid.
Klass peab üle defineerima operaatori <<
, mille abil saab tulemust ekraanile kuvada.
Abstraktne klass Osalenud
sisaldab int-tüüpi virtuaalseid funktsioone voite
ja tulemusi
(kummalgi ei ole argumente).
Klass Osaleja
on klassi Osalenud
alamklass.
Klassis on privaatsed isendiväljad järgmise info jaoks: osaleja nimi (string
), isikukood (string
) ja tulemuste nimekiri (vector<Tulemus>
).
Klassis peab olema konstruktor osaleja nime ja isikukoodi määramiseks ja vajalikud get
-funktsioonid.
Ühel osalejal võib olla mitu tulemust. Äsjaloodud osalejal ei ole ühtegi tulemust. Tulemuste lisamiseks peab olema funktsioon lisaTulemused
, mis saab argumendiks tulemuste vektori ja jätab meelde selle osaleja tulemused (ehk valib argumendina antud tulemuste vektorist ainult need tulemused, mis on seotud antud osalejaga). Funktsioon voite
tagastab osaleja võitude arvu (ehk saavutatud koht peab olema 1).
Funktsioon tulemusi
tagastab osaleja tulemuste arvu (ka võit on tulemus).
Klass peab üle defineerima operaatori <<
, mille abil saab osaleja infot ekraanile kuvada.
Klass Lapsosaleja
on klassi Osaleja
alamklass. Klassi konstruktor võtab lisaks osaleja nimele ja isikukoodile ka vanema isikukoodi. Funktsioon voite
tagastab võitude arvu, mis lapsosaleja puhul ühtlasi ka tulemuste arv.
Klass peab üle defineerima operaatori <<
, mille abil saab lapsosaleja infot ekraanile kuvada.
Programmis on funktsioon loe_failist
, mis võtab argumendiks failinime ja viite vektorile vector<Tulemus>
. Funktsioon täidab vektori failist saadud infoga. Tulemuste arv failis ei ole teada (programm peaks töötama suvalise arvu tulemustega).
Funktsioonis main
loetakse failist tulemused. Luua kolm osalejat ja kaks lapsosalejat. Osalejate isikukoodid saab valida näitefailist. Nimed ja lapsosaleja vanemate isikukoodid on vaja ise välja mõelda. Iga osaleja (ka lapsosaleja) korral rakendada tulemuste lisamise funktsiooni kasutades argumentidena tulemuste vektorit. Osalejate ja tulemuste info kuvada ekraanile.
Näide tulemuse osaleja info kuvamisest
isikukood: 38002055060 võistlus: 34. Tartu Rattaralli koht: 3
Näide tulemuse osaleja info kuvamisest
Osaleja nimi: Mait isikukood: 37806135649 tulemusi: 2 võite: 1