15. labor: Failid

Labori materjal

Esitamisele kuuluvad ülesanded

Selles laboris on 2 ülesannet, millest mõlemale on edasijõudnute ülesanded laiendusena.

Ülesanne 1: paaris/paaritu

Selle ülesande peamiseks eesmärgiks on harjutada mitme faili korraga käsitlemist ning selle korrektselt tegemist.

Nõuded
  • 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 siis sellest teavitatakse kasutajat, sealjuures täpsustatakse ka milline fail ei avanenud.
    • Failid sulgetakse enne programmi lõppu
  • Kui sisendfailis on vales formaadis sisend peab programm töö katkestama.
    • Näiteks 9 -5 hey 14
Hoiatused ja vihjed!
  • Ole väga ettevaatlik lõpmatute tsüklitega olukorras kus toimub ka faili kirjutamine – võid oma kettaruumi mõne sekundiga täis kirjutada.
  • Jäta vähemalt testimise ajaks ekraanile väljatrükk iga loetud numbri kohta ning millisesse faili see kirjutatakse. Sedasi on lihtsam aru saada kui midagi läheb valesti ja saad kiiresti katkestada programmi ( ctrl+c ) kui tekib lõpmatu tsükkel).
  • Kui esimene fail õnnestus avada, kuid teine mitte, siis enne väljumist tuleb esimene kinni panna!
Edasijõudnute ülesanne 1: statistikute leidmine

Leia 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 selle ülesande lahendamiseks.
  • Programm peab jätkuvalt töötama lõpmata paljude arvudega.
Edasijõudnute ülesanne 2: käsurea argumendid

Lisa programmile käsurea argumentide tugi. Muuda programmi järgnevalt

  • Sisendfaili nimetus loetakse alati käsurealt.
    • Kui faili nimetust ei anta kuvatakse veateade ning programm sulgeb end
    • Faili nimetus on alati esimene argument programmile
  • Verbose ehk jutukas
    • Programm peab tuvastama argumendina -v  ehk verbose
    • Programm kuvab iga faili avamise järel mis fail avati (nimeliselt)
    • Programm kuvab iga sisendist loetud numbri ning millisesse väljundfaili see kirjutati
    • Programm kuvab iga faili sulgemise
    • Kui verbose ei ole aktiivne, ei tohi programm ühtegi rida teksti kuvada (välja arvatud veateated ja edasijõudnute ülesanne 1 väljund)

Mõlemad argumendid on laialtlevinud praktikad käsureaprogrammide puhul, kuid leiavad 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: Hoiatustrahvide menetlemine

Ülesande eesmärgiks on luua programm, mis menetleb kiiruskaamerate poolt mõõdetud kiiruseületamisi.

Taustteave

Ülesanne on koostatud avaliku informatsiooni põhjal

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 5€.
  • Maksimaalne trahvisumma on 300€.
  • 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 25€.
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:

Teise loodava väljundfaili sisuks on üldmenetluse teated. St sinna tohib vaid kirjutada need, kelle suhtes alustatakse üldmenetlust. Üldmenetluse teated kirjutatakse järgneva formaadiga:

Oodatav tulemus:

Edasijõudnute ülesanne: seadistatavus

Kuna seadused on pidevas muutumises, siis trahvimäärade koostamiseks kasutatavad väärtused peavad olema lihtsasti seadistatavad. Mõtle välja 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 aga igapäevaelus nähtamatu

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 aega raisata asjade ümberseadistamisega ega isegi nt olemasoleva seadistuse kinnitamisega.
  • Seadistusvõimaluse muudatus peab kehtima senikaua kuniks seda uuesti tehakse.
    Mõte: Olles näiteks pärast seadusemuudatust tarkvara ära seadistanud uutele väärtustele ei soovi sa seda iga päev uuesti teha.
  • Seadistuste muutmine ei tohi vajada programmi ümberkompileerimist.
    Mõte: Keegi ei kujutaks ette, et politseiametnik hakkab programme ümber kompileerima keset tööpäeva.

Pärast seda tundi

  • peaksid oskama faile avada ja sulgeda
  • 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