Harjutusülesanded
1. Funktsioonid
Koosta viis funktsiooni
int* loo_andmed(int)
vector<int>* loe_andmed(string* failinimi)
void tootle_andmeid(int*, int)
void kustuta_andmed(int*, vector<int>*)
tootle_andmeid_vektoris(vector<int>*)
- Funktsioon
loo_andmed
loob etteantud pikkusega täisarvumassiivi kuhjamälus, täidab selle juhuslike täisarvudega ning tagastab viida loodud massiivile. Ühest väiksema pikkuse korral ei tohi funktsioon massiivi luua ning peab tagastama NULL-viida (nullptr
). - Funktsioon
loe_andmed
loob täisarvuvektori kuhjamälus, loeb etteantud failist täisarvud (asuvad mitmel real tühikutega eraldatult) loodud vektorisse ning tagastab viida loodud vektorile. - Funktsioon
tootle_andmeid
arvutab massiivis arvude summa ja keskmise ning kuvab tulemused ekraanile. Pärast kuvamist muudab funktsioon massiivi elemendid negatiivseks. NULL-viidanullptr
puhul ei tohi funktsioon midagi teha. - Funktsioon
tootle_andmeid_vektoris
arvutab vektoris andmete summa ja keskmise ning kuvab tulemused ekraanile. - Funktsioon
kustuta_andmed
vabastab loodud massiivi ja vektori.
Testfunktsioonis testi loodud funktsioonide tööd.
2. Autod
Loo klass Auto
, kus on privaatsed isendimuutujad auto margi (string
), energiaklassi (string
) ja kütuse kulu liitrites (double
) 100 km kohta. Klassis on vaikekonstruktor ja kolme parameetriga konstruktor. Klassis on avalik funktsioon kytusekulu
, mis tagastab kütusekulu. Klassis on destruktor, kus kuvatakse ekraanile "[mark] destruktoris"
. Klass peab üle defineerima operaatori <<
, mille abil saab auto infot ekraanile kuvada.
Failis autod.txt
on igal real andmed ühe auto kohta eraldatult semikooloniga (;
). Autode arv failis ei ole ette teada.
Näide faili autod.txt
võimaliku sisu kohta
Audi A4 Avant;E 167 ; 7.3 Ford Explorer;A 71 ; 3.1 Mazda 6 ;E 167 ; 7.4 Mini Countryman;D 146 ; 6.5 |
https://eteenindus.mnt.ee/public/heitkogusteteatmik/heitkogusteTeatmik.jsf
Kirjuta funktsioon Auto* looAuto(const string rida)
, mille parameetriks on andmed samal kujul nagu faili ühel real. Funktsioon loob kuhjamällu Auto
objekti ja tagastab selle viida.
Kirjuta funktsioon vector<Auto*>* loeAutod(const string fail)
, mis loob kuhjamällu vektori vector<Auto*>*
. Funktsioon loeb failist autode andmed ja kasutades funktsiooni looAuto
lisab vektorisse viidad (pointer) autode objektidele. Funktsioon tagastab viida vektorile.
Kirjuta funktsioon Auto* vähima_kuluga(vector<Auto*>* autod)
, mis tagastab viida vähima kütusekuluga autole.
Kirjuta funktsioon void kustutaAutod(vector<Auto*>* autod)
, mis kustutab vektoris olevad autode viidad.
Testfunktsioonis loe autod vektorisse kasutades funktsiooni loeAutod
. Kuva autode info ekraanile. Leia vähima kütusekuluga auto kasutades funktsiooni vähima_kuluga
. Kuva selle auto info ekraanile. Kustuta vektoris viidad autodele kasutades funktsiooni kustutaAutod
. Lõpuks kustuta viit vektorile.
3. Oma tehtud aheljärjend (linked list)
![]() |
Loo klassimall, mis hoiab aheljärjendit. Järjendis hoitav element on malliparameetri tüüpi. Aheljärjendis on elemendid omavahel seotud viitadega. Klassist isendi loomisel on aheljärjend tühi. Klassis on järgmised funktsioonid:
- elemendi lisamiseks koos mälu reserveerimisega
- elemendi otsimiseks etteantud nime järgi
- elemendi kustutamiseks etteantud nime järgi koos mälu vabastamisega
- elementide arvu tagastamiseks
- järjendi hävitamiseks koos mälu vabastamisega
- mõtle ise juurde!
Nõuded malliparameetrile:
- Malliparameeter on klass või struktuur, kus on vähemalt kaks liiget:
string
tüüpi nimi- malliparameetri tüüpi viit (pointer) järgmisele
- Klassis või struktuuris on funktsioon
getElement()
, mis tagastab nime - Klassis või struktuuris on funktsioon
getJargmine()
, mis tagastab viida järgmisele - Klassis või struktuuris võib olla veel liikmeid ja funktsioone
Loo oma klass ja katseta loodud aheljärjendit.
4. Järjestatud aheljärjend
Modifitseeri eelmise ülesande lahendust selliselt, et tekiks järjestatud aheljärjend. Sellisel juhul peavad järjendis hoitavad objektid olema võrreldavad.
5. Kahesuunaline aheljärjend
Modifitseeri kolmanda ülesande lahendust selliselt, et tekiks kahesuunaline aheljärjend. Sellisel juhul peavad järjendis hoitavad objektid olema varustatud kahe viidaga - viit eelmisele ja viit järgmisele elemendile. Lisa elemendi otsimise funktsioonile parameeter otsimise suuna jaoks.