Professional Documents
Culture Documents
13 Tutorijal 12
13 Tutorijal 12
Tutorijal 12
Akademska godina 2013/14
2.
3.
Za skupovni tip set iz istoimene biblioteke definirajte operatore + i * koji e za dva skupa sa
istim tipom elemenata dati kao rezultat respektivno njihovu uniju i presjek, kao i operator << koji
omoguava ispis elemenata skupa u vitiastim zagradama, koji su meusobno razdvojeni zarezima.
Nakon definiranja ovih operatora, mora postati mogue neto poput sljedeeg:
std::set<int> s1{3, 5, 1, 2, 8}, s2{7, 2, 8, 4};
std::cout << s1 + s2 << std::endl;
std::cout << s1 * s2 << std::endl;
4.
// Ispis {1,2,3,4,5,7,8}
// Ispis {2,8}
Poznato je da se, u odsustvu drugaijih uputa, promjenljive tipa Dani automatski konvertiraju u
cjelobrojne vrijednosti. Recimo, ukoliko promjenljiva d tipa Dani ima vrijednost Srijeda,
naredba poput std::cout << d e umjesto teksta Srijeda ispisati broj 2. Sreom, ovakvo
ponaanje se moe izmijeniti koritenjem preklapanja operatora. Napiite operatorsku funkciju za
operator << koji e omoguiti da se prilikom ispisa konstanti, promjenljivih i izraza tipa Dani
umjesto brojane vrijednosti dobijene konverzijom ispisuje tekst koji odgovara njihovom znaenju.
Testirajte napisanu funkciju u testnom programu koji sadri petlju
for(Dani d = Ponedjeljak; d <= Petak; d++) std::cout << d << std::endl;
Takva petlja treba da zaista ispie imena dana Ponedjeljak, Utorak, Srijeda, etvrtak i
Petak, a ne brojeve od 0 do 4. Za tu svrhu ete takoer morati definirati i operator ++ koji
podrazumijevano nije definiran za promjenljive pobrojanog tipa (uradite to na nain kako je
uraeno u Predavanju 12_a).
Kada to uradite, probajte napraviti slinu petlju koja bi trebala da ispie sve dane u sedmici od
ponedjeljka. U emu je problem? Zbog ega petlja ne radi kako je oekivano? ta se moe uiniti
po tom pitanju?
Tutorijal 12
Akademska godina 2013/14
5.
Napravite program koji trai da se sa tastature unese niz realnih brojeva (broj elemenata se takoer
unosi sa tastature), a zatim zamjenjuje sve elemente niza njihovim recipronim vrijednostima i
ispisuje elemente tako transformiranog niza brojeva na ekran. Pri tome, transformaciju elemenata
niza treba izvesti jednom jedinom naredbom, bez upotrebi petlji. Takoer, u programu nije
dozvoljeno definirati nikakve pomone funkcije (dakle, main treba da bude jedina funkcija u
programu), pa ak ni anonimne lambda funkcije. Za tu svrhu, posluite se odgovarajuim
funkcijama i funktorima iz biblioteka algorithm i functional. Uputa: bie Vam od koristi
funkcija bind1st. Kada rijeite problem pomou ove funkcije, zamijenite je sa funkcijom
bind, s obzirom da je ona proglaena zastarjelom i njena upotreba se vie ne preproruuje.
6.
Mada je ve odavno u itavom svijetu izvrena standardizacija mjernih jedinica za razne fizikalne
veliine (SI sistem), Sjedinjene Amerike Drave se uporno opiru uvoenju ovih jedinica, nego u
internoj upotrebi i dalje koriste svoje vlastite mjerne jedinice, koje su, uz neke izmjene, uglavnom
naslijeene iz Britanskog kraljevstva (interesantno je da su jo jedine dvije drave na svijetu pored
SAD-a koje se opiru uvoenju SI sistema Liberija i Mjanmar, biva Burma). Tako se, u SAD-u,
duine uglavnom izraavaju u inima (inch), stopama (feet), jardima (yard) i miljama (mile). Tako,
jedna stopa ima 12 ina, jedan jard ima 3 stope, dok jedna milja ima 1760 jardi (nie veze, to bi
rekli u Hercegovini). Veza sa SI sistemom lako se izvodi znajui da jedan in iznosi 2,54
centimetra. Napravite klasu koja omoguava raunanje sa amerikim mjerama za duinu, kao i
pretvorbe izmeu amerikog i standardnog sistema mjerenja duine. Interfejs klase treba da sadri
sljedee elemente:
Konstruktor sa tri cjelobrojna parametra koja omoguava zadavanje duine u jardima, stopama i
inima (milje emo ovdje zanemariti), npr. 9 jardi, 2 stope i 7 ina. Vrijednosti ovih parametara
ne moraju biti ograniene (npr. broj ina ne mora biti u opsegu od 0 do 11). Stoga je, recimo,
sasvim legalno zadati 5 jardi, 7 stopa i 14 ina, ali treba imati na umu da je to isto to i 7 jardi, 2
stope i 2 ina. Kako su parametri cjelobrojni, smatraemo da nas ne zanimaju dijelovi ina,
odnosno sve duine uvijek e imati cijeli broj ina.
Konstruktor sa jednim realnim parametrom, koji omoguava da se duina zada u metrima.
Unutar ovog konstruktora potrebno je izvriti pretvorbu metrikih u amerike mjerne jedinice.
Rezultat pretvorbe treba zaokruiti na cijeli broj ina.
Metodu sa tri cjelobrojna parametra koja oitava broj jardi, stopa i ina pohranjen u objektu i
smjeta ih respektivno u tri navedena parametra. Pri tome, oitane vrijednosti moraju biti
normalizirane u smislu da broj ina uvijek mora biti u opsegu od 0 11 a broj stopa u opsegu 0 2.
Metodu koja kao rezultat daje pohranjenu duinu u metrima (kao realan broj).
Preklopljeni operator + koji daje kao rezultat novu duinu koja je jednaka zbiru duina koje su
zadane kao operandi.
Preklopljeni operator += koji obezbjeuje da izraz oblika X += Y uvijek ima isto znaenje
kao i izraz X = X + Y .
Preklopljeni operator ++ koji poveava duinu pohranjenu u objektu za 1 in. Potrebno je
podrati i prefiksnu i postfiksnu verziju ovog operatora.
Preklopljeni operator * koji omoguava mnoenje duine sa realnim brojem ili realnog broja sa
duinom (mnoenje dvije duine ne treba podrati, jer rezultat takvog mnoenja nije duina,
nego povrina), dajui novu duinu kao rezultat. Rezultat se zaokruuje na cijeli broj ina.
Preklopljeni operator / koji dijeli dvije duine i daje realni broj kao rezultat (jednak odnosu
duina koje se dijele).
Preklopljeni operator << koji omoguava ispis duina na izlazni tok u formatu
a yd b ft c in (recimo 9 yd 2 ft 7 in).
Obavezno napiite i kratki testni program u kojem ete testirati napisanu klasu. U ovom zadatku
namjerno nije reeno ta su atributi klase koju treba razviti. U naelu, za atribute moete uzeti ta
god hoete to Vam treba da ova klasa radi ono to treba da radi (to i jeste poenta enkapsulacije i
skrivanja informacija). Meutim, sama implementacija klase e bitno ovisiti od toga ta uzmete da
su atributi. U zavisnosti od izbora, implementacija moe biti izuzetno jednostavna, ali i prilino
komplicirana. Zato nemojte biti brzopleti i dobro razmislite ta uzeti za atribute. Rjeenje koje prvo
pada na pamet nije nuno i najpametnije rjeenje. Stoga, ukoliko Vam se rjeavanje ovog zadatka
primijetno zakomplicira, znajte da je do Vas.
2