Professional Documents
Culture Documents
Tutorijal 14
Tutorijal 14
Tutorijal se radi "od kue" i alje se kao zadaa, njegova izrada e biti mogua od 10:00 (kada e
zadaci biti i objavljeni) do 19:00, na dan 3. VI 2016. godine.
Tutorijal se radi iskljuivo na C9 razvojnom okruenju. Nije dozvoljena izrada tutorijala u nekom
drugom orkuenju (IDE-u) i kopiranje istog na C9!
Nije dozvoljeno kopiranje teksta prilikom izrade tutorijala! Maksimalno je dozvoljeno kopirati do 80
karaktera (jedna linija koda) istovremeno! Ovo pravilo vrijedi za prva dva zadatka.
Vrie se provjera na prepisivanje, isto kao i za zadae, samo e biti restriktivnija (zbog iznad
navedenih pravila). Svaki pokuaj prepisivanja se kanjava oduzimanjem 0.3 poena po svakom
prepisanom zadatku
Tutorijal ima 3 zadatka. Bodovanje e biti sljedee: prvi zadatak nosi 0.7 poena, drugi zadatak 0.8
poena, dok trei zadatak nosi 0.5 poena.
Zadaci e biti autotestirani, od ega e biti jedan do dva autotesta po zadatku biti dostupni
studentima da sami (auto)testiraju.
Tema tutorijala je rad sa datotekama, stoga se studentima preporuuje da pogledaju kako se kreira
datoteka na C9 razvojnom okruenju i kako se smjeta u trenutni direktorij (najlake vam je ako
smjestite datoteku u isti folder gdje je se nalazi i va main.cpp fajl). Datoteke moete kreirati na
vie naina: File > New, Alt + N, ili klikom na znak + poslije prikazanih tabova. Pazite da ispravno
odaberete lokaciju datoteke. Najvie testova e testirati upravo rad sa datotekama!
Imena datoteka na Unixoidnim sistemima (na kojima se, izmeu ostalog, nalazi i C9 i autotester) su
case-sensitive (dok npr. na Windows operativnim sistemima nisu), tj. pravi se razlika izmeu velikih
i malih slova! Obratite panju na to!
Dobro provjerite da li ste funkcije, klase i ostale identifikatore nazvali upravo onako kako je to
postavkom reeno, da niste izostavili neku metodu i da vam je ispis upravo onakav kakav je
oekivan!
Ne podrazumijeva se da datoteke na svome kraju sadre novi red (mnogi studentski programi se
oslanjaju na tu injenicu prilikom itanja podataka koji se zavravaju novim redom)
Datoteke e uvijek sadravati smislene podatke (npr. ako se oekuje masa, u datoteci e biti
pozitivan broj itd.), ali to ne znai da e datoteke uvijek biti ispravne odnosno ispravno formatirane.
OBAVEZNO predvidite mogue greke prilikom itanja datoteka, tipa: datoteka ne postoji, datoteka
ne sadri numerike vrijednosti ondje gdje se oekuju i slino.
Ukoliko je mogue da va program prilikom izvravanja modificira datoteku, napravite njenu kopiju
da ne biste svaki put morali ponovo upisivati podatke, nego radite brisanje originalne datoteke i
preimenujte kopiju (ili napravite jo jednu kopiju) na originalno ime.
1. Uz pomo nekog tekstualnog editora kreirajte tekstualnu datoteku TEMPERATURE.TXT koja sadri
rezultate mjerenja temperature u nekoj meteorolokoj stanici. Datoteka je organizirana na sljedei
nain. U prvom redu nalazi se datum mjerenja, u formatu dan/mjesec/godina (npr. 5/12/2014). U
drugom redu nalazi se komentar, koji moe biti proizvoljan tekst (to moe biti npr. naziv mjernog
mjesta, ili neto drugo). U treem redu nalaze se rezultati mjerenja temperature za taj dan
(mjerenja se vre nekoliko puta dnevno), koji su meusobno razdvojeni zarezima (iza posljednjeg
rezultata nema zareza). Dalje se podaci ponavljaju za svaki od dana za koji su registrirani rezultati
mjerenja. Slijedi primjer mogueg izgleda ove datoteke:
1
Dr. eljko Juri: Tehnike programiranja /kroz programski jezik C++/ Tutorijal 14
Zadaci predvieni za rad na laboratorijskim vjebama uz pomo tutora Akademska godina 2015/16
23/5/2016
Meteoroloska stanica Bjelave
7,12,16,20,18,13,6
9/11/2014
Mobilno mjerno mjesto Aerodrom, stanica II
1,3,6,10,8
9/11/2014
Meteoroloska opservatorija Bjelasnica
5,2,0,3,1,2,1,4
Zatim napravite program koji iitava sadraj ove tekstualne datoteke i kreira drugu tekstualnu
datoteku IZVJESTAJ.TXT koja sadri izvjetaj o mjerenjima koji izgleda poput sljedeeg (prosjena
temperatura se ispisuje fiksno na dvije decimale):
Spisak treba biti sortiran po datumu mjerenja, kao to je gore prikazano. U sluaju da su za dvije
grupe mjerenja datumi isti, podaci za grupu sa manjom prosjenom temperaturom trebaju doi
prije podataka za grupu sa veom prosjenom temperaturom. Pretpostavite da ulazna datoteka
sadri samo ispravne podatke, u ispravnom formatu (ukljuujui i ispravan format datuma). U
sluaju da itanje datoteke protekne korektno, program ne ispisuje nita na ekran. S druge strane,
ukoliko datoteka ne postoji, na ekran treba ispisati tekst Datoteka TEMPERATURE.TXT ne
postoji! (sa prelaskom u novi red nakon ispisa), a ukoliko prilikom njenog itanja doe do bilo
kakvih problema osim itanja iza kraja datoteke (poput fizikog oteenja, nailaska na nenumerike
podatke prilikom itanja numerikih podataka, itd.) na ekran treba ispisati tekst Problemi pri
citanju datoteke TEMPERATURE.TXT (takoer uz prelazak u novi red).
2. Za voenje evidencije podataka o robi u nekom skladitu potrebno je razviti kontejnersku klasu
nazvanu Skladiste. U skladitu se roba nalazi pohranjena u sanducima (za vrste predmete) i u
buradima (za tenosti). Sanduci i burad se modeliraju redom pomou klasa Sanduk odnosno Bure.
Sanduk je opisan svojom teinom, nazivom predmeta koji se u njemu uvaju (pretpostavlja se da
jedan sanduk uva samo istovrsne predmete), brojem predmeta koji se u njemu uvaju i teinom
predmeta koji se u njemu uvaju (svi su iste teine). Bure je opisano svojom teinom, nazivom
tenosti koja se u njemu uva, te teinom tenosti koja se u njemu uva. Informacijama o robi
pohranjenoj u skladitu pristupa se pomou dinamiki alociranog niza pokazivaa koji pokazuju na
objekte tipa Sanduk ili tipa Bure (za tu svrhu, obje klase moraju biti izvedene iz neke apstraktne
bazne klase, koju ete nazvati Spremnik). Tom nizu pokazivaa se pristupa preko nekog od atributa
pohranjenog unutar klase Skladiste. Konstruktor klase Sanduk kao parametre zahtijeva teinu
(realan broj), naziv predmeta koji se uvaju (tipa konstantni niz znakova), broj predmeta koji se u
njemu uvaju (cijeli broj) i tenina predmeta koji se u njemu uvaju (realan broj), dok konstruktor
klase Bure prima kao parametre teinu (realan broj), naziv tenosti koja se uva (konstantni niz
znakova), te teinu tenosti (realan broj). Pored konstruktora, obje klase Sanduk i Bure podravaju
metode DajTezinu, DajUkupnuTezinu i Ispisi bez parmetara. Prva metoda daje teinu vlastitu
teinu sanduka ili bureta (bez onoga to je u njima), druga radi istu stvar, samo uraunava u obzir i
2
Dr. eljko Juri: Tehnike programiranja /kroz programski jezik C++/ Tutorijal 14
Zadaci predvieni za rad na laboratorijskim vjebama uz pomo tutora Akademska godina 2015/16
teinu onoga to se nalazi u sanduku ili buretu, dok metoda Ispisi ispisuje podatke o sanduku ili
buretu u obliku poput sljedeeg:
Vrsta spremnika: Bure
Sadrzaj: Trofazni kataklingeri
Vlastita tezina: 10 kg
Ukupna tezina: 45 kg
Razvijene klase demonstrirajte u testnom programu koji iitava podatke iz tekstualne datoteke sa
imenom ROBA.TXT, a nakon toga ispisuje spisak svega to se nalazi u skladitu, sortiran u opadajui
poredak po ukupnoj teini. U testnom programu obavezno predvidite i hvatanje eventualno baenih
izuzetaka koji se mogu pojaviti.
3
Dr. eljko Juri: Tehnike programiranja /kroz programski jezik C++/ Tutorijal 14
Zadaci predvieni za rad na laboratorijskim vjebama uz pomo tutora Akademska godina 2015/16
c) Metodom Obnovi koja obnavlja stanje lige iz binarne datoteke ije je ime zadano kao
parametar. Pri tome se svi eventualno prisutni podaci u ligi briu (prije nego to budu
zamijenjeni novim, uitanim iz datoteke). Ukoliko datoteka ne postoji, konstruktor baca izuzetak
tipa logic_error uz pratei tekst Datoteka ne postoji, a u sluaju bilo kakvih problema pri
itanju, metoda baca izuzetak istog tipa uz pratei tekst Problemi pri citanju datoteke.
Takoer, prilikom obnove, prije nego to se izvri dinamika alokacija za podatke koji e biti
obnovljeni, obavezno treba provjeriti da li je proitana informacija o broju timova manja ili
jednaka od kapaciteta lige. Ukoliko to nije sluaj (to se moe desiti jedino ukoliko neko
podvali neispravnu datoteku), treba baciti izuzetak tipa logic_error uz pratei tekst
Datoteka sadrzi fatalne greske. Ovo je neophodno uraditi, jer bi u suprotnom pokuaj obnove
lige iz takve datoteke rezultirao krahom programa.
d) Konstruktorom koji obnavlja stanje lige iz binarne datoteke ije je ime zadano kao parametar.
Sve to vrijedi za metodu Obnovi vrijedi i za ovaj konstruktor, jedina razlika je u tome to ovaj
konstruktor kreira novi objekat na prazno, tako da nema potrebe za brisanjem eventualno
postojeih podataka u ligi (jer takvih podataka nema).
Ukoliko to smatrate potrebnim, dozvoljeno je izvriti i neke dopune u klasi Tim (ali bez mijenjanja
njenog interfejsa). Nakon izvrene modifikacije, izmijenite i testni program tako da po zavretku
rada obavezno snima stanje lige u binarnu datoteku LIGA.DAT. Na poetku rada programa, ukoliko
datoteka LIGA.DAT postoji, program treba da obnovi sadraj lige iz ove datoteke, tako da program
prosto nastavlja raditi sa istom ligom i istim rezultatima sa kojima je radio prilikom prethodnog
pokretanja. U sluaju da datoteka LIGA.DAT ne postoji, program treba da kreira novu ligu (na
primjer, na osnovu podataka o ligi koji se unose sa tastature).
VANA NAPOMENA: U ovom zadatku morate krenuti od svoje vlastite klase Liga kakvu ste imali
na Tutorijalu 11, a ne od neije tue (ovo e se provjeravati). Ukoliko niste ranije dovrili ovu klasu,
morate je sada dovriti, a ukoliko je niste ranije ni napisali, morate je sada napisati (a ne nipoto
kopirati odnekud ili od nekoga). Ukoliko ne postupite ovako, zadatak e se tretirati kao prepisan.