Praktikumi materjal
- Slaidid: Failid
- Näide: Faili nimetus käsurea argumendina
- Näide: Mitme faili korraga kasutamine
Esitamisele kuuluvad ülesanded
Selles praktikumis on 2 ülesannet, millest mõlemale on pakutud laiendavad lisaülesannete näol.
Ülesanne 1 [W15-1]: Paaris/paaritu
Selle ülesande peamiseks eesmärgiks on harjutada mitme faili korraga käsitlemist programmi siseselt, rakendades sealjuures failide ohutut käsitlemist. Ülesande raames meenutame ka eelmise nädala teemat.
Nõuded
- Sisendfaili nimetus antakse käsurea argumendina.
- Faili nimetus on alati esimene käsureaargument
- Kui sisendfaili nimetus puudub, sulgeb programm end veateatega.
- Sisendfailist loetakse teadmata kogus täisarve, mis on eraldatud tühiku või reavahetusega. Arve võib olla lõpmata palju.
- Näiteks: 5 3 -6 0 25 955 -1024
- Arvud jaotatakse lähtuvalt järgnevatele põhimõtetele:
- Nulliga võrdsed või väiksemaid arve ignoreeritakse.
- Positiivsed paarisarvud salvestatakse faili paaris.txt
- Positiivsed paaritud arvud salvestatakse faili paaritud.txt
- Jälgida tuleb elementaarseid failide käitlemise reegleid
- Faili avamist kontrollitakse alati
- Kui fail ei avane, teavitatakse sellest kasutajat veateatega mis sisaldab faili nime, mis ei avanenud
- Failid sulgetakse enne programmi lõppu
- Kui sisendfailis on vales formaadis sisend peab programm töö katkestama. Programm ei tohi jääda lõpmatusse tsüklisse.
- Näiteks 9 -5 hey 14
Hoiatused ja vihjed!
- Ole äärmiselt ettevaatlik lõpmatute tsüklitega, kui selles toimub faili kirjutamine. See võib mõningate sekunditega su vaba kettaruumi täis kirjutada. Ühtlasi SSD mäluseadmetele tekitab see füüsilist “kulumist” ning võib operatsioonisüsteemi “ära tappa”.
- Jäta vähemalt testimise ajaks väljastus ekraanile iga loetud numbri kohta, sh millisesse faili see kirjutatakse. Sedasi on lihtsam aru saada, kui midagi läheb valesti. Programmi koheseks katkestamiseks kasuta klahvikombinatsiooni ( ctrl+c ).
- Kui esimene fail õnnestus avada, kuid teine mitte, siis enne väljumist tuleb esimene kinni panna!
Lisaülesanne [W15-3]: Statistikud ja jutukas
Lisa oma baasülesandele järgnev funktsionaalsus
- Leia ja väljasta järgnevad statistikud
- Täisarvude summa ja aritmeetiline keskmine
- Vähim ja suurim arv
- Kõik tulemused tuleb leida terve sisendfaili ulatuses olenemata arvust (sh negatiivsetest arvudest!).
- Korduv faili lugemine pole lubatud
- Programm peab jätkuvalt töötama lõpmata paljude arvudega.
Täiusta programmi käsureaargumentide tuge. Selleks lisa programmile jutukas (verbose) režiim
- Kõik senine funktsionaalsus peab jätkuvalt töötama endistviisi
- Programm peab tuvastama argumendina -v ehk verbose
- Programm kuvab iga faili avamise järel, mis fail avati (nimeliselt) ja mis režiimis
- Programm kuvab iga sisendist loetud numbri ning millisesse väljundfaili see kirjutati
- Programm kuvab iga faili sulgemise
- Kui verbose ei ole aktiivne, ei tohi eelmainitud väljundeid kuvada
Verbose ehk “jutukas” režiim on laialtlevinud praktika lihtsustaks vigade leidmist rakenduse koodis ning ka rakenduse kasutamisel (nt viga kasutamisel). See on eelkõige levinud käsureaprogrammide hulgas, kuid leiab sageli kasutamist ka graafilistes programmides.
Programmi käivitamise näited, mis peavad olema toetatud:
- ./parity input_nums.txt
- ./parity input_nums.txt -v
Ülesanne 2 [W15-2]: Hoiatustrahvide menetlemine
Ülesande eesmärgiks on luua programm, mis menetleb kiiruskaamerate poolt mõõdetud kiiruseületamisi.
Taustteave
Ülesanne on koostatud avaliku informatsiooni põhjal
- https://www.politsei.ee/et/juhend/kiiruskaamerad/korduma-kippuvad-kusimused
- https://transpordiamet.ee/maanteed-veeteed-ohuruum/liikluskorraldus/kiiruskaamerad
Trahvi koostamise põhimõtted
- Seadme mõõtemääramatus on 4 km/h (50 – 90 km/h alad).
- Menetlust alustatakse, kui kiirust ületati vähemalt 3 km/h.
- Iga piirkiirust ületatud km/h eest tuleb tasuda 7€.
- Maksimaalne trahvisumma on 420€.
- Kui lubatud kiirust ületati 50 km/h, tuleb alustada üldmenetlust.
- Näiteks: sõites 90 km/h alas kaamerasse 99 km/h tuleb määrata hoiatustrahviks 35€.
Sisendfail
Lae alla testandmetega sisendfail: 14_2_speeds.txt
Sisendfailis on üks mõõtetulemus rea kohta. Sisendfaili struktuur: <auto registreerimisnumber> <mõõdetud kiirus> <piirkiirus>
- Auto registreerimismärk – kuni 9 tähemärki pikk sõne
- Mõõdetud kiirus – positiivne täisarv
- Piirkiirus – positiivne täisarv.
Loodavad väljundfailid
Programmi tulemusena luuakse 2 väljundfaili – hoiatustrahvid ja üldmenetluse teated.
Esimese loodava väljundfaili sisuks on hoiatustrahvid. St sinna faili tohib kirjutada vaid trahviteatised, mis tuleks sõidukiomanikel tasuda. Iga hoiatustrahv kirjutatakse eraldi reale. Iga rea kohta on kolm andmevälja:
- Numbrimärk
- Kiiruseületus ilma mõõtemääramatuseta (mitu km/h üle piirkiiruse sõideti)
- Trahvisumma (kiiruseületamisele vastav hoiatustrahv)
Oodatav tulemus:
|
1 2 3 4 5 |
444AAD 3 km/h 21.00 EUR 554OAP 16 km/h 112.00 EUR 879IIM 3 km/h 21.00 EUR 999PPP 30 km/h 210.00 EUR 888RTA 49 km/h 343.00 EUR |
Teise loodava väljundfaili sisuks on üldmenetluse teated. St sinna tohib vaid kirjutada need, kelle suhtes alustatakse üldmenetlust. Üldmenetluse teated kirjutatakse järgneva formaadiga:
|
1 2 3 4 |
<numbrimärk> Piirkiirus: <piirkiirus> Moodetud kiirus: <mõõtmistulemus> Yletus: <ületatud kiirus> |
Oodatav tulemus:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SPEED1 Piirkiirus: 90 km/h Mõõdetud kiirus: 231 km/h Ületus: 137 km/h 881LLK Piirkiirus: 90 km/h Mõõdetud kiirus: 144 km/h Ületus: 50 km/h 648RQE Piirkiirus: 90 km/h Mõõdetud kiirus: 160 km/h Ületus: 66 km/h |
Lisaülesanne [W15-4]: Seadistatavus
Kuna seadused on pidevas muutumises, siis trahvimäärade koostamiseks kasutatavad väärtused peavad olema lihtsasti seadistatavad. Mõtle välja ja realiseeri kõige lihtsam lahendus järgnevate nõuete realiseerimiseks
1. Kiiruseületamise menetlemine peab olema seadistatav:
- Iga ületatud km/h eest makstav summa (nt 3€, 5€, 10€)
- Maksimaalne hoiatustrahvi summa (nt 100€, 190€, 300€)
- Üldmenetluse alustamiseks vajalik kiiruseületus (nt 40 km/h, 61 km/h, 100 km/h)
2. Seadistamine peab olema lihtne, kuid igapäevatöös jääma nähtamatuks
Leia sobiv lahendus programmi seadistatavaks muutmiseks lähtuvalt järgnevatest nõuetest:
- Seadistusvõimaluse lisamine ei tohi muuta programmi igapäevast kasutamist aegavõtvamaks.
Mõte: Igapäevasel kasutamisel ei soovi politseiametnik kulutada aega rakenduse seadistamisele, sh ta ei tohiks kulutada ka aega olemasoleva seadistuse kinnitamisele. - Seadistused peavad olema püsivad
Mõte: Olles näiteks pärast seadusemuudatust tarkvara ära seadistanud uutele väärtustele ei tohiks ümberseadistamist olla vaja enne järgnevat seadusemuudatust. - Seadistuste muutmine ei tohi vajada programmi ümberkompileerimist.
Mõte: Politseiametniku igapäeva tööriistade komplekti ei kuulu tarkvara ümberkirjutamine ega kompileerimine.
Pärast seda tundi
- peaksid oskama faile avada ja sulgeda, sh ohte ja kohustusi mis sellega kaasneb
- peaksid oskama kontrollida faili avanemist
- teadma, mis vahet on erinevatel faili avamise režiimidel ning kuidas need käituvad vastavalt, kas fail eksisteerib või ei eksisteeri
- teadma, mis olukordades failid ei avane, kui neid avada lugemiseks või kirjutamiseks
- teadma erinevaid failide adresseerimise võimalusi
- teadma, mida tähendab failide juures puhverdamine ning mis ohte see võib kaasa tuua
- oskama faile lugeda ja kirjutada
Täiendav materjal
- Basics: file handling in C
https://www.geeksforgeeks.org/basics-file-handling-c/ - FILE data type
https://cplusplus.com/reference/cstdio/FILE/