Harjutusülesanded enne kontrolltööd nr. 2
1. Klassimall objektide hoidmiseks
Koosta klassimall, mis hoiab andmestruktuuris (valida ise) mingi teise klassi objekte (parameetriks on klassi nimi). Klassimallis peavad olema järgmised funktsionaalsused:
- konstruktor, mis loob andmestruktuuri malli tüüpi objektide jaoks
- destruktor, kus andmestruktuur hävitatakse
- liikmefunktsioon objekti lisamiseks andmestruktuuri
- liikmefunktsioon, mis tagastab objekti indeksi järgi
- liikmefunktsioon, mis tagastab objekti indeksi etteantud objekti järgi
- liikmefunktsioon objektide kuvamiseks ekraanile
Näidiseks koosta klass Teos
, mis hoiab teose pealkirja ja autorit. Lisa vajalikud liikmefunktsioonid. Katseta ka teiste isetehtud klassidega.
2. Raamatukogu
Raamatukogus on vaja raamatuid klassifitseerida sarjade järgi (nt Ajavaim, Aken maailma, Eesti mälu, Väike ajalugu jne).
Koosta klass Raamat
, kus on privaatsed isendiväljad pealkirja, autori ja sarja jaoks (kõik string
tüüpi). Klassis peavad olema liikmefunktsioonid sarja muutmiseks ja raamatu kuvamiseks ekraanile.
Koosta klass Sari
, kus on privaatsed isendiväljad sarja nime ja raamatute vektori jaoks. Klassis on liikmefunktsioonid
- raamatu lisamiseks
- raamatu kustutamiseks
- sarja raamatute ekraanile kuvamiseks
Koosta klass Sarjad
, kus hoitakse kõikidesse sarjadesse kuuluvate raamatute infot kujul map<sarja_nimi, *viit sarja raamatute vektorile>
. Klassis peavad olema järgmised liikmefunktsioonid:
- raamatu lisamine (kui raamatul puudub sari, siis ei lisata)
- raamatu sarja muutmine
- raamatu kustutamine
- sarja lisamine (ette viit Sari isendile)
- sarja kustutamine
- sarja raamatute kuvamine ekraanile
Kasutada võimalusel tarku viitasid (smart pointers). Testi oma klasse.
Raamatute näidiseid (koos ilmumisaastaga) leiad siit:
Roberto Bolano. Metsikud detektiivid, Ajavaim, 2013 Jaan Kross. Kallid kaasteelised, Eesti mälu, 2003 Steve Parker. Dinosaurused ja nende maailm, Aken maailma, 1998 Julio Cortazar. Salarelvad, Ajavaim, 2011 David Burnie. Linnud ja nende maailm, Aken maailma, 1997 Mari Möldre. Eesriie avaneb, Eesti mälu, 2010
3. Andmete lugemine koos erinditöötlusega
Koosta funktsioon, mis loeb etteantud failist andmeid ja teeb nendega arvutusi. Andmed on failis tühikuga eraldatult, igal real peab olema sama palju arve (tüübiks võib olla float
). Funktsioon tagastab viite sõnastikule, kus võtmeks on rea number ja väärtuseks reas olevate arvude aritmeetiline keskmine. Funktsioon peaks hakkama saama järgmiste erinditega:
- faili ei leitud
Kui sisendfaili ei ole olemas, peaks funktsioon väljastama runtime_error
erindi koos sobiva veateatega.
- kehtetu sisend
Kui failis olevate andmete seas on mittearve (st pole võimalik arvuks teisendada), siis peaks funktsioon viskama erindi 'vigase arvu erind' koos sobiva veateatega.
- reas on eelnevatest erinev arv arve
Kui reas on eelnevate ridadega võrreldes erinev arv arve, siis visata erind 'vigane rida' koos rea sisuga ja jätta see rida töötlemata.
Funktsioonis main
kuva iga rea kohta rea number ja rea keskmine.