You are on page 1of 2

Dr.

eljko Juri: Tehnike programiranja /kroz programski jezik C++/


Zadaci predvieni za rad na laboratorijskim vjebama uz pomo tutora

Tutorijal 12
Akademska godina 2013/14

Zadaci za Tutorijal 12.


NAPOMENA: Studenti bi trebali da razmisle o zadacima koji e se raditi na tutorijalu prije nego to
dou na tutorijal, tako da ve u startu imaju osnovne ideje kako rijeiti zadatke. U suprotnom, rad na
laboratorijskim vjebama nee biti produktivan. injenica je da mnogi studenti nee uspjeti uraditi sve
zadatke za vrijeme koje je predvieno za tutorijal. Meutim, svim studentima se toplo savjetuje da
dovre samostalno one zadatke koje nisu stigli uraditi za vrijeme tutorijala, s obzirom da je
razumijevanje ovog tipa zadataka od vitalne vanosti za polaganje drugog parcijalnog ispita.
1.

Izmijenite klasu Vektor3d razvijenu u Zadatku 1. sa Tutorijala 9. tako da se umjesto metoda


SaberiSa i PomnoziSaSkalarom koriste operatori += i *=, umjesto prijateljske funkcije
ZbirVektora operator + i umjesto metode Ispisi operator << (tako da umjesto
v1.SaberiSa(v2), v3 = ZbirVektora(v1, v2) i v1.Ispisi() moemo prosto pisati
v1 += v2, v3 = v1 + v2 i std::cout << v1. Naravno, odgovarajue izmjene treba izvriti
i u testnom programu koji demonstrira rad klase. Radi jednostavnijeg rada, klasi dodajte i
konstruktor bez parametara, koji inicijalizira sve koordinate vektora na nule, kao i konstruktor sa tri
parametra, koji inicijalizira koordinate vektora na vrijednosti zadane parametrima.

2.

Izmijenite klasu Sat razvijenu u Zadatku 3. sa Tutorijala 9. tako da se umjesto metoda


Sljedeci i Prethodni koriste operatori ++ i (pri emu je potrebno podrati kako
prefiksne, tako i postfiksne verzije ovih operatora), umjesto metode PomjeriZa operator +=, a
umjesto metode Ispisi operator <<. Testni program prilagodite novom interfejsu klase. Radi
jednostavnijeg rada, dodajte ovoj klasi i pogodne konstruktore.

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}

Neka je dat pobrojani tip


enum Dani {Ponedjeljak, Utorak, Srijeda, Cetvrtak, Petak, Subota,
Nedjelja};

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?

Dr. eljko Juri: Tehnike programiranja /kroz programski jezik C++/


Zadaci predvieni za rad na laboratorijskim vjebama uz pomo tutora

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

You might also like