Harjutusülesanded
1. Faili sümbolite sagedus
Kirjuta funktsioon sagedus
, mis võtab argumendiks sõne, mis sisaldab avatava faili asukohta. Funktsioon peab avama faili ja iga rea kohta leidma kõige sagedasema sümboli. Võib eeldada, et failis on vähemalt üks rida.
Lisaks peaks funktsioon kontrollima ka antud faili olemasolu ning selle puudumisel kasutajat teavitama ja funktsioonist väljuma. Kirjuta antud veateade veavoogu (cerr
).
Vihje: Siin võib abiks olla andmestruktuur map
.
NB! Kui täpitähed tekitavad ülesande lahendamisel probleeme, võib neid ignoreerida.
Näide funktsiooni tööst:
Faili sisend.txt sisu:
C++ is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup and first released in 1985 as an extension of the C programming language, or "C with Classes". The language has expanded significantly over time, and modern C++ now has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation. It is almost always implemented as a compiled language, and many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM, so it is available on many platforms.
Funktsiooni kasutav kood:
int main() { sagedus("sisend.txt"); sagedus("ei_eksisteeri.txt"); return 0; }
Väljund:
e: 19 e: 18 a: 20 Faili ei_eksisteeri.txt ei leitud.
2. Liitmise piiramine
Loo funktsioonimall nimega liidaJaPiira, millel on kaks malli argumenti. Esimene neist on tüübiargument T, teine täisarv N vaikimisi väärtusega 10. Funktsioon ise võtab kaks argumenti tüüpidega T ja tagastab antud argumentide summa juhul, kui see on väiksem kui teine malli argument. Vastasel juhul tagastada malli argumendi väärtus.
Näide funktsiooni poole pöördumisest:
int main() { std::cout << liidaJaPiira(4, 1) << '\n'; std::cout << liidaJaPiira(10, 100) << '\n'; std::cout << liidaJaPiira<int, 0>(0, 1) << '\n'; return 0; }
Väljund:
5 10 0
3. Elementide salvestaja
Loo funktsioonimall tüübiargumendiga T
, mille signatuur on järgmine: void looFailJaKirjuta(filesystem::path asukoht, T elemendid[], size_t arv)
. Funktsioon peab avama väljundfaili antud asukohale ning kirjutama sinna teises argumendis antud elemendid. Kolmas argument arv määrab elementide arvu. Kui faili ei eksisteeri, peab funktsioon selle looma.
Näide:
int main() { auto asukoht = filesystem::path("elemendid.txt"); string elemendid[] = {"üks", "kaks", "kolm"}; looFailJaKirjuta<string>(asukoht, elemendid, 3); }
Faili elemendid.txt sisu:
üks kaks kolm