You are on page 1of 4

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

Zadaci za Tutorijal 14.


NAPOMENA: Ovaj tutorijal je predvien nastavnim planom i programom, ali kako za njega nema
prostora u nastavnom kalendaru da se fiziki odri, on e se odrati kao virtualan. Ovaj tutorijal je
stimulacione prirode: njegova (tana) izrada donosi dodatne poene (2 poena maksimalno). Postoje
striktna pravila vezana za ovaj tutorijal, koja su prikazana ispod, uz neke sugestije:

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.

Studentima se savjetuje da svakako urade zadatke predviene za ovaj tutorijal, da bi se upoznali sa


tehnikama rada sa datotekama (pogotovo ukoliko nemaju namjeru raditi posljednju zadau niti zadatke
za samostalan rad u kojima se koristi rad sa datotekama).

A sada sijede i sami zadaci:

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):

Meteoroloska opservatorija Bjelasnica


-------------------------------------
Datum mjerenja: 9/11/2014
Minimalna temperatura: 5
Maksimalna temperatura: 3
Prosjecna temperatura: -0.75

Mobilno mjerno mjesto Aerodrom, stanica II


------------------------------------------
Datum mjerenja: 9/11/2014
Minimalna temperatura: -1
Maksimalna temperatura: 10
Prosjecna temperatura: 5.20

Meteoroloska stanica Bjelave


----------------------------
Datum mjerenja: 23/5/2016
Minimalna temperatura: 6
Maksimalna temperatura: 20
Prosjecna temperatura: 13.14

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

Interfejs klase Skladiste treba sadravati sljedee elemente:


Konstruktor sa jednim parametrom koji predstavlja maksimalnu koliinu objekata (sanduka
odnosno buradi) koji se mogu pohraniti u skladitu. Ovaj konstruktor se ne smije koristiti za
automatsku pretvorbu cijelih brojeva u objekte tipa Skladiste.
Destruktor, koji oslobaa svu memoriju koji su objekti tipa Skladiste zauzeli tokom svog

ivota.
Konstruktor kopije i preklopljeni operator dodjele koji omoguavaju bezbjedno kopiranje i
meusobno dodjeljivanje objekata tipa Skladiste zasnovano na strategiji dubokog kopiranja
(nemojte zaboraviti da se radi o polimorfnoj kolekciji objekata, to zahtijeva izvjesnu podrku u
ostalim klasama). Treba takoer predvidjeti i njihove optimizirane verzije za sluaj kopiranja
privremenih objekata.
Metode DodajSanduk odnosno DodajBure koje kreiraju novi objekat tipa Sanduk odnosno
Bure i pohranjuju ga u skladite. Parametri ovih metoda isti su kao i parametri konstruktora
objekata tipa Sanduk odnosno Bure. Ukoliko je skladite ve popunjeno, treba baciti izuzetak
tipa domain_error uz pratei tekst Popunjeno skladiste.
Metode DajNajlaksi odnosno DajNajtezi koje vraaju reference na najlaki odnosno najtei
objekat (bure ili sanduk) u skladitu, ne raunajui ono to je pohranjeno u tom objektu. Ove
metode se ne smiju moi pozvati nad konstantnim objektima tipa Skladiste. U sluaju da je
skladite prazno, treba baciti izuzetak tipa range_error uz pratei tekst Skladiste je prazno.
Metodu BrojPreteskih koja vraa broj objekata u skladitu ija je ukupna teina (tj. vlastita
teina zajedno sa teinom onoga to se u njima nalazi) vea od iznosa koji se zadaje putem
cjelobrojnog parametra. Metoda se mora moi pozvati i nad konstantnim objektom.
Metodu IzlistajSkladiste koja ispisuje spisak svega to se nalazi u skladitu, sortiran u
opadajui poredak po ukupnoj teini. Ispis se vri pozivom metode Ispisi, bez ikakvih praznih
redova izmeu objekata. Metoda se mora moi pozvati i nad konstantnim objektom.
Metodu UcitajIzDatoteke koja ita podatke o robi iz tekstualne datoteke ije se ime zadaje
kao parametar i smjeta robu u skladite (u sluaju da u skladitu ve ima unesene robe,
postojei podaci se briu). Svaki objekat opisan je sa dva reda u datoteci. U prvom redu se nalazi
poetno slovo S ili B (za sanduk odnosno za bure) iza kojeg nakon jednog razmaka slijedi
naziv predmeta ili tenosti koje su pohranjene u sanduku odnosno buretu (npr. S Tepsije ili
B Suncokretovo ulje). U drugom redu se za sluaj sanduka nalazi teina sanduka, broj
predmeta i teina svakog od njih, razdvojeno po jednim razmakom (npr. 1.2 50 0.35) dok se za
sluaj bureta nalazi teina bureta i teina tenosti (npr. 0.8 16.5). Ukoliko traena datoteka ne
postoji, treba baciti izuzetak tipa logic_error uz pratei tekst Trazena datoteka ne postoji.
Isti izuzetak, ali uz pratei tekst Datoteka sadrzi besmislene podatke treba baciti ukoliko podaci
u datoteci nisu u skladu sa specifikacijama. U sluaju bilo kakvih drugih problema pri itanju (osim
pokuaja itanja iza kraja datoteke), treba takoer baciti isti izuzetak, uz pratei tekst Problemi
pri citanju datoteke.

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. Proirite klasu Liga sa Tutoriala 11. sljedeim elementima:


a) Metodom ObrisiSve koja brie kompletnu ligu, odnosno dovodi je u stanje kakvo je bilo nakon
kreiranja objekta tipa Liga.
b) Metodom Sacuvaj koja sprema cijelo stanje lige u binarnu datoteku ije je ime zadano kao
parametar. U sluaju bilo kakvih problema pri upisu, metoda baca izuzetak tipa logic_error
uz pratei tekst Problemi pri upisu u datoteku.

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.

You might also like