PR1ET15: Failid

Praktikumi materjal

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 ning selle korrektselt tegemist.

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 ja tekitada probleeme operatsioonisüsteemi töötamisega.
  • 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

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

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 [W15-3]: 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