Kodused ülesanded
Funktsioonid
NB! Loodud funktsioonid lisa vastavalt failidesse andmed.h
ja andmed.cpp
ning main
funktsioon kirjuta faili kodu9.cpp
.
1. Koosta kolm funktsiooni int* loo_andmed(int)
, void tootle_andmeid(int*, int)
ja void kustuta_andmed(int*)
, mis töötavad järgmiselt:
- Funktsioon
loo_andmed
loob etteantud täisarvu pikkuse täisarvumassiivi kuhjamälus, täidab selle suvaliste täisarvudega ning tagastab loodud massiivi.
* Ühest väiksema pikkuse korral ei tohi funktsioon massiivi luua ning peab tagastama NULL-viida (nullptr
).
- Funktsioon
tootle_andmeid
arvutab andmete summa ja keskmise ning väljastab need. Pärast väljastamist muudab funktsioon massiivi elemendid negatiivseks.
* NULL-viida puhul ei tohi funktsioon midagi teha.
- Funktsioon
kustuta_andmed
vabastab loodud massiivi.
2. Loo kaks funktsiooni unique_ptr<int> genereeri_arv()
ja void proovi_arvu(weak_ptr<int>)
, mis töötavad järgmiselt:
- Funktsioon
genereeri_arv
tagastab unikaalse viida arvule, mis on täidetud juhusliku arvuga vahemikus0 <= arv <= 100
. - Funktsioon
proovi_arvu
väljastab nõrgas viidas antud arvu juhul kui viit ei ole ära kustutatud. Vastasel juhul väljastab funktsioon "ei eksisteeri".
Näide funktsioonide tööst
int main() { auto arv = genereeri_arv(); cout << *arv << '\n'; arv = genereeri_arv(); cout << *arv << '\n'; auto eksisteerivArv = make_shared<int>(1); proovi_arvu(eksisteerivArv); // jagatud viidast tehakse automaatselt nõrk viit weak_ptr<int> wp; proovi_arvu(wp); auto andmed = loo_andmed(10); for (int i = 0; i < 10; i++) { cout << andmed[i] << ' '; } cout << '\n'; tootle_andmeid(andmed, 10); for (int i = 0; i < 10; i++) { cout << andmed[i] << ' '; } cout << '\n'; kustuta_andmed(andmed); cout << loo_andmed(0) << '\n'; // peaks olema 0x0 tootle_andmeid(nullptr, 0); // ei tohiks väljastada midagi return 0; }
Võimalik väljund on:
50 67 1 ei eksisteeri 58 59 53 61 82 80 15 58 12 45 Summa: 523 Keskmine: 52.3 -58 -59 -53 -61 -82 -80 -15 -58 -12 -45 0
Testi loodud funktsioone funktsioonis main
.