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_andmedloob 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_andmeidarvutab 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_andmedvabastab 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_arvtagastab unikaalse viida arvule, mis on täidetud juhusliku arvuga vahemikus0 <= arv <= 100. - Funktsioon
proovi_arvuvä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.