9. DOMAČA NALOGA (20. 04. - 04. 05.) --- 20 točk

Naslov:  Merjenje temperature
Vrednost naloge: 20 točk

Temperaturo okolja merimo na merilnih postajah, podatki pa se zapisujejo v skupno datoteko. Ločimo med ročnimi in avtomatskimi merilnimi postajami. Avtomatska merilna postaja podatke zapiše vsak dan v obliki

id_postaje:ime_mesta:datum:ura:temperatura

Podatke iz ročnih merilnih postaj v datoteko vpisuje človek, zato nekateri deli vrstice (ali kar celotna vrstica) lahko manjkajo. Format podatkov ročne merilne postaje je:

id_postaje:ime_mesta:ime_zapisovalca:datum:temperatura

Podatek id_postaje je identifikacijska številka postaje, ki je za avtomatske postaje število med 0 in 99, za ročne pa število med 100 in 199.

Pravimo, da je vrstica v datoteki nepopolna, če v njej manjka kakšen podatek ali je namesto podatka zapisan znak ?.

Primer zapisa meritev je podan v datotekah temperature1.txt (vsebuje samo meritve avtomatskih postaj), temperature2.txt  (vsebuje meritve avtomatskih in ročnih postaj, podatki so urejeni po datumih) in temperature3.txt (vsebuje meritve avtomatskih in ročnih postaj, podatki niso urejeni po datumih).

Pri branju vremenskih podatkov lahko predpostavite, da je skupno število vrstic v datoteki manjše od 10000. Upoštevajte tudi dejstvo, da so podatki avtomatskih postaj zapisani v pravilnem vrstnem redu (po datumih), podatki ročnih postaj pa so lahko zapisani v poljubnem vrstnem redu, poleg tega pa nekateri datumi pri ročnih meritvah lahko manjkajo ali se ponovijo (v tem primeru upoštevajte prvo popolno vrstico).

Napišite program za izpis podatkov o temperaturah okolja.  Vse razrede in metode implementirajte v datoteki DN09.java.  Razred DN09 naj  vsebuje metodo main(), ki bo omogočala testiranje vseh ostalih metod. Prvi argument programa bo vedno številka naloge, pomen ostalih argumentov pa je razviden iz opisa pri posamezni nalogi.

1) Napišite razred Meritev, ki vsebuje atribute: id, mesto, datum, temperatura. Iz tega razreda izpeljite podrazreda AvtomatskaMeritev (vsebuje dodatni atribut ura) ter RocnaMeritev (vsebuje dodatni atribut zapisovalec). Za vse tri razrede napišite smiselne konstruktorje (uporabite tudi klic konstruktorja nadrazreda!).

2) Napišite metodo za branje meritev, ki so zapisane v dani datoteki. Metoda naj prejme en parameter (ime datoteke) in vrne tabelo tipa Meritev []  (v tabeli naj bodo objekti razredov AvtomatskaMeritev in RocnaMeritev).

3) Napišite metodo za izpis povprečne temperature, izmerjene na dani merilni postaji za dano obdobje. Ob klicu programa

java DN09 3 temperature1.txt 17 1.1.2017 1.12.2017

naj program izpiše

Povprecna temperatura merilnega mesta 17 za obdobje od 1.1.2017 do 1.12.2017 je 14.5 stopinj celzija.

4) Napišite metodo za izpis vseh popolnih meritev na dani merilni postaji. Meritve naj bodo urejene po datumih. Ob klicu programa

java DN09 4 temperature1.txt 14

naj program izpiše

Popolne meritve na merilni postaji 14 so:
01.01.2017: -4.1
02.01.2017: -12.3
03.01.2017: -9.0
04.01.2017: 4.9
05.01.2017: -3.7
06.01.2017: -3.4
07.01.2017: -13.1
08.01.2017: -14.9
09.01.2017: -9.8
10.01.2017: -11.1
11.01.2017: -7.5
12.01.2017: 9.7
...
24.12.2017: 7.6
25.12.2017: -9.4
26.12.2017: -4.9
27.12.2017: -9.9
28.12.2017: 4.0
29.12.2017: 3.1
30.12.2017: 2.2
31.12.2017: 6.4

Opomba: program bomo preverili na vhodnih datotekah, ki bodo vsebovale samo podatke iz avtomatskih merilnih postaj (in zato bodo podatki že sami po sebi urejeni) ter tudi na datotekah, ki bodo vsebovale oboje - podatke iz avtomatskih in ročnih merilnih postaj (v teh primerih morate za pravilno urejenost poskrbeti vi).

5) Napišite metodo za izpis povprečne temperature po mesecih za vsa mesta in vse merilne postaje skupaj; za izračun povprečne temperature uporabite podatke iz vseh popolnih vrstic podane datoteke. Ob klicu

java DN09 5 temperature1.txt 2017

naj program izpiše

Povprecna temperatura po mesecih leta 2017 
Januar: -2.5
Februar: 2.2
Marec: 10.4
April: 16.1
Maj: 19.6
Junij: 21.8
Julij: 25.1
Avgust: 26.6
September: 22.0
Oktober: 14.0
November: 4.2
December: -1.2

6) Napišite metodo, ki izpiše tabelo povprečnih temperatur po tednih za vsa podana mesta. Metoda naj poleg tabele mest kot vhodni parameter dobi tudi začetni datum in število tednov v izpisu. Predpostavite, da se teden začne na dani datum in da vsebuje 7 dni. Dopolnite metodo main() tako, da bo program ob klicu

java DN09 6 temperature1.txt 3.3.2017 3 Ljubljana,Maribor,Celje,Koper

izpisal

          Ljubljana   Maribor     Celje     Koper
1.teden 11.6 13.2 9.4 11.9
2.teden 11.7 10.3 5.6 9.2
3.teden 12.0 11.5 11.5 9.7

7) Napišite razred Zapisovalec, ki naj vsebuje atributa ime ter meritve (prvi atribut je niz, drugi pa tabela meritev, ki jih je opravil ta zapisovalec). Razred naj vsebuje metodo, ki za dano obdobje vrne zanesljivost zapisovalca (kvocient med pravilnimi meritvami in številom dni v podanem obdobju; zanesljivost je 1, če je zapisovalec pravilno zapisal vse meritve (vse vrstice danega obdobja so popolne) in 0, če nobena meritev ni bila popolna). 

Napišite metodo, ki prebere podatke iz podane datoteke in ustvari tabelo zapisovalcev (predpostavite lahko, da bo število zapisovalcev manjše od 100). Vsak zapisovalec naj vsebuje vse svoje meritve. Po končanem branju naj metoda na zaslon izpiše zanseljivost vseh zapisovalcev. Imena zapisovalcev naj bodo urejena po abecednem vrstnem redu.

Ob klicu

java DN09 7 temperature2.txt 1.1.2017 1.3.2017

naj program izpiše

Zapisovalec       Zanesljivost
Ana 0.65
Andrej 0.58
Irena 0.50
Janez 0.65
Maja 0.60
Marija 0.57
Marko 0.52
Mateja 0.52
Mojca 0.62
Nina 0.53

Dodatna pojasnila

Pri tej nalogi je možnih 20 točk; pogoj za 10 in več točk je, da se oddana izvorna datoteka prevede in zažene, kot je napisano v navodilih. Če se niti ne prevede, je možnih največ 5 točk. Ali se bo program pravilno prevedel, najlažje ugotovite tako, da preverite pravilnost delovanja (program se bo pri naših testih pravilno prevedel natanko tedaj, ko se bo pravilno prevedel pri tem spletnem testiranju). Tudi sicer je priporočljivo, da pred oddajo programa na eUčilnco preverite pravilnost delovanja.