zadaci za pripremu prvog...

43
Zadaci za pripremu prvog kolokvijuma NAPOMENA: Rešenja zadataka iz ovog poglavlja se mogu naći na sajtu predmeta: http://ai.fon.bg.ac.rs/osnovne/programiranje-2/praktikum-i-resenja-zadataka/ Zadatak 1 – 2011 Napraviti klasu KoncertnaDvorana koja ima: Statičku konstantu KAPACITET koja ima vrednost 300. Atribut koji predstavlja niz sedišta u dvorani. Svako sedište može da bude slobodno ili zauzeto. Ako je slobodno, vrednost odgovarajućeg elementa niza je TRUE, a ako je zauzeto, onda je FALSE. Koncertna dvorana ima tačno onoliko sedišta kolika je vrednost konstante KAPACITET. Odmah inicijalizovati niz. Konstruktor koji postavlja vrednost svih sedišta iz niza na slobodna. Metodu koja uvodi gledaoca na sedište. Broj sedišta je dat kao ulazni argument metode (unose se brojevi od 1 do 300 ) . Prvo se proverava da li je broj sedišta u granicama i da li je sedište već zauzeto pa, ako je sve u redu, sedište postaje zauzeto i ispisuje se poruka na ekranu da je gledalac uveden. Ako je sedište već bilo zauzeto ili broj sedišta nije u granicama, ispisuje se poruka o grešci. Metodu koja proverava da li je dvorana dovoljno popunjena da bi se koncert isplatio i vraća TRUE ako jeste, a u suprotnom FALSE. Dvorana je dovoljno popunjena ako su ispunjena tri uslova: procenat zauzetosti sedišta iz prve polovine dvorane (prvih 150 sedišta) je veći od 50%, procenat zauzetosti sedišta iz druge polovine dvorane (ostalih 150 sedišta) je veći od 40% i procenat zauzetosti sedišta iz cele dvorane je veći od 55%. Metodu koja na ekranu ispisuje koliko ima slobodnih sedišta u svakom redu dvorane. Zna se da su svi redovi iste veličine i da sadrže tačno po 10 sedišta. Prema tome, prvih 10 sedišta iz niza su zapravo u prvom redu, sledećih 10 sedišta u drugom redu itd. Ispis bi trebalo da bude u formatu: „U redu br. __ ima __ slobodnih sedišta“. Napraviti klasu TestKoncertnaDvorana koja kreira jedan objekat klase KoncetnaDvorana i uvodi gledaoce na sedišta broj 21, 23 i 24. Onda je na ekranu potrebno ispisati poruku o tome da li je dvorana dovoljno popunjena da bi se koncert isplatio. Zadatak 2 – 2011 Napraviti klasu ZaradaDvorane koja ima: Atribut zarada koji predstavlja zaradu ostvarenu na koncertu (npr. 20000 dinara). Napraviti klasu KoncertnaDvorana koja ima: Atribut koji predstavlja niz sedišta u dvorani. Svako sedište može da bude slobodno ili zauzeto. Ako je slobodno, vrednost odgovarajućeg elementa niza je TRUE, a ako je zauzeto, onda je FALSE. Atribut zaradaDvorane koji predstavlja objekat klase ZaradaDvorane. Odmah inicijalizovati atribut (objekat). Konstruktor koji kao ulazni argument prima kapacitet sale i inicijalizuje niz sedišta na taj kapacitet. Ako je uneti kapacitet sale jednak ili manji od nule potrebno je kapacitet postaviti na 120 mesta i ispisati poruku o grešci. Postaviti vrednosti svih sedišta iz niza na slobodna. Metodu koja uvodi gledaoca na sedište. Broj sedišta je dat kao ulazni argument metode. Prvo se proverava da li je broj sedišta u granicama (brojevi se poklapaju sa indeksima niza) i da li je sedište već zauzeto, pa ako je sve u redu sedište postaje zauzeto i ispisuje se poruka na ekranu da je gledalac uveden. Ako je sedište već bilo zauzeto ili broj sedišta nije u granicama, ne dešava se ništa. Metodu koja izračunava zaradu koncertne dvorane ako se zna da karte za sedišta iz prve polovine sale koštaju 500 dinara, a da karte za sedišta iz druge polovine sale koštaju 250 dinara. Zarada se računa samo za ona sedišta koja su zauzeta. Kada metoda izračuna zaradu, ovu vrednost unosi u atribut zarada atributa zaradaDvorane i ispisuje je na ekranu. Metodu koja proverava da li se u dvorani mogu naći tri susedna sedišta koja su slobodna i nalaze se u istom redu i vraća TRUE ako može, a FALSE ako ne može. Zna se da su svi redovi iste veličine i da sadrže tačno po 10 sedišta. Prema tome, prvih 10 sedišta iz niza su zapravo u prvom redu, sledećih 10 sedišta u drugom redu itd.

Upload: others

Post on 04-Nov-2019

9 views

Category:

Documents


0 download

TRANSCRIPT

Zadaci za pripremu prvog kolokvijuma

NAPOMENA: Rešenja zadataka iz ovog poglavlja se mogu naći na sajtu predmeta: http://ai.fon.bg.ac.rs/osnovne/programiranje-2/praktikum-i-resenja-zadataka/

Zadatak 1 – 2011

Napraviti klasu KoncertnaDvorana koja ima:• Statičku konstantu KAPACITET koja ima vrednost 300.• Atribut koji predstavlja niz sedišta u dvorani. Svako sedište može da bude slobodno ili zauzeto. Ako

je slobodno, vrednost odgovarajućeg elementa niza je TRUE, a ako je zauzeto, onda je FALSE. Koncertna dvorana ima tačno onoliko sedišta kolika je vrednost konstante KAPACITET. Odmah inicijalizovati niz.

• Konstruktor koji postavlja vrednost svih sedišta iz niza na slobodna.• Metodu koja uvodi gledaoca na sedište. Broj sedišta je dat kao ulazni argument metode (unose se

brojevi od 1 do 300) . Prvo se proverava da li je broj sedišta u granicama i da li je sedište već zauzeto pa, ako je sve u redu, sedište postaje zauzeto i ispisuje se poruka na ekranu da je gledalac uveden. Ako je sedište već bilo zauzeto ili broj sedišta nije u granicama, ispisuje se poruka o grešci.

• Metodu koja proverava da li je dvorana dovoljno popunjena da bi se koncert isplatio i vraća TRUE ako jeste, a u suprotnom FALSE. Dvorana je dovoljno popunjena ako su ispunjena tri uslova: procenat zauzetosti sedišta iz prve polovine dvorane (prvih 150 sedišta) je veći od 50%, procenat zauzetosti sedišta iz druge polovine dvorane (ostalih 150 sedišta) je veći od 40% i procenat zauzetosti sedišta iz cele dvorane je veći od 55%.

• Metodu koja na ekranu ispisuje koliko ima slobodnih sedišta u svakom redu dvorane. Zna se da su svi redovi iste veličine i da sadrže tačno po 10 sedišta. Prema tome, prvih 10 sedišta iz niza su zapravo u prvom redu, sledećih 10 sedišta u drugom redu itd. Ispis bi trebalo da bude u formatu: „U redu br. __ ima __ slobodnih sedišta“.

Napraviti klasu TestKoncertnaDvorana koja kreira jedan objekat klase KoncetnaDvorana i uvodi gledaoce na sedišta broj 21, 23 i 24. Onda je na ekranu potrebno ispisati poruku o tome da li je dvorana dovoljno popunjena da bi se koncert isplatio.

Zadatak 2 – 2011

Napraviti klasu ZaradaDvorane koja ima:• Atribut zarada koji predstavlja zaradu ostvarenu na koncertu (npr. 20000 dinara).

Napraviti klasu KoncertnaDvorana koja ima:• Atribut koji predstavlja niz sedišta u dvorani. Svako sedište može da bude slobodno ili zauzeto. Ako

je slobodno, vrednost odgovarajućeg elementa niza je TRUE, a ako je zauzeto, onda je FALSE. • Atribut zaradaDvorane koji predstavlja objekat klase ZaradaDvorane. Odmah inicijalizovati atribut

(objekat). • Konstruktor koji kao ulazni argument prima kapacitet sale i inicijalizuje niz sedišta na taj kapacitet.

Ako je uneti kapacitet sale jednak ili manji od nule potrebno je kapacitet postaviti na 120 mesta i ispisati poruku o grešci. Postaviti vrednosti svih sedišta iz niza na slobodna.

• Metodu koja uvodi gledaoca na sedište. Broj sedišta je dat kao ulazni argument metode. Prvo se proverava da li je broj sedišta u granicama (brojevi se poklapaju sa indeksima niza) i da li je sedište već zauzeto, pa ako je sve u redu sedište postaje zauzeto i ispisuje se poruka na ekranu da je gledalac uveden. Ako je sedište već bilo zauzeto ili broj sedišta nije u granicama, ne dešava se ništa.

• Metodu koja izračunava zaradu koncertne dvorane ako se zna da karte za sedišta iz prve polovine sale koštaju 500 dinara, a da karte za sedišta iz druge polovine sale koštaju 250 dinara. Zarada se računa samo za ona sedišta koja su zauzeta. Kada metoda izračuna zaradu, ovu vrednost unosi u atribut zarada atributa zaradaDvorane i ispisuje je na ekranu.

• Metodu koja proverava da li se u dvorani mogu naći tri susedna sedišta koja su slobodna i nalaze seu istom redu i vraća TRUE ako može, a FALSE ako ne može. Zna se da su svi redovi iste veličine i da sadrže tačno po 10 sedišta. Prema tome, prvih 10 sedišta iz niza su zapravo u prvom redu, sledećih 10 sedišta u drugom redu itd.

Napraviti klasu TestKoncertnaDvorana koja kreira jedan objekat klase KoncertnaDvorana kapaciteta 40 mesta i uvodi gledaoce na sedišta broj 0, 20 i 40. Onda je potrebno ispisati na ekranu zaradu koncertne dvorane.

Zadatak 3 – 2011

Napraviti klasu OsvetljenjeSportskeHale koja ima:• Atribut koji predstavlja niz sijalica koje osvetljavaju halu. Svaka sijalica može da bude upaljena ili

ugašena. Ako je upaljena, vrednost odgovarajućeg elementa niza je TRUE, a ako je ugašena, onda je FALSE.

• Statičku konstantu SNAGA_SIJALICE koja predstavlja snagu jedne sijalice i iznosi 330W. • Konstruktor koji kao ulazni argument prima ukupan broj sijalica i inicijalizuje niz sijalica na taj broj

samo ako je uneti broj veći od nule. Ako je uneti broj sijalica jednak ili manji od nule, smatra se da je ukupni broj sijalica u hali 100 sijalica (niz inicijalizovati na 100 sijalica).

• Metodu koja proverava da li su sve sijalice upaljene. Ako jesu, metoda vraća TRUE, u suprotnom FALSE.

• Metodu koja pali jednu sijalicu iz hale (bilo koju, samo da već nije upaljena) i to samo ako ukupna snaga svih trenutno upaljenih sijalica ne prelazi 10.000 W. Svaka sijalica iz hale je jačine koja je jednaka konstanti SNAGA_SIJALICE. Ako su sve sijalice iz hale već bile upaljene, ispisati poruku o tome da se više ne može upaliti nijedna sijalica.

• Statičku metodu koja kao ulazni parametar prima niz od milion sijalica koje osvetljavaju jednu halu. Zna se da su sijalice postavljene na plafon u formi (ispunjenog) kvadrata „dimenzija“ 1000 X 1000 sijalica. Pri tome, prvih 1000 sijalica iz niza pripada prvom redu, sledećih 1000 sijalica drugom redu itd. Potrebno je upaliti samo one sijalice koje se nalaze po jednoj dijagonali kvadrata. Takođe, potrebno je ugasiti sve preostale sijalice.

Napraviti klasu TestOsvetljenjeSportskeHale koja kreira jedan objekat klase OsvetljenjeSportskeHale koji ima ukupno 30 sijalica. Proveriti da li su sve sijalice upaljene i, ako jesu, ispisati poruku o tome na ekranu. Ako nisu upaljene sve sijalice, ne ispisivati ništa.

Zadatak 4 - 2011

Napraviti klasu Osigurac koja ima• Atribut snaga koji predstavlja snagu osigurača (npr. 10000 W).

Napisati klasu OsvetljenjeSporstkeHale koja ima:• Atribut koji predstavlja niz sijalica koje osvetljavaju halu. Svaka sijalica može da bude upaljena ili

ugašena. Ako je upaljena, vrednost odgovarajućeg elementa niza je TRUE, a ako je ugašena, onda je FALSE. U hali ima tačno 150 sijalica. Niz inicijalizovati odmah.

• Atribut osiguracOsvetljenja koji je objekat klase Osigurac.• Konstruktor koji kao ulazni parametar dobija snagu osigurača. Konstruktor prvo inicijalizuje atribut

osiguracOsvetljenja. Ako je uneta vrednost za snagu veća od nule, atribut snaga atributa osiguracOsvetljenja dobija tu vrednost. Ako to nije slučaj atribut snaga dobija vrednost 5000.

• Metodu koja pali svaku drugu sijalicu iz hale.• Metodu koja treba da upali redom što veći broj sijalica iz hale a da njihova ukupna snaga ne

prekorači snagu osigurača osvetljenja hale (atribut snaga atributa osiguracOsvetljenja). Smatra se da su na početku sve sijalice ugašene. Prvih 100 sijalica iz niza je snage 100 W, dok je preostalih 50sijalica snage 200 W.

• Metodu koja pali samo one sijalice koje se nalaze po obodu plafona hale. Zna se da su sijalice postavljene na plafon u formi matrice „dimenzija“ 10 X 15 sijalica. Pri tome, prvih 10 sijalica iz niza pripada prvom redu matrice, sledećih 10 sijalica drugom redu matrice itd. Potrebno je upaliti samo one sijalice koje se nalaze po obodu matrice tako da upaljena svetla čini pravougaonik „dimenzije“ 10 X 15 sijalica. Takođe, potrebno je ugasiti sve preostale sijalice.

Napraviti klasu TestOsvetljenjeSportskeHale koja pravi tri objekta klase OsvetljenjeSportskeHale i to tako da osigurači osvetljenja ovih hala imaju snagu od 20000 W, 5000 W i 3000W respektivno. Upaliti svaku drugu sijalicu u trećoj hali (onoj čija je snaga osigurača 3000 W).

Zadatak 5 – 2011

Napraviti klasu TezineClanovaEkipe koja ima:• Atribut koji predstavlja niz težina članova bokserske ekipe u kilogramima (npr. 89,5 kg). Ekipa može

da ima maksimalno 20 boksera. Niz inicijalizovati odmah. • Atribut koji predstavlja broj članova ekipe. Postaviti da početna vrednost bude nula.• Statičku konstantu MIN_TEZINA koja predstavlja minimalnu težinu boksera i iznosi 40kg. • Konstruktor koji postavlja vrednosti svih 20 elemenata niza na -1. • Metodu koja dodaje težinu novog člana ekipe u niz. Težina se dobija u vidu ulaznog argumenta i

dodaje se u niz samo ako niz nije popunjen do maksimuma i ako je uneta težina veća od vrednosti konstante MIN_TEZINA. Ako je niz popunjen ili ako težina nije u granicama, potrebno je ispisati poruku o grešci.

• Metodu koja ispisuje na ekranu koji procenat boksera iz ekipe pripada lakoj, koji srednjoj i koji teškoj kategoriji. Ako je težina boksera manja od 65kg on pripada lakoj kategoriji. Ako je težina 65kg ili više,ali manja od 85kg on pripada srednjoj kategoriji. Ako je težina 85kg ili više, on pripada teškoj kategoriji. Ispis bi trebalo da bude u formatu „___ kategoriji pripada ___% boksera“.

• Statičku metodu koja kao ulazni parametar dobija niz realnih brojeva koji predstavlja niz težina tri bokserske ekipe. Ovaj niz je popunjen do maksimalnog kapaciteta. Niz težina prve ekipe počinje od prvog elementa a završava se elementom koji ima vrednost -1 i koji ne predstavlja konkretnu težinu već samo graničnik. Niz težina druge ekipe počinje posle ovog graničnika, a završava se drugim graničnikom koji takođe ima vrednost -1. Ostatak niza čine težine članova treće ekipe. Metoda bi trebalo da sastavlja i vraća (kao povratnu vrednost) novi niz koji se sastoji samo od težina onih boksera koji pripadaju drugoj ekipi.

Napraviti klasu TestTezineClanovaEkipe koja kreira dva objekta klase TezineClanovaEkipe. U prvu ekipu dodati težine 100.0, 55.5 i 44.5 a u drugu ekipu težine 66.6, 44.3 i 150.0 kg. Ispisati na ekranu procenat boksera lake, srednje i teške kategorije za prvu ekipu.

Zadatak 6 – 2011

Napraviti klasu TipEkipe koja ima:• Atribut oznaka koji predstavlja oznaku težinske kategorije (npr. 'L' za laku kategoriju).

Napraviti klasu TezineClanovaEkipe koja ima:• Atribut koji predstavlja niz težina članova bokserske ekipe u kilogramima (npr. 89,5 kg). • Atribut koji predstavlja broj članova ekipe. Postaviti da početna vrednost bude nula.• Atribut kategorija koji predstavlja objekat klase TipEkipe. • Konstruktor koji kao ulazni argument prima maksimalni broj članova ekipe i oznaku težinske

kategorije. Konstruktor bi trebalo da prvo inicijalizuje atribut kategorija i u njega unese oznaku težinske kategorije. Konstruktor onda inicijalizuje niz na uneti kapacitet samo ako je uneti broj članova ekipe veći od nule. Ako to nije slučaj, niz se inicijalizuje na kapacitet 20.

• Metodu koja na ekranu ispisuje kolika je prosečna težina boksera u ekipi, koji je broj boksera koji su natprosečne težine i koji je broj boksera koji su ispod prosečne težine.

• Metodu koja dodaje težinu novog člana ekipe u niz. Težina se dobija u vidu ulaznog argumenta i dodaje se u niz samo ako niz nije popunjen do maksimuma i ako je uneta težina u granicama. Težinske granice za laku kategoriju su od 45 do 65kg (ne obuhvatajući 65kg), za srednju kategoriju od 65 do 85kg (ne obuhvatajući 85kg), a za tešku kategoriju 85kg i više. Ako je oznaka kategorije (atribut oznaka atributa kategorija) jednaka 'L', primenjivati granice za laku kategoriju, ako je 'S' za srednju, a ako je 'T' za tešku kategoriju.

• Statičku metodu koja kao ulazne parametre dobija dva niza realnih brojeva koji predstavljaju težine dve bokserske ekipe. Oba niza su popunjena do maksimalnog kapaciteta a ne moraju da budu iste dužine. Metoda bi trebalo da vraća TRUE ako postoje bar dva boksera koji su iste težine pri čemu jedan pripada prvoj, a drugi drugoj ekipi, a FALSE ako to nije slučaj.

Napraviti klasu TestTezineClanovaEkipe koja kreira tri objekta klase TezineClanovaEkipe sa kapacitetom od 20, 30 i 40 članova. Prvu ekipu čine bokseri lake kategorije, a drugu i treću bokseri srednje kategorije`-. Uneti u drugu ekipu težine 66, 69 i 84kg.

Zadatak 7 – 2011

Napraviti klasu NizOcena koja ima:

• Atribut koji predstavlja niz ocena učenika u odeljenju. Svaki učenik ima po jednu ocenu, ocena se predstavlja jednim slovom, pri čemu slovo 'A' znači odličan, slovo 'B' vrlo dobar, slovo 'C' dobar, slovo 'D' dovoljan i slovo 'F' znači nedovoljan. Odeljenje ima maksimalno 30 đaka. Niz inicijalizovati odmah.

• Atribut koji predstavlja broj ocena (đaka). Početna vrednost je nula.• Statičku konstantu OCEKIVANA_OCENA koja predstavlja ocenu za koju se očekuje da će je imati

najveći broj đaka - ocena 'B'. • Konstruktor koji postavlja vrednosti svih 30 elemenata niza na 'N'. • Metodu za unošenje nove ocene. Ocena je ulazni argument metode, a unošenje se vrši samo ako

niz nije pun i ako ocena ima vrednost 'A' , 'B', 'C', 'D' ili 'F'. Ako je bilo koji od ovih uslova prekoračen ispisuje se greška na ekranu.

• Metodu koja proverava da li je postignuta očekivana ocena u odeljenju ili ne i vraća TRUE ako jeste a FALSE ako nije. Očekivana ocena je postignuta ako je broj đaka koji imaju ocenu koja je jednaka konstanti OCEKIVANA_OCENA istovremeno veći od: broja đaka sa ocenom 'A', broja đaka sa ocenom 'C', broja đaka sa ocenom 'D' i broja đaka sa ocenom 'F'.

• Statičku metodu koja kao ulazni argument dobija niz znakova koji predstavljaju ocene nekoliko odeljenja. Niz je popunjen do maksimalnog kapaciteta. Svako odeljenje ima tačno po 30 đaka. Prema tome, prvih 30 elemenata niza predstavljaju ocene đaka iz prvog odeljenja, sledećih 30 elemenata ocene đaka iz drugog odeljenja itd. Metoda bi trebalo na ekranu da ispisuje koliko đaka usvakom odeljenju ima ocenu 'A' i to u formatu „U odeljenju br. __ ima __ đaka sa ocenom A“.

Napraviti klasu TestNizaOcena koja kreira objekat klase NizOcena i unosi u njega ocene: 'A', 'A', 'B', 'F', 'F' i 'D'. Ispisati na ekranu poruku o tome da li je postignuta očekivana ocena.

Zadatak 8 – 2011

Napraviti klasu Statistika koja ima:• Atribut procenatProlaznosti koji predstavlja procenat đaka koji imaju prelazne ocene (npr. 45.3%).

Napraviti klasu NizOcena koja ima:• Atribut koji predstavlja niz ocena učenika u odeljenju. Svaki učenik ima po jednu ocenu, i ocena se

predstavlja jednim slovom, pri čemu slovo 'A' znači odličan, slovo 'B' vrlo dobar, slovo 'C' dobar, slovo 'D' dovoljan i slovo 'N' znači nedovoljan.

• Atribut koji predstavlja broj ocena (đaka). Početna vrednost je nula.• Atribut statistikaOdeljenja koja predstavlja objekat klase Statistika. Odmah inicijalizovati ovaj

atribut (objekat).• Konstruktor koji kao ulazni argument prima maksimalni broj ocena (đaka) i inicijalizuje niz na taj

kapacitet. Ako je uneti broj đaka jednak ili manji od nule potrebno je ispisati poruku o grešci i postaviti maksimalni kapacitet na 25 đaka.

• Metodu za unošenje nove ocene. Ocena je ulazni argument metode, a unošenje se vrši samo ako niz nije pun i ako ocena ima vrednost 'A' , 'B', 'C', 'D' ili 'N'. Ako je bilo koji od ovih uslova prekoračen ispisuje se greška na ekranu.

• Metodu koja na ekranu ispisuje koliko đaka ima koju ocenu. Kada se ispis završi, metoda izračunavaprocenat prolaznosti odeljenja (procenat đaka koji imaju prelazne ocene tj. ocene različite od 'N') i unosi ovaj procenat u atribut procenatProlaznosti atributa (objekta) statistikaOdeljenja.

• Statičku metodu koja kao ulazni argument dobija niz znakova koji predstavljaju ocene nekoliko odeljenja. Niz je popunjen do maksimalnog kapaciteta. Svako odeljenje ima tačno po 25 đaka. Prema tome, prvih 25 elemenata niza predstavljaju ocene đaka iz prvog odeljenja, sledećih 25 elemenata ocene đaka iz drugog odeljenja itd. Metoda bi trebalo proverava da li su u nekom odeljenju svi đaci pali na popravni (svih 25 đaka ima ocenu 'N'). Ako postoji bar jedno takvo odeljenje metoda vraća TRUE, a inače FALSE.

Napraviti klasu TestNizaOcena koja kreira objekat klase NizOcena maksimalnog kapaciteta 10 đaka i unosi u njega ocene: 'A', 'B', 'C', 'N', 'N' i 'D'. Ispisati na ekranu koliko đaka ima koju ocenu.

Zadatak 1 – 2012

Napraviti klasu LizingKalkulator koja ima:• Statičku konstantu MAX_ROK_OTPLATE koja ima vrednost 7

• Statičku metodu koja kao ulaz dobija iznos lizinga i broj godina otplate i izračunava i vraća iznos mesečne rate po formuli RATA = (IZNOS_LIZINGA * (1+BROJ_GODINA*0.05)) / (BROJ_GODINA*12). Ako je uneti broj godina otplate veći od MAX_ROK_OTPLATE, metoda ispisuje poruku o grešci na ekranu i vraća nulu.

Napraviti klasu LizingKompanija koja ima:• Atribut koji predstavlja niz iznosa odobrenih lizinga (npr.123400,56 dinara). Odmah inicijalizovati niz

na 1000 mesta. • Brojač koji predstavlja broj trenutno odobrenih lizinga. Početna vrednost je nula.• Metodu za unos novog lizing iznosa u niz. Iznos je dat kao ulazni parametar a unos se vrši samo

ako je iznos veći od nule i manji od dva miliona dinara i ako niz nije pun. U suprotnom, ispisuje se poruka o grešci.

• Metodu koja na ekranu ispisuje koliki je mesečni iznos rate za svaki lizing iz niza ako se zna da su lizing iznosi na svakom petom mestu u nizu sa rokom otplate od 6 godina, a ostali sa rokom otplate od 3 godine. Obratiti pažnju na prazna mesta u nizu.

• Statičku metodu koja dobija dva niza sa iznosima lizinga. Oba niza su popunjena do maksimalnog kapaciteta a ne moraju da budu iste dužine. Metoda bi trebalo da vraća TRUE ako postoje bar dva ista lizing iznosa pri čemu jedan pripada prvom, a drugi drugom nizu, a inače FALSE.

Napraviti klasu TestLizing koja kreira jedan objekat klase LizingKompanija i unosi u njega lizing iznose od 120000, 150000 i 1999999 dinara. Ispisati mesečni iznos rate za svaki lizing iznos iz niza.

Zadatak 2 – 2012

Napraviti klasu PolitikaBanke koja ima:• Statičku konstantu KAMATNA_STOPA koja iznosi 5,8 (%).

Napraviti klasu Banka koja ima:• Atribut krediti koji predstavlja niz čiji su elementi iznosi kredita. Dakle, svaki element niza je iznos za

jedan kredit koji je odobrila banka (npr. 15500 eur)• Atribut brojKredita koji predstavlja broj trenutno odobrenih kredita u banci. Početna vrednost je 0.• Konstruktor koji kao ulazni argument prima maksimalan broj kredita i inicijalizuje niz na taj kapacitet.

Takođe, potrebno je postaviti da vrednosti svih elemenata niza budu 0.• Metodu za unos novog kredita u niz i to na prvo slobodno mesto. Kredit se unosi kao parametar

metode. Ako je uneta vrednost nula, manja od nule ili ako je niz pun, metoda ispisuje poruku o grešci na ekranu.

• Metodu koja računa i vraća kolika je prosečna mesečna rata za one kredite čiji je iznos veći od 10.000 eur. Svi takvi krediti su odobreni na period od godinu dana, pa se mesečna rata za jedan kredit računa po formuli: RATA = (IZNOS * (100 + KAMATNA_STOPA)) / (100*12) Uzeti kamatnu stopu iz klase PolitikaBanke i obratiti pažnju na prazna mesta u nizu.

• Statičku metodu koja kao parametre dobija niz sa iznosima kredita ali za tri banke. Niz je popunjen do maksimalnog kapaciteta. Krediti prve banke počinju od prvog elementa niza a završavaju se elementom koji ima vrednost -1 i koji ne predstavlja konkretan kredit već samo graničnu vrednost. Krediti druge banke počinju posle ovog graničnika, a završavaju se drugim graničnikom koji takođe ima vrednost -1. Krediti treće banke počinju posle ovog graničnika i idu do kraja niza. Odrediti i ispisati na ekranu redni broj banke koja ima najveći zbir kredita.

Napraviti klasu TestBanka koja kreira jedan objekat klase Banka kapaciteta 40 kredita i uneti u njega krediteiznosa 12.000, 2.000 i 15.000 eur. Ispisati na ekranu prosečnu mesečnu ratu za kredite koji iznose više od 10.000 eur.

Zadatak 3 – 2012

Napraviti klasu DnevneTemperature koja ima:• Atribut koji predstavlja niz dnevnih temperatura za jedan grad (npr. 12 C) i to za svaki dan u toku

godine (prvi element niza je temperatura za 1. januar, sledeći element za 2. januar itd... a poslednji element za 31. decembar). Inicijalizovati niz na kapacitet 365.

• Statičku konstantu MIN_TEMP koja iznosi -50 C.• Metodu koja unosi novu temperaturu u niz. Metoda kao parametre dobija temperaturu i redni broj

dana (u toku godine) na koji se ta temperatura odnosi. Redni broj se unosi u rasponu od 1 do 365.

Ako je uneta temperatura manja od MIN_TEMP ili ako je redni broj dana van traženog raspona, ispisati poruku o grešci.

• Metodu koja na ekranu ispisuje zbir dnevnih temperatura za mesec februar. Godina nije prestupna.• Metodu koja na ekranu ispisuje dnevne temperature za dane vikenda (subota i nedelja) i to za celu

godinu. Zna se da je godina počela ponedeljkom tj. 1. januar je ponedeljak. • Metodu koja na osnovu niza dnevnih temperatura sastavlja i vraća niz prosečnih sedmičnih

temperatura. Računati samo prva 364 dana u godini tj. samo 52 cele nedelje.

Napraviti klasu TestDnevneTemperature koja kreira jedan objekat klase DnevneTemperature. U ovaj objekat uneti temperature 12 C, 34 C i 8 C i to za 30. , 150. i 365. dan u godini. Ispisati zbir dnevnih temperatura za mesec februar.

Zadatak 4 – 2012

Napraviti klasu TemperatureMora koja ima:• Atribut koji predstavlja niz dnevnih merenja temperature za jedno more u toku godinu dana (prvi

element niza je temperatura za 1. januar, sledeći element za 2. januar itd. a poslednji element za 31.decembar). Vrednost se izražava u stepenima (npr. 12,3).Inicijalizovati niz na kapacitet 365.

• Statičku konstantu KRITICNA_TEMPERATURA koja ima vrednost 45 C. • Metodu koja unosi novu temperaturu u niz. Metoda kao parametre dobija temperaturu i redni broj

dana (u toku godine) na koji se ta temperatura odnosi. Redni broj se unosi u rasponu od 1 do 365. Ako je temperatura manja od nule ili redni broj van raspona, ispisati poruku o grešci.

• Metodu koja na ekranu ispisuje prosečnu mesečnu temperaturu za jun. Prosečna mesečna temperatura se dobija izračunavanjem proseka dnevnih temperatura za taj mesec.

• Metodu koja kao ulaz dobija niz sa 365 temperatura i kopira te vrednosti u niz temperatura mora ali u obrnutom redosledu.

• Metodu koja proverava da li more može da ima živ svet u sebi ili ne i vraća TRUE ako može, a FALSE inače. Ako je temperatura mora u bilo kojem trenutku u toku godine bila pet dana uzastopce iznad konstante KRITICNA_TEMPERATURA, to znači da je more previše toplo i da u njemu ne može da ima života. U suprotnom, more može da ima živ svet u sebi.

Napraviti klasu TestTemperatureMora koja pravi dva objekta klase TemperatureMora. U prvi objekat uneti temperaturu 41 C za 1. februar, a u drugo more temperaturu 23,5 C za 25. januar. Ispisati na ekranu da li oba mora mogu da imaju živ svet u sebi ili ne.

Zadatak 5 – 2012

Napraviti klasu Avion koja ima:• Atribut koji predstavlja niz sedišta ekonomske klase u avionu. Sedište je slobodno ako je vrednost

elementa na tom mestu TRUE a zauzeto ako je vrednost elementa na tom mestu FALSE.• Atribut koji predstavlja niz sedišta poslovne klase u avionu. Sedište je slobodno ako je vrednost

elementa na tom mestu TRUE a zauzeto ako je vrednost elementa na tom mestu FALSE. • Konstruktor koji kao ulazne argumente prima ukupan broj sedišta ekonomske i ukupan broj sedišta

poslovne klase i inicijalizuje oba niza na odgovarajuće kapacitete. Ako je neki od unetih brojeva sedišta manji od nule (bilo poslovnih bilo ekonomskih), postaviti da avion ima 120 mesta ekonomskeklase i 60 mesta poslovne klase i ispisati poruku o grešci. U svakom slučaju, postaviti da sva sedištau avionu budu slobodna.

• Metodu koja uvodi putnika na sedište. Metoda kao parametre prima boolean vrednost (koja ima vrednost TRUE ako putnika treba smestiti u poslovnu klasu, a FALSE ako ga teba smestiti u ekonomsku klasu), kao i broj sedišta (brojevi kreću od nule). Metoda smešta putnika na zadato mesto iz odgovarajuće klase. Ako to mesto nije slobodno, metoda ispisuje poruku o grešci.

• Metodu koja izračunava i ispisuje na ekranu izveštaj o letu. Ispisuje se procentualna zauzetost sedišta poslovne klase, procentualna zauzetost sedišta ekonomske klase kao i prihod od svih prodatih karata. Karte za sedišta iz poslovne klase koštaju 500 evra, a karte za sedišta iz ekonomske klase koštaju 250 evra. Zarada se računa samo za ona sedišta koja su zauzeta.

• Metodu koja proverava da li se u ekonomskoj klasi mogu naći tri susedna sedišta koja su slobodna i nalaze se u istom redu i vraća TRUE ako može, a FALSE ako ne može. Zna se da su svi redovi iste

veličine i da sadrže tačno po 6 sedišta. Prema tome, prvih 6 sedišta iz niza su zapravo u prvom redu, sledećih 6 sedišta u drugom redu itd.

Napraviti klasu TestAvion koja kreira tri objekta klase Avion. Prvi avion ima 120 sedišta ekonomske klase i 60 sedišta poslovne klase, drugi ima po 50 sedišta obe klase a treći ima samo 30 sedišta poslovne klase. Uneti putnike u treći avion i to na sedišta broj 1, 5 i 15 iz poslovne klase.

Zadatak 6 – 2012

Napraviti klasu Trajekt koja ima:• Atribut koji istovremeno predstavlja niz sedišta za putnike i mesta za automobile u trajektu. Sedište

tj. mesto je slobodno ako je vrednost elementa niza TRUE a zauzeto ako je vrednost elementa niza FALSE. Sedišta za putnike se nalaze na početku niza, a njihov broj je dat u atributu ukupanBrojSedišta. Nakon poslednjeg sedišta, ostatak niza čine mesta za automobile.

• Atribut ukupanBrojSedišta koji predstavlja ukupan broj sedišta u trajektu.• Konstruktor koji kao ulazne argumente prima ukupan broj sedišta i ukupan broj mesta za

automobile. Konstruktor inicijalizuje niz na kapacitet koji je jednak zbiru ova dva broja i postavlja vrednost atributa ukupanBrojSedišta na uneti broj sedišta. Ako je neki od unetih brojeva manji od nule, postaviti da trajekt ima 120 mesta za automobile, 0 sedišta i ispisati poruku o grešci. U svakomslučaju, postaviti da sva sedišta i mesta u trajektu budu slobodna.

• Metodu koja uvodi auto na mesto u trajektu. Metoda kao parametar prima redni broj mesta (uneti brojevi se kreću od 0 do ukupnog broja mesta za automobile). Obratiti pažnju na to da elementi niza koji predstavljaju mesta za automobile počinju tek posle svih sedišta za putnike. Ako traženo mesto nije slobodno, metoda ispisuje poruku o grešci.

• Metodu koja na ekranu ispisuje izveštaj o trajektu. Ispisuje se broj slobodnih i zauzetih sedišta, broj slobodnih i zauzetih mesta za automobile, kao i to da li se pokretanje tako napunjenog trajekta isplati ili ne. Da bi se put isplatio, trajekt mora da ima bar 66% zauzetih sedišta, ali i bar 45% zauzetih mesta za automobile.

• Metodu koja proverava da li postoji dovoljno mesta na trajektu da se preveze autobus i vraća TRUE ako može a FALSE inače. Autobus može da se preveze ako negde na trajektu postoji pet susednih mesta za automobile koja su sva slobodna.

Napraviti klasu TestTrajekt koja kreira tri objekta klase Trajekt. Prvi ima 120 sedišta i 20 mesta za automobile, drugi ima 50 sedišta i 50 mesta, a treći ima samo 30 sedišta. Proveriti da li se u prvi trajekt može smestiti autobus tj. da li na njemu ima dovoljno mesta za to i ispisati poruku na ekranu. Zadatak 7 – 2012

Napraviti klasu ZavodZaTransfuzijuKrvi koja ima:• Atribut koji predstavlja niz donacija krvi za transfuziju u banci krvi. Svaka donacija je označena

jednim slovom u zavisnosti od krvne grupe: 'A' (za krvnu grupu A), 'B' (za krvnu grupu B), 'O' (za krvnu grupu O) i 'M' (za grupu AB).

• Atribut koji predstavlja trenutni broj donacija u nizu. Početna vrednost je nula.• Statičku konstantu MINIMALNA_REZERVA koja ima vrednost 5000. • Konstruktor koji inicijalizuje niz na kapacitet 1000 i postavlja vrednost svih elemenata u nizu na 'N'. • Metodu koja unosi novu donaciju za transfuziju u niz. Metoda kao parametar dobija oznaku krvne

grupe i unosi je na prvo slobodno mesto u nizu. Ako je uneta oznaka krvne grupe koja nije A, B, O ili M, ispisati poruku „POGREŠNA KRVNA GRUPA“. Ako je niz pun, ispisati poruku „ZAVOD NEMA VIŠE MESTA ZA SKLADIŠTENJE“.

• Metodu koja na ekranu ispisuje broj donacija za svaku krvnu grupu kao i procenat donacija te grupe u odnosu na ukupan broj primljenih donacija. Ako je broj donacija za neku krvnu grupu manji od konstante MINIMALNA_REZERVA, ispisati poruku i o tome na ekranu (koja je grupa u pitanju i da je deficitarna).

• Metodu koja kao parametar prima niz sa donacijama krvi koje je dovezla mobilna stanica za transfuziju (niz je popunjen do maksimalnog kapaciteta) i dopunjava trenutni niz donacija. Ako sve donacije mobilne stanice mogu da stanu u niz za donacije zavoda, onda samo izvršiti kopiranje svih elemenata u niz donacija zavoda i to počev od prvog slobodnog mesta pa nadalje. Ako to nije slučaj, onda samo kopirati donacije O i A krvne grupe i to koliko može da stane u niz zavoda.

Napraviti klasu TestZavod koja pravi objekat klase ZavodZaTransfuzijuKrvi. Uneti donacije za A, B, O, A B i AB krvne grupe i ispisati na ekranu broj donacija za svaku krvnu grupu, procenat donacija svake grupe kao i to da li je neka grupa deficitarna.

Zadatak 8 – 2012

Napraviti klasu Licnosti koja ima:• Statičku konstantu MAX_BROJ_UCESNIKA koja ima vrednost 1000. • Statičku metodu koja kao ulaz dobija znak i na ekranu ispisuje odgovarajući naziv tipa ličnosti. Ako

se unese znak 'S', metoda ispisuje „Sangvinik“, za 'K' ispisuje „Kolerik“, za 'F' „Flegmatik“ i za 'M' „Melanholik“. Ako je unet neki drugi znak, metoda ispisuje na ekranu poruku o grešci.

Napraviti klasu PsiholoskoTestiranje koja ima:• Atribut koji predstavlja niz oznaka tipova ličnosti osoba koje su podvrgnute testu. Dozvoljene

vrednosti elemenata niza su 'S', 'K', 'F' i 'M'. Inicijalizovati niz na kapacitet jednak konstanti MAX_BROJ_UCESNIKA.

• Brojač koji predstavlja broj trenutno unetih oznaka ličnosti. Početna vrednost je nula.• Metodu za unos nove oznake tipa ličnosti u niz. Oznaka je data kao ulazni parametar a unos se vrši

samo ako niz nije pun i ako je unet jedan od četiri dozvoljena znaka: 'S', 'K', 'F' i 'M'. Posle unosa, potrebno je ispisati naziv unetog tipa ličnosti (npr. „Kolerik“). U suprotnom, ispisuje se poruka o grešci.

• Metodu koja uzima kao uzorak svaku treću oznaku iz niza i na osnovu ovog uzorka izračunava i ispisuje na ekranu kog tipa ličnosti ima najviše u nizu. Obratiti pažnju na prazna mesta.

• Metodu koja na ekranu ispisuje sadržaj niza ali tako da se elementi sa početka i kraja niza ispisuju naizmenično – u cik-cak redosledu. To znači da se prvo ispiše prvi element niza, zatim poslednji, pa onda drugi element, zatim pretposlednji, pa treći element itd.

Napraviti klasu TestPsiholoskoTestiranje koja kreira jedan objekat klase PsiholoskoTestiranje i unosi u njega dva kolerika, tri sangvinika i jednog melanholika. Ispisati na ekranu kog tipa ličnosti ima najviše u nizu ito na osnovu uzorka svake treće oznake tipa ličnosti iz niza.

Zadaci za pripremu drugog kolokvijuma

NAPOMENA: Rešenja zadataka iz ovog poglavlja se mogu naći na sajtu predmeta: http://ai.fon.bg.ac.rs/osnovne/programiranje-2/praktikum-i-resenja-zadataka/

Zadatak 1 – 2011

Napraviti javnu klasu Polazak u paketu autobuska_stanica koja ima • Privatni atribut destinacija (npr. “Novi Sad”).• Privatni atribut vreme koji predstavlja datum i vreme polaska autobusa (koristiti klasu

GregorianCalendar).• Privatni atribut brojSlobodnihMesta koji predstavlja broj slobodnih mesta za taj polazak.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut destinacija

su null i prazan String. Vreme mora biti različito od null i mora da se odnosi na neki vremenski trenutak posle sadašnjeg, a broj slobodnih mesta mora da bude nula ili više. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze svi podaci o polasku uz odgovarajući tekst u formatu “DESTINACIJA:____ VREME:_____ BROJ MESTA:_____”.

Napraviti javni interfejs RezervacijaKarata u paketu autobuska_stanica.rezervacije koji ima:• Javnu metodu rezervišiKarte koja vraća boolean vrednost, a prima naziv destinacije i broj karata. • Javnu metodu proslediRezervaciju koja ne vraća ništa, a prima tri ulazna parametra: niz interfejsa

RezervacijaKarata, destinaciju i broj karata.

Napraviti javnu klasu AutobuskaStanica u paketu autobuska_stanica koja implementira interfejs RezervacijaKarata i ima

• Privatni atribut polasci koji predstavlja niz objekata klase Polazak. Ovaj niz je potrebno odmah inicijalizovati na kapacitet 100 elemenata.

• Javnu metodu unesiPolazak koja kao ulazni argument prima objekat klase Polazak i unosi ga na prvo slobodno mesto u nizu. Mesto u nizu je slobodno ako je element na tom mestu NULL. Unošenje se vrši samo ako uneti objekat nije null i ako u nizu ima mesta. U suprotnom, ispisati poruku o grešci.

• Implementiranu javnu metodu rezervišiKarte koja na osnovu unete destinacije pronalazi polazak za tu destinaciju (u bilo koje vreme) i proverava da li na tom polasku ima dovoljno mesta da može da serezerviše uneti broj karata. Ako ima, metoda smanjuje broj slobodnih mesta za broj karata i vraća TRUE. Ako nema, traži se neki drugi polazak za tu destinaciju i cela procedura se ponavlja. Ako ni na jednom polasku za tu destinaciju nema dovoljno mesta, metoda vraća FALSE.

• Implementiranu javnu metodu proslediRezervaciju koja na osnovu ulaznih parametara pokušava da napravi rezervaciju karata ali na nekoj drugoj autobuskoj stanici. Interfejsi za rezervaciju svih dostupnih autobuskih stanica su uneti kao niz (ulazni parametar) a rezervacija se vrši pozivanjem odgovarajuće metode interfejsa. Ako rezervacija uspe na nekoj od stanica, metoda ispisuje poruku otome. Ako rezervacija ne uspe ni na jednoj stanici, metoda ispisuje poruku da nigde nema dovoljno mesta za tu destinaciju.

Zadatak 2 – 2011

Napraviti javnu klasu Dolazak u paketu autobuska_stanica koja ima:• Privatni atribut mesto (npr. “Novi Sad”).• Privatni atribut vreme koji predstavlja datum i vreme dolaska autobusa (koristiti klasu

GregorianCalendar).• Privatni atribut kašnjenje koji označava koliko će minuta kasniti autobus u dolasku (npr. 15 minuta).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut mesto su

null i prazan String. Vreme mora biti različito od null, a kašnjenje mora da bude nula ili više. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća jedan String u kome se nalaze svi podaci o dolasku uz odgovarajući tekst u formatu “Mesto:___ Vreme:___ Kašnjenje:___ minuta”. Ako je kašnjenje nula, onda poruka treba da bude u formatu “Mesto:___ Vreme:___“.

Napraviti javni interfejs OglašavanjeDolazaka u paketu autobuska_stanica.dolasci koji ima:• Javnu metodu podesiKašnjenje koja ne vraća ništa a kao ulazne parametre prima naziv mesta i broj

minuta koji predstavlja kašnjenje. • Javnu metodu obrišiDolaske koja nema ulazne parametre, a vraća listu objekata klase Dolazak.

Napraviti javnu klasu AutobuskaStanica u paketu autobuska_stanica koja implementira interfejs OglašavanjeDolazaka i ima :

• Privatni atribut dolasci koji predstavlja niz objekata klase Dolazak.• Javni konstruktor koji inicijalizuje atribut dolasci na kapacitet 50 elemenata.• Javnu metodu najaviDolazak koja kao ulazne argumente prima mesto, vreme dolaska (klasa

GregorianCalendar) i kašnjenje. Metoda na osnovu ovoga pravi novi objekat klase Dolazak i unosi ga na prvo slobodno mesto u nizu. Mesto u nizu je slobodno ako je element na tom mestu NULL. Ako u nizu nema mesta, ne dešava se ništa.

• Implementiranu javnu metodu podesiKašnjenje koja pronalazi sve dolaske iz unetog mesta i povećava kašnjenje (atribut kašnjenje) svakog od tih dolazaka za uneti broj minuta. Metoda takođe ispisuje podatke o svakom izmenjenom dolasku i to posle izmene. Uzeti u obzir da su neki elementi niza null.

• Implementiranu javnu metodu obrišiDolaske koja prolazi kroz niz dolazaka i pronalazi one dolaske čije je očekivano vreme dolaska bilo prethodnog dana u odnosu na trenutni datum. Ova metoda unosi u listu sve takve dolaske i “briše” ih iz niza (postavlja na NULL). Metoda na kraju vraća ovu listu.

Zadatak 3 – 2011

Napraviti javnu klasu Restoran u paketu restoran koja ima:• Privatni atribut naziv.• Privatni atribut vrstaKuhinje koji predstavlja vrstu hrane koja se služi u restoranu (npr. “kineska”)• Privatni atribut ocena koji predstavlja ocenu za taj restoran koja je u rasponu od 1 do 5 (ceo broj).• Privatni atribut datumProcene koji predstavlja datum kada je data ocena za restoran (koristiti klasu

GregorianCalendar).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute naziv i

vrsta kuhinje su null i prazan String. Ocena treba da bude u rasponu od 1 do 5 a datum procene ne sme da bude null. U slučaju unosa nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća String sa svim podacima o restoranu.

Napraviti javni interfejs TopListeRestorana u paketu restoran.liste koji ima:• Javnu metodu napraviTopListu koja kao ulazni parametar dobija vrstu kuhinje i godinu (kao ceo broj,

npr. 2009) a ne vraća ništa. • Javnu metodu napraviTopListu koja kao ulazni parametar dobija vrstu kuhinje i vraća niz objekata

klase Restoran.

Napraviti javnu klasu VodičKrozRestorane u paketu restoran.vodič koja implementira interfejs TopListeRestorana i ima :

• Privatni atribut restorani koji je lista objekata klase Restoran. Odmah inicijalizovati listu.• Javnu metodu unesiRestoran koja kao ulazni argument prima objekat klase Restoran i unosi ga u

listu i to na početak. Unošenje se vrši ako uneti objekat nije null. U suprotnom, ispisati poruku o grešci.

• Implementiranu javnu metodu napraviTopListu koja na osnovu unete vrste kuhinje i godine (kao ceo broj, npr. 2009) ispisuje na ekranu podatke o svim restoranima koji imaju tu vrstu kuhinje i ocenjeni su ocenom 5 godine koja je uneta kao ulazni parametar.

• Implementiranu javnu metodu napraviTopListu koja kao ulazni parametar dobija vrstu kuhinje i vraćaniz sa 10 najbolje ocenjenih restorana u tekućoj godini koji spremaju tu vrstu kuhinje. Naravno, prvo bi trebalo redom uneti sve one restorane koji su dobili ocenu 5 pa, ako ostane mesta, onda i one restorane koji su dobili ocenu 4. Ako niz ni onda ne bude popunjen, ostaviti da svi preostali elementi budu null.

Zadatak 4 – 2011

Napraviti javnu klasu Hotel u paketu hoteli koja ima :

• Privatni atribut naziv.• Privatni atribut regija koji predstavlja naziv turističke regije ili mesta u kojem se nalazi hotel.• Privatni atribut brojZvezdica koji predstavlja kategorizaciju hotela koja je u rasponu od 1 do 5

zvezdica.• Privatni atribut ocena koji predstavlja ocenu koju je hotel dobio u rasponu od 1 do 5 (ceo broj).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute naziv i

regija su null i prazan String. Broj zvezdica i ocena bi trebalo da budu u rasponu od 1 do 5. U slučajuunosa nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu equals metodu klase Object. Ova metoda vraća true ako su vrednosti atributa naziv i regija jednaki nazivu i regiji hotela koji je unet kao ulazni argument. U suprotnom, metoda vraća false.

Napraviti javni interfejs PonudaRegije u paketu regija koji ima:• Javnu metodu napraviTopPonudu koja kao ulazni parametar dobija naziv regije a ne vraća ništa. • Javnu metodu napraviTopPonudu koja kao ulazni parametar dobija naziv regije i broj zvezdica a

vraća listu objekata klase Hotel.

Napraviti javnu klasu TurističkaOrganizacija u paketu turizam koja implementira interfejs PonudaRegije i ima :

• Privatni atribut hoteli koji je lista objekata klase Hotel.• Privatni atribut poslednjaIzmena koji predstavlja datum i vreme poslednje izmene liste hotela

(koristiti klasu GregorianCalendar).• Javni konstruktor koji inicijalizuje listu hotela.• Javnu metodu unesiHotel koja kao ulazni argument prima objekat klase Hotel i unosi ga na početak

liste. Unošenje se vrši ako uneti objekat nije null i ako već ne postoji u listi. U suprotnom, ispisati poruku o grešci. Ako se uspešno izvrši unos, ažurirati atribut poslednjaIzmena na trenutni datum i vreme.

• Implementiranu javnu metodu napraviTopPonudu koja na osnovu unetog naziva regije ispisuje na ekranu samo nazive svih hotela sa 5 zvezdica iz te regije koji su dobili ocenu 5. Na početku je potrebno ispisati naziv regije kao i datum i vreme poslednje izmene liste hotela uz odgovarajuću poruku.

• Implementiranu javnu metodu napraviTopPonudu koja kao ulazni parametar dobija naziv regije i brojzvezdica, a vraća listu objekata klase Hotel. Ova lista bi trebalo da sadrži pet najbolje ocenjenih hotela iz ove regije čiji broj zvezdica je jednak unetom broju zvezdica. Pri tome, prvo bi trebalo redom unositi sve one hotele koji su dobili ocenu 5 pa, ako lista još uvek ima manje od 5 hotela, onda i one hotele koji su dobili ocenu 4 i to sve dok lista ne sadrži tačno 5 hotela. Ako i posle toga lista bude imala manje od 5 hotela, vratiti je takvu kakva jeste.

Zadatak 5 – 2011

Napraviti javnu apstraktnu klasu Eksponat u paketu eksponati koja ima:• Privatni atribut naziv koji predstavlja naziv eksponata.• Privatni atribut autor koji predstavlja ime i prezime autora u formatu “IME PREZIME”.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za oba atributa su null

i prazan String, a String sa imenom i prezimenom autora ne sme biti kraći od 5 znakova. U slučaju unosa nedozvoljenih vrednosti ispisati poruku o grešci.

• Javnu apstraktnu metodu ispiši koja nema ulaznih parametara i ne vraća ništa.

Napraviti javnu klasu Slika u paketu eksponati.slike koja nasleđuje klasu Eksponat i ima:• Privatni atribut tehnika koji predstavlja naziv tehnike koju je slikar koristio (npr. “ulje na platnu”).• Odgovarajuće javne get i set metode za ovaj atribut.• Implementiranu javnu metodu ispiši koja na ekranu ispisuje sve podatke o slici.

Napraviti javnu klasu Fotografija u paketu eksponati.fotografije koja nasleđuje klasu Eksponat i ima :• Implementiranu javnu metodu ispiši koja na ekranu ispisuje sve podatke o fotografiji uz odgovarajući

tekst kojim se naznačava da je u pitanju fotografija.

Napraviti javnu klasu Izložba u paketu izložba koja ima:• Privatni atribut datumOtvaranja tj. datum i vreme otvaranja izložbe (koristiti klasu

GregorianCalendar).

• Privatni atribut eksponati koji predstavlja niz objekata klase Eksponat. (NAPOMENA: Niz eksponatasa izložbe će zapravo da sadrži objekte klase Slika i objekte klase Fotografija)

• Javni konstruktor koji inicijalizuje niz na 50 elemenata i postavlja da datum otvaranja bude datum koji se unosi kao ulazni parametar konstruktora (klasa GregorianCalendar).

• Javnu metodu unesiEksponat koja kao ulazni argument prima objekat klase Eksponat i unosi ga u niz na prvo slobodno mesto (mesto je slobodno ako je element na tom mestu NULL). Unošenje se vrši samo ako uneti objekat nema null vrednost i ako u nizu ima mesta. U suprotnom, ispisati porukuo grešci.

• Javnu metodu ispišiSveEksponate koja kao ulazni parametar prima ime i prezime autora (kao jedan String) i na ekranu ispisuje podatke o svim eksponatim tog autora. Metoda na početku ispisuje datum otvaranja izložbe uz odgovarajuću poruku.

• Javnu metodu koja kao ulazni parametar dobija prezime autora i vraća listu koja sadrži sve slike kojeautori sa tim prezimenom imaju na izložbi a nastale su korišćenjem tehnike “tempera”.

Zadatak 6 – 2011

Napraviti javnu apstraktnu klasu Eksponat u paketu eksponati koja ima:• Privatni atribut naziv koji predstavlja naziv eksponata.• Privatni atribut autor koji predstavlja ime i prezime autora u formatu “IME PREZIME”.• Privatni atribut cena koji predstavlja cenu eksponata (npr. 29,95).• Privatni atribut datumPrijema tj. datum kada je eksponat primljen u galeriju (klasa

GregorianCalendar).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute naziv i

autor su null i prazan String a cena mora da bude veća od nule. Takođe, datum prijema ne sme da bude null i mora da se odnosi na neki trenutak pre trenutnog datuma i vremena. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Javnu apstraktnu metodu ispiši koja nema ulaznih parametara i ne vraća ništa.

Napraviti javnu klasu Slika u paketu eksponati.slike koja nasleđuje klasu Eksponat i ima:• Implementiranu javnu metodu ispiši koja na ekranu ispisuje sve podatke o slici uz odgovarajući tekst

i napomenu da je eksponat, u ovom slučaju, slika.

Napraviti javnu klasu Skulptura u paketu eksponati.skulpture koja nasleđuje klasu Eksponat i ima:• Privatni atribut materijal koji predstavlja naziv materijal od kojeg je napravljena skulptura.• Odgovarajuće javne get i set metode za ovaj atribut• Implementiranu javnu metodu ispiši koja na ekranu ispisuje sve podatke o skulpturi uz odgovarajući

tekst i napomenu da je eksponat, u ovom slučaju, skulptura.

Napraviti javnu klasu Galerija u paketu galerija koja ima:• Privatni atribut eksponati koji predstavlja niz objekata klase Eksponat. (NAPOMENA: Niz eksponata

sa izložbe će zapravo da sadrži objekte klase Slika i objekte klase Skulptura) • Javni konstruktor koji inicijalizuje niz na 100 elemenata. • Javnu metodu unesiEksponat koja kao ulazni argument prima objekat klase Eksponat i unosi ga u

niz na prvo slobodno mesto. Mesto u nizu je slobodno ako je element na tom mestu NULL. Unošenje se vrši samo ako uneti objekat nema null vrednost i ako u nizu ima mesta. U suprotnom, ispisati poruku o grešci. Ako se izvrši uspešan unos, postaviti da datum prijema ovog novog eksponata bude trenutni datum.

• Javnu metodu uvediPopust koja kao ulazni parametar dobija procentualni iznos popusta (npr.7,5%) ispušta cene svih onih eksponata koji su primljeni u galeriju u toku prethodne godine. Pri tome, potrebno je utvrditi koja je bila prethodna godina na osnovu trenutnog datuma.

• Javnu metodu koja vraća niz objekata klase Skulptura koji sadrži dve najskuplje skulpture (iz galerije) napravljene od bronze.

Zadatak 7 – 2011

Napraviti javnu apstraktnu klasu Pecivo u paketu namirnice koja ima :• Privatni atribut naziv čija je početna vrednost “nepoznat”.• Privatni atribut kalorijskaVrednost (realni broj) koji predstavlja broj kalorija koje pecivo sadrži.

• Privatni atribut rokTrajanja - datum i vreme do kojeg se pecivo može koristiti (klasa GregorianCalendar).

• Odgovarajuće javne get i set metode za ove atribute. Naziv ne sme biti null, broj kalorija mora biti veći od nule, a rok trajanja ne sme biti null i mora se odnositi na neki datum posle trenutnog datuma.Ako bilo koje od ovih ograničenja nije zadovoljeno, na ekranu ispisati poruku o grešci.

• Javnu apstraktnu metodu prikazi koja nema ulaznih argumenata i ne vraća ništa.

Napraviti javnu klasu Sendvič u paketu namirnice koja nasleđuje apstraktnu klasu Pecivo i ima :• Implementiranu javnu metodu prikazi koja ispisuje podatke o sendviču uz napomenu da je u pitanju

sendvič.

Napraviti javnu klasu Pica u paketu namirnice koja nasleđuje apstraktnu klasu Pecivo i ima :• Privatni atribut prilozi koji predstavlja tekstualni opis priloga na pici (npr. „kečap, kačkavalj, šunka“).• Odgovarajuće javne get i set metode za ovaj atribut• Implem. javnu metodu prikazi koja ispisuje podatke o pici uz napomenu da je u pitanju pica.

Napraviti javnu klasu Pekara u paketu pekara koja ima:• Privatni atribut ponuda koji predstavlja niz objekata klase Pecivo. (NAPOMENA: Ovaj niz će

zapravo da sadrži objekte klase Sendvič i objekte klase Pica)• Javni konstruktor koji postavlja kapacitet niza ponuda na 100 (tj. pekara nudi maksimalno 100 vrsta

peciva).• Javnu metodu koja izračunava i vraća prosečnu kalorijsku vrednost peciva koje pekara ima u

ponudi. Obratiti pažnju na to da neki elementi niza mogu imati null vrednost.• Javnu metodu dodajSendvič koja prima tri ulazna parametra: naziv sendviča, kalorijsku vrednost i

rok trajanja (GregorianCalendar). Metoda pravi novi objekat klase Sendvič i dodaje ga u ponudu i to na prvo slobodno mesto (mesto gde element niza ima NULL vrednost). Dodavanje se vrši samo ukoliko se rok trajanja odnosi na neki datum posle trenutnog datuma i ukoliko ima mesta u nizu. U suprotnom se ispisuje odgovarajuća poruka o grešci.

• Javnu metodu koja vraća listu objekata klase Pica koja sadrži samo one pice iz ponude pekare kojima je već istekao rok trajanja a među prilozima imaju i „kulen“.

Zadatak 8 – 2011

Napraviti javnu apstraktnu klasu Namirnica u paketu namirnice koja ima :• Privatni atribut nazivNamirnice. Početna vrednost ovog atributa je NULL.• Privatni atribut jePosna koji ima vrednost TRUE ukoliko je u pitanju posna namirnica, a inače

FALSE.• Privatni atribut cena (npr. 100,55 dinara). Početna vrednost ovog atributa je 0.• Odgovarajuće javne get i set metode za ova dva atributa. Naziv namirnice ne sme biti null niti

prazan String a cena mora biti veća od nule. Ako bilo koje od ovih ograničenja nije zadovoljeno, na ekranu ispisati poruku o grešci.

• Redefinisanu metodu equals klase Object koja kao ulazni argument prima objekat klase Object, ali se smatra da će se zaista unositi objekti klase Namirnica. Ova metoda vraća true ako su vrednosti atributa nazivNamirnice i jePosna jednaki vrednostima atributa nazivNamirnice i jePosna namirnice koja je uneta kao ulazni argument metode. U suprotnom, metoda vraća false.

• Javnu apstraktnu metodu prikazi koja nema ulaznih argumenata i ne vraća ništa.

Napraviti javnu klasu Pecivo u paketu namirnice koja nasleđuje apstraktnu klasu Namirnica i ima:• Implementiranu javnu metodu prikazi koja na ekranu ispisuje sve podatke o konkretnom pecivu.

Napraviti javnu klasu Pekara u paketu pekara koja ima:• Privatni atribut poslednjaTura - vreme kada je ispečena poslednja tura peciva (GregorianCalendar)• Privatni atribut ponudaPeciva koji predstavlja niz objekata klase Pecivo.• Javni konstruktor koji kao ulazni argument prima ceo broj koji predstavlja broj vrsta peciva koje

pekara nudi. Ukoliko je uneti broj veći od nule, kapacitet niza ponudaPeciva se postavlja na unetu vrednost. U suprotnom, kapacitet se postavlja na 15 i ispisuje se poruka o grešci pri unosu.

• Javnu metodu koja vraća cenu najjeftinijeg peciva u pekari. Obratiti pažnju na prazna mesta u nizu (mesto u nizu je prazno ako element na tom mestu ima vrednost NULL).

• Javnu metodu koja prima tri ulazna parametra: naziv peciva, cenu i indikator o tome da li je posno. Metoda unosi pecivo u niz na prvo slobodno mesto (mesto je slobodno ako element niza NULL).

Dodavanje se vrši samo ukoliko se uneto pecivo već ne nalazi u ponudi pekare. U suprotnom, ispisuje se poruka o grešci. Ako je pecivo uspešno dodato, ažurirati atribut poslednjaTura na trenutnidatum i vreme.

• Javnu metodu koja vraća listu koja sadrži tri najskuplja posna peciva iz ponude pekare.

Zadatak 1 – 2012

Napraviti javnu klasu Računar u paketu računari.domen koja ima:• Privatni atribut procesor (npr. “Intel i7”).• Privatni atribut takt koji predstavlja radni takt procesora u gigahercima (npr. 1.7).• Privatni atribut memorija koji predstavlja količinu RAM memorije u gigabajtima (npr. 2).• Privatni atribut datumNabavke koji predstavlja datum i vreme kad je računar kupljen

(GregorianCalendar)• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut procesor su

null i svaki String kraći od tri znaka. Datum nabavke mora biti različit od null i mora da se odnosi na neki vremenski trenutak pre sadašnjeg, a memorija i takt moraju da budu veći od nule. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze svi podaci o računaru uz odgovarajući tekst.

Napraviti javni interfejs RačunarskiCentar u paketu računari.centar koji ima:• Javnu metodu vratiBrojIgrackihKonfiguracija koja kao parametre dobija takt procesora i količinu

radne memorije a vraća ceo broj.• Javnu metodu proveriKapacitet koja kao parametar dobija niz interfejsa RačunarskiCentar i ceo

broj koji predstavlja broj učesnika na igračkom turniru a vraća BOOLEAN vrednost.

Napraviti javnu kl. Igraonica u paketu računari.igraonica koja implem. Interf. RačunarskiCentar i ima:• Privatni atribut računari koji predstavlja niz objekata klase Računar.• Javni konstruktor koji inicijalizuje atribut računari na kapacitet koji se unosi kao parametar. Ako je

uneti kapacitet nula ili manji od nule, napraviti niz kapaciteta 20.• Implementiranu javnu metodu vratiBrojIgrackihKonfiguracija koja prebrojava i vraća koliko ima onih

računara koji se smatraju za računare na kojima mogu da se igraju igrice. To su svi računari čiji su radni takt procesora i količina radne memorije jednaki ili veći od unetih vrednosti.

• Javnu metodu unesiRačunar koja kao ulazni argument prima objekat klase Računar i unosi ga na poslednje slobodno mesto u nizu (tj. prvo slobodno mesto posmatrano od kraja niza). Mesto u nizu je slobodno ako je element na tom mestu NULL. Unošenje se vrši ako ima mesta i ako uneti objekat nije NULL. Ako u nizu nema mesta, ispisati na ekranu „Niz je pun“. Ako je uneti objekat null ispisati „NULL objekat“.

• Implementiranu javnu metodu proveriKapacitet koja na osnovu ulaznih parametara proverava da li se u nekoj od igraonica može održati turnir tj. da li neka od njih ima dovoljan broj igračkih konfiguracija za sve učesnike turinira. Sve igraonice su unete preko niza interfejsa (ulazni parametar) a provera broja igračkih konfiguracija za jednu igraonicu se vrši pozivanjem odgovarajuće metode interfejsa. Ako se pronađe makar jedna igraonica koja ima dovoljan kapacitet (broj igračkih konfiguracija jednak ili veći od unetog broja učesnika), metoda vraća TRUE a inače FALSE.

Zadatak 2 – 2012

Napraviti javnu apstraktnu klasu Računar u paketu centar.računari koja ima:• Privatni atribut konfiguracija koji sadrži konfiguraciju (npr. “Intel i5 2.4GHz,4GB DDR3,500 GB

HDD”).• Privatni atribut vremeNabavke koji predstavlja datum kad je računar nabavljen

(GregorianCalendar).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut konfiguracija

su null i svaki String kraći od 10 znakova. Vreme nabavke mora biti različito od null i mora da se odnosi na neki trenutak pre sadašnjeg. U slučaju unosa nedozvoljenih vrednosti ispisati poruku o grešci.

• Javnu apstraktnu metodu ispiši koja na ekranu ispisuje sve podatke o računaru.

Napraviti javnu klasu Desktop u paketu centar.računari koja nasleđuje klasu Računar i ima:

• Implementiranu javnu metodu ispiši koja na ekranu ispisuje sve podatke o desktop računaru uz odgovarajući tekst i napomenu da je u pitanju desktop računar.

Napraviti javnu klasu Laptop u paketu centar.računari koja nasleđuje klasu Računar i ima:• Privatni atribut model koji predstavlja naziv marke i modela laptopa (npr. “Lenovo Thinkpad t61”).• Odgovarajuće javne get i set metode za ovaj atribut.• Implementiranu javnu metodu ispiši koja na ekranu ispisuje sve podatke o laptopu uz odgovarajući

tekst i napomenu da je u pitanju laptop računar.

Napraviti javnu klasu RačunarskiCentar u paketu centar koja ima :• Privatni atribut računari koji predstavlja niz objekata klase Računar. (NAPOMENA: Niz će zapravo

da sadrži objekte klase Desktop i Laptop). Odmah inicijalizovati niz na kapacitet 50 elemenata. • Javnu metodu koja na ekranu ispisuje podatke računara koji su kupljeni u toku tekuće godine.• Javnu metodu unesiRačunar koja kao parametre prima konfiguraciju, vreme nabavke i model. Ako je

kao model unet String koji nije NULL, metoda pravi novi objekat klase Laptop, puni ga unetim vrednostima i i unosi ga na prvo slobodno mesto u nizu. U suprotnom, metoda pravi novi objekat klase Desktop, puni ga unetim vrednostima i i unosi ga na prvo slobodno mesto u nizu. Mesto u nizuje slobodno ako je element na tom mestu NULL. Ako u nizu nema mesta, ne dešava se ništa.Javnu metodu koja obrće redosled elemenata u postojećem nizu računara tako da prvi element bude prebačen na poslednje mesto,drugi na pretposlednje...pretposlednji na drugo,a poslednji na prvo.

Zadatak 3 – 2012

Napraviti javnu klasu Guma u paketu automobili.gume koja ima:• Privatni atribut marka koji sadrži marku i model gume (npr. „Michelin Alpin A3“)• Privatni atribut dimenzije koji predstavlja dimenzije gume u obliku „širina/visina/prečnik“(npr.

„155/70/14“)• Privatni atribut zimska koji je TRUE ako je guma pogodna za zimske uslove vožnje, a FALSE ako

nije.• Privatni atribut datumProizvodnje koji predstavlja datum proizvodnje (koristiti klasu

GregorianCalendar).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut naziv su null

i prazan String, a dimenzije ne smeju da budu null i moraju da sadrže tačno 9 znakova. Datum proizvodnje ne sme da bude null. U slučaju unosa nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća String sa svim podacima o gumi.

Napraviti javni interfejs PretraživačGuma u paketu automobili.gume.pretraživač koji ima:• Javnu metodu prikaziPonudu koja ima četiri parametra: širina (ceo broj), visina (ceo broj), prečnik

(ceo broj) i jeZimska (boolean) i ne vraća ništa.• Javnu metodu unesiGumu koja kao ulazni argument prima objekat klase Guma i ne vraća ništa.

Napraviti javnu klasu VulkanizerskaRadionica u paketu automobili koja implementira interfejs PretraživačGuma i ima:

• Privatni atribut gume koji je lista objekata klase Guma. Odmah inicijalizovati listu.• Implementiranu javnu metodu unesiGumu koja kao ulazni argument prima objekat klase Guma i

unosi ga u listu i to na početak. Unošenje se vrši ako uneti objekat nije null i ako je datum proizvodnje te gume neki trenutak iz prošlosti. U suprotnom, ispisati poruku o grešci.

• Implementiranu javnu metodu prikaziPonudu koja pronalazi i na ekranu ispisuje gume željenih karakteristika (širina, visina, prečnik i da li je za zimske uslove vožnje). Obratiti pažnju na to da atribut dimenzije sadrži širinu, visinu i prečnik gume ali date u vidu String vrednosti („155/70/14“).

• Javnu metodu koja obrće redosled elemenata u postojećoj listi guma tako da poslednji element budeprebačen na prvo mesto,pretposlednji na drugo...drugi na pretposlednje, i prvi na poslednje.

Zadatak 4 – 2012

Napraviti javnu klasu Guma u paketu prodavnica.gume koja ima:• Privatni atribut marka.• Privatni atribut širina koji predstavlja širinu gume (npr. 165)

• Privatni atribut visina koji predstavlja visinu gume (npr. 55)• Privatni atribut prečnik koji predstavlja prečnik gume (npr. 15)• Privatni atribut stanje koji predstavlja broj takvih guma na stanju u prodavnici.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut marka su

null i prazan String.Širina gume treba da bude u rasponu od 135 do 265, visina od 45 do 85 a prečnik od 13 do 19. Stanje treba da bude nula ili veće. U slučaju unosa nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o gumi uz odgovarajuću poruku.

Napraviti javni interfejs PretragaGuma u paketu prodavnica.interfejs koji ima:• Javnu metodu pretrazi koja kao ulaz dobija širinu, visinu i prečnik gume a ne vraća ništa.• Javnu metodu pretraziLanacProdavnica koja kao ulaz dobija niz interfejsa PonudaGuma i objekat

klase Guma, a ne vraća ništa.

Napraviti javnu klasu ProdavnicaAutoDelova u paketu prodavnica koja implementira interfejs PretragaGuma i ima:

• Privatni atribut ponudaGuma koji je lista objekata klase Guma i koji predstavlja ponudu prodavnice.• Javni konstruktor koji inicijalizuje listu ponudaGuma.• Implementiranu javnu metodu pretrazi koja pronalazi i ispisuje na ekranu sve podatke o gumama

koje odgovaraju unetim parametrima: marka, širina, visina i prečnik. Ako takvih guma nema u prodavnici, ne ispisivati ništa.

• Javnu metodu unesiGumu koja kao ulazni argument prima objekat klase Guma i unosi ga u listu i to na početak. Unošenje se vrši ako u listi ne postoji ista guma. Ako u listi postoji ista guma (ista marka, širina, visina i prečnik), onda se samo stanje preuzeto iz unetog objekta Guma dodaje na postojeće stanje odgovarajuće gume iz liste.

• Implementiranu javnu metodu pretraziLanacProdavnica koja na osnovu unetog objekta klase Guma u svim auto prodavnicama iz lanca prodavnica pretrazuje takve gume (marka, širina, visina, prečnik)i ispisuje podatke o njima na ekranu. Sve prodavnice su unete preko niza interfejsa (ulazni parametar) a pretraga i ispis odgovarajućih guma za jednu prodavnicu se vrši pozivanjem odgovarajuće metode interfejsa.

Zadatak 5 – 2012

Napraviti javnu klasu EkipaHitnePomoci u paketu hitna_pomoc koja ima:• Privatni atribut članovi koji predstavlja imena i prezimena članova ekipe u formatu „VOZAČ: ####

MEDICINAR1: #### MEDICINAR2: ####“, na primer „VOZAČ: Pera Perić MEDICINAR1: Žika Mikić MEDICINAR2: Laza Lazić“.

• Privatni atribut brojIntervencija koji predstavlja broj intervencija koje je ta ekipa imala.• Privatni atribut početakSmene koji predstavlja datum i vreme kad je ekipa krenula sa radom u

smeni (GregorianCalendar)• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut članovi su

null i svaki String kraći od 30 znakova. Početak smene mora biti različit od null i mora da se odnosi na neki vremenski trenutak pre sadašnjeg, a broj intervencija mora da bude nula ili veći. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze svi podaci o ekipi uz odgovarajući tekst.

Napraviti javni interfejs DispečerskiCentar u paketu hitna_pomoc.centar koji ima:• Javnu metodu smeniEkipe koja nema parametre i ne vraća ništa.• Javnu metodu primiPoziv koja nema ulazne parametre i ne vraća ništa.

Napraviti javnu kl. HitnaPomoć u paketu hitna_pomoc koja implem. Interf. DispečerskiCentar i ima:• Privatni atribut ekipe koji predstavlja niz objekata klase EkipaHitnePomoci.• Javni konstruktor koji inicijalizuje atribut ekipe na kapacitet koji se unosi kao parametar. Ako je uneti

kapacitet nula ili manji od nule, napraviti niz kapaciteta 10. • Implementiranu javnu metodu smeniEkipe koja iz niza briše sve ekipe koje su imale više od 20

intervencija. Brisanje se vrši postavljanjem elementa niza na NULL vrednost. Obratiti pažnju na mesta u nizu koja su već prazna.

• Javnu metodu unesiEkipu koja prima tri ulazna argumenta: ime i prezime vozača (String), ime i prezime prvog medicinara (String) i ime i prezime drugog medicinara (String). Metoda na osnovu unetih podataka pravi i puni objekat klase EkipaHitnePomoci i unosi ga na prvo slobodno mesto u nizu. Obratiti pažnju na to da atribut clanovi bude u formatu koji je dat na početku zadatka. Kao početak smene je potrebno postaviti da je to trenutni datum i vreme. Potrebno je postaviti i da je brojintervencija nula. Mesto u nizu je slobodno ako je element na tom mestu NULL. Unošenje se vrši ako ima mesta. Ako u nizu nema mesta, ispisati na ekranu „Niz je pun“.

• Implementiranu javnu metodu primiPoziv koja nema ulazne parametre a povećava (za jedan) broj intervencija za onu ekipu koja je najkasnije počela sa smenom. Obratiti pažnju na prazna mesta u nizu.

Zadatak 6 – 2012

Napraviti javnu klasu TaksiVozilo u paketu taksi koja ima:• Privatni atribut id koji sadrži taksi broj i ime i prezime vozača (npr. „314 Pera Perić“).• Privatni atribut brojPoziva koji predstavlja broj vožnji koje je taj taksi imao.• Privatni atribut slobodan koji ima vrednost TRUE ako je taksi slobodan a FALSE ako je zauzet.• Privatni atribut krajSmene koji predstavlja datum i vreme kad taksi završava sa smenom

(GregorianCalendar)• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut id su null i

svaki String kraći od 10 a duži od 30 znakova. Kraj smene mora biti različit od null i mora da se odnosi na neki vremenski trenutak u budućnosti, a broj poziva mora da bude nula ili veći. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je ispisati poruku o grešci.

• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze svi podaci o taksiju uz odgovarajući tekst.

Napraviti javni interfejs TaksiCentrala u paketu taksi koji ima :• Javnu metodu primiPoziv koja kao ulazne parametre prima: taksi broj (ceo broj), ime vozača

(String) i prezime vozača (String) i ne vraća ništa.• Javnu metodu uredi koja nema parametre i ne vraća ništa.

Napraviti javnu kl. TaksiFirma u paketu taksi.firma koja implem. Interf. TaksiCentrala i ima:• Privatni atribut vozila koji predstavlja listu obj. klase TaksiVozilo.Odmah inicijalizovati listu.• Javnu metodu unesiTaksistu koja kao parametre prima objekat klase TaksiVozilo i unosi ga na kraj

liste. Posle unosa, potrebno je postaviti da brojPoziva bude nula i da taksi bude slobodan. • Implementiranu javnu metodu primiPoziv koja na osnovu unetih parametara pronalazi traženog

taksistu, povećava njegov broj poziva za jedan, i postavlja da nije slobodan. Obratiti pažnju na to da je atribut id klase taksista u formatu „TAKSI_BROJ IME PREZIME“.Ako je taksisti prošao kraj smene, ispisati poruku o tome i ne vršiti izmene. Ako taksista sa datim podacima ne postoji, ispisati poruku o tome.

• Implementiranu javnu metodu uredi koja preuređuje redosled taksi vozila iz liste tako da se na početku nalaze sva slobodna taksi vozila a na kraju sva zauzeta taksi vozila.

Zadatak 7 – 2012

Napraviti javnu apstraktnu klasu Lokomotiva u paketu železnica.lokomotive koja ima: Privatni atribut naziv čija je početna vrednost “nepoznat”. Privatni atribut datumProizvodnje - datum i vreme kad je lokomotiva proizvedena

(GregorianCalendar). Početna vrednost je null. Privatni atribut datumRashodovanja datum i vreme kad je lokomotivu potrebno povući iz

saobraćaja (GregorianCalendar). Početna vrednost je null. Privatni atribut nosivost koja predstavlja iznos u tonama koliko lokomotiva može da povuče (npr.

21000 t). Odgovarajuće javne get i set metode za ove atribute. Naziv ne sme biti null, nosivost mora da bude

veća od nule, datum proizvodnje mora da se odnosi na neki datum pre trenutnog datuma a datum rashodovanja mora se odnositi na neki datum posle trenutnog datuma. Ako bilo koje od ovih ograničenja nije zadovoljeno, na ekranu ispisati poruku o grešci.

Javnu apstraktnu metodu ispisi koja nema ulaznih argumenata i ne vraća ništa.

Napraviti javnu klasu DizelLokomotiva u paketu železnica.lokomotive.dizel koja nasleđuje apstraktnu klasu Lokomotiva i ima:

• Privatni atribut potrošnja koji predstavlja koliko litara dizel goriva mašina troši po satu rada (npr. 300).

• Odgovarajuće javne get i set metode za ovaj atribut.• Implementiranu javnu metodu ispisi koja ispisuje sve podatke o dizel lokomotivi.

Napraviti javnu klasu ElektričnaLokomotiva u paketu železnica.lokomotive.električna koja nasleđuje apstraktnu klasu Lokomotiva i ima:

• Implementiranu javnu metodu ispisi koja ispisuje sve podatke o električnoj lokomotivi.

Napraviti javnu klasu ŽelezničkiDepo u paketu železnica koja ima:• Privatni atribut lokomotive koji predstavlja niz objekata klase Lokomotiva. (NAPOMENA: Ovaj niz

će zapravo da sadrži objekte klase DizelLokomotiva i objekte klase ElektričnaLokomotiva)• Javni konstruktor koji postavlja kapacitet niza lokomotiva na 50.• Javnu metodu rashoduj koja prolazi kroz niz i briše iz njega lokomotive kod kojih je datum

rashodovanja već prošao (u odnosu na trenutni datum). Brisanje se vrši postavljanjem elementa niza na NULL vrednost. Pre svakog brisanja, ispisati podatke o lokomotivi koja se briše na ekranu.

• Javnu metodu unesiLokomotivu koja kao ulazne parametre prima naziv, datumProizvodnje, datumRashodovanja, nosivost i potrošnju. Ako je uneta potrošnja veća od nule, pravi se novi objekatklase DizelLokomotiva, puni podacima i unosi na prvo slobodno mesto u nizu. Ako je potrošnja nula ili manja, pravi se novi objekat klase ElektričnaLokomotiva, puni podacima i unosi na prvo slobodno mesto u nizu. Ako u nizu nema mesta, ispisati na ekranu podatke o lokomotivi i poruku da nema mesta.

• Javnu metodu koja vraća listu objekata klase DizelLokomotiva u kojoj se nalaze dve dizel lokomotivesa najmanjom potrošnjom. Postoji mogućnost da dve ili više lokomotiva imaju istu potrošnju.

Zadatak 8 – 2012

Napraviti javnu apstraktnu klasu Vagon u paketu vozovi koja ima : Javnu apstraktnu metodu ispisi koja nema ulaznih argumenata i ne vraća ništa.

Napraviti javnu klasu TeretniVagon u paketu vozovi koja nasleđuje apstraktnu klasu Vagon i ima:• Privatni atribut maxNosivost koji predstavlja maksimalnu nosivost vagona u tonama (npr. 2000 t).• Odgovarajuće javne get i set metode za atribut maxNosivost. Maksimalna nosivost mora biti veća od

nule. Ako bilo koje od ovih ograničenja nije zadovoljeno, na ekranu ispisati poruku o grešci. • Implementiranu javnu metodu ispisi koja na ekranu ispisuje sve podatke o teretnom vagonu.

Napraviti javnu klasu PutničkiVagon u paketu vozovi koja nasleđuje apstraktnu klasu Vagon i ima:• Privatni atribut maxBrojPutnika koji predstavlja maksimalan broj putnika koji može stati u vagon.• Odgovarajuće javne get i set metode za atribut maxBrojPutnika. Broj putnika mora biti veći od nule i

manji od 50. Ako bilo koje od ovih ograničenja nije zadovoljeno, na ekranu ispisati poruku o grešci.• Implementiranu javnu metodu ispisi koja na ekranu ispisuje sve podatke o putničkom vagonu.

Napraviti javnu klasu Kompozicija u paketu vozovi.kompozicija koja ima:• Privatni atribut vagoni koji predstavlja listu objekata klase Vagon. Odmah inicijalizovati listu.

(NAPOMENA: Ovaj lista će zapravo da sadrži objekte klase TeretniVagon i PutničkiVagon) • Javnu metodu unesiVagon koja kao parametar dobija objekat klase Vagon i unosi ga na kraj liste.

Nakon toga, metoda ispisuje na ekranu podatke o svim vagonima iz liste ali u obrnutom redosledu.• Javnu metodu ispisiKompoziciju koja na ekranu ispisuje podatke o svim vagonima iz kompozicije ali

tako što prvo ispiše podatke o svim teretnim vagonima, a onda podatke o svim putničkim vagonima. • Javnu metodu proveri koja prima kao ulaz broj putnika i teret (u tonama) i ispisuje na ekranu da li

vagoni iz liste vagona mogu da prime tu količinu tereta i prevezu taj broj putnika istovremeno ili ne.

Zadaci za pripremu trećeg kolokvijuma

NAPOMENA: Rešenja zadataka iz ovog poglavlja se mogu naći na sajtu predmeta: http://ai.fon.bg.ac.rs/osnovne/programiranje-2/praktikum-i-resenja-zadataka/

Zadatak 1 – 2011

Napraviti javnu klasu FilmskiFestivalException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu FilmskiFestival koja ima:• Privatni atribut nazivFestivala. Početna vrednost za ovaj atribut je null.• Privatni atribut mestoOdrzavanja. Početna vrednost za ovaj atribut je null.• Privatni atribut brojPosetilaca koji predstavlja ukupan broj ljudi koji su posetili filmski festival.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za naziv i mesto

održavanja su null i prazan String, a broj posetilaca može biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase FilmskiFestivalException sa odgovarajućom porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o filmskom festivalu uz odgovarajuću poruku. U slučaju da je broj posetilaca jednak nuli, metoda vraća String koji sadrži samo podatke o nazivu festivala i mestu održavanja.

• Redefinisanu equals metodu klase Object. Prvo je potrebno proveriti da li je unet objekat klase FilmskiFestival, pa ako nije, baciti izuzetak klase FilmskiFestivalException sa odgovarajućom porukom. Metoda vraća true ako su naziv festivala i mesto održavanja jednaki nazivu i mestu održavanja unetog festivala, a u suprotnom false.

Napraviti javnu klasu SezonaFilmskihFestivala koja ima:• Privatni atribut festivali koji predstavlja listu objekata klase FilmskiFestival.• Javni konstruktor bez argumenata koji inicijalizuje listu.• Javnu metodu koja u tekstualni fajl „izvestaj.txt“ upisuje podatke o svakom festivalu iz liste koji je

imao više od 100 posetilaca. Podatke o svakom festivalu upisati u poseban red.• Javnu metodu koja sa tastature učitava podatke o jednom filmskom festivalu i unosi ga u listu.

Unošenje se vrši samo ako u listi već ne postoji isti festival. U slučaju pojavljivanja neke greške pri unosu tj. pojavljivanja izuzetka, uhvatiti izuzetak i ispisati njegovu poruku na ekranu.

• Javnu metodu koja kao ulazni parametar dobija listu objekata klase FilmskiFestival. U pitanju je lista festivala iz prethodne sezone. Ova metoda u tekstualni fajl „popularni_festivali.txt“ upisuje podatke samo o onim filmskim festivalima iz ove sezone koji su održani i prošle sezone i koji su u ovoj sezoniimali više posetilaca nego u prošloj. Pri tome, broj i redosled festivala u ove dve liste se može razlikovati.

Zadatak 2 – 2011

Napraviti javnu klasu MuzičkiFestivalException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima :

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu MuzičkiFestival koja može da bude serijalizovana i ima:• Privatni atribut nazivFestivala.• Privatni atribut mestoOdrzavanja. • Privatni atribut pobednik koji predstavlja naziv izvođača koji je pobedio na festivalu.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za naziv festivala,

mesto odrzavanja i pobednika su null i prazan String. U slučaju unosa nedozvoljenih vrednosti, bacitiizuzetak klase MuzičkiFestivalException sa odgovarajućom porukom.

• Redefinisanu equals metodu klase Object. Metoda vraća true ako su naziv festivala i mesto održavanja jednaki nazivu i mestu održavanja unetog festivala, a inače false.

Napraviti javnu klasu ArhivaFestivala koja ima:• Privatni atribut festivali koji je lista objekata klase MuzičkiFestival. Listu odmah inicijalizovati.• Javnu metodu koja kao ulazni parametar prima naziv izvođača i u fajl „osvojeni_festivali.out“

serijalizuje podatke o svim muzičkim festivalima iz liste na kojima je taj izvođač pobedio. Ako je lista prazna, ova metoda bi trebalo da baci PROVERAVANI izuzetak sa odgovarajućom porukom.

• Javnu metodu koja iz data fajla „arhiva.out“ učitava podatke o muzičkim festivalima i dodaje ih u listu. Podaci u fajlu su u formatu (podaci o svakom festivalu NISU dati u posebnom redu): <naziv_festivala> <mesto_održavanja><pobednik>. U slučaju pojavljivanja nekog izuzetka, samo uhvatiti izuzetak i ne raditi ništa (ne ispisivati čak ni poruku izuzetka).

• Javnu metodu koja kao ulazni parametar dobija listu String vrednosti čiji svaki element predstavlja naziv nekog fajla. U svakom od ovih fajlova se nalaze serijalizovani podaci više muzičkih festivala, i može da se desi da se neki festivali pojavljuju u više fajlova istovremeno. Metoda bi trebalo da objedini sve podatke iz ovih fajlova i da ih serijalizuje u fajl „cela_arhiva.out“ ali tako da ne bude duplih unosa.

Zadatak 3 – 2011

Napraviti javnu klasu FudbalerException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima :

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Fudbaler koja može da bude serijalizovana i ima:• Privatni atribut imePrezime. Vrednost za ovaj atribut je uvek u formatu “IME PREZIME”.• Privatni atribut pozicija koja predstavlja poziciju igrača (npr. “odbrana”).• Privatni atribut golovi koji predstavlja ukupan broj golova koje je fudbaler postigao u sezoni.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljena vrednost za atribut imePrezime

je null String i svaki String kraći od 5 znakova, pozicija ne sme biti null niti prazan String, a broj golova može biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase FudbalerException sa odgovarajućom porukom.

• Redefinisanu equals metodu klase Object. Prvo je potrebno proveriti da li je unet objekat klase Fudbaler, pa ako nije, baciti izuzetak klase FudbalerException sa odgovarajućom porukom. Metoda vraća true ako su ime i prezime jednaki imenu i prezimenu unetog fudbalera, a u suprotnom false.

Napraviti javnu klasu FudbalskaSezona koja ima:• Privatni atribut fudbaleri koji predstavlja listu objekata klase Fudbaler.• Javni konstruktor bez argumenata koji inicijalizuje listu. • Javnu metodu koja u tekstualni fajl „rezerve.txt“ upisuje samo imena i prezimena onih fudbalera iz

liste koji u sezoni nisu postigli nijedan gol. Ako je lista prazna, baciti PROVERAVANI izuzetak.• Javnu metodu koja sa tastature učitava podatke o jednom fudbaleru i unosi ih u listu. Unošenje se

vrši samo ako u listi već ne postoji isti fudbaler. U slučaju pojavljivanja neke greške pri unosu tj. pojavljivanja izuzetka, uhvatiti izuzetak i ispisati njegovu poruku na ekranu.

• Javnu metodu koja na osnovu serijalizovanih podataka o fudbalerima iz prethodne sezone (iz fajla “prethodna_sezona.out”) na ekranu ispisuje imena i prezimena onih fudbalera koji igrali i ove i prethodne sezone i koji su ove sezone postigli više golova nego prethodne sezone. Pri tome, redosled u kojem su sačuvani fudbaleri iz prethodne sezone u fajl ne mora da odgovara redosledu fudbalera iz liste.

Zadatak 4 – 2011

Napraviti javnu klasu VaterpolistaException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Vaterpolista koja ima:• Privatni atribut imePrezime. Vrednost za ovaj atribut je uvek u formatu “IME PREZIME”.

• Privatni atribut klub koji predstavlja ime kluba za koji vaterpolista igra.• Privatni atribut poeni koji predstavlja ukupan broj golova koje je vaterpolista postigao na utakmici.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute

imePrezime i klub su null i prazni Stringovi, a broj poena može biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase VaterpolistaException sa odgovarajućom porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o vaterpolisti uz odgovarajuću poruku.

• Redefinisanu equals metodu klase Object. Metoda vraća true ako su ime, prezime i ime kluba jednaki imenu, prezimenu i imenu kluba unetog vaterpoliste, a u suprotnom false.

Napraviti javnu klasu VaterpoloUtakmica koja ima:• Privatni atribut vaterpolisti koji je lista objekata klase Vaterpolista. Listu odmah inicijalizovati.• Javnu metodu koja u data fajl „izvestaj.out“ upisuje podatke o onim vaterpolistima iz liste koji su

ostvarili makar dva gola i to u formatu: <ime prezime><klub><broj poena>. Ne upisitvati podatke o svakom vaterpolisti u poseban red.

• Javnu metodu koja dobija tri ulazna parametra: ime i prezime, klub i broj poena koji predstavljaju podatke o vaterpolisti. Metoda unosi novog vaterpolistu u listu samo ako u listi već ne postoji isti vaterpolista. U slučaju da u listi već postoji taj vaterpolista potrebno je u tekstualni fajl „greske.txt“ uneti sve podatke o tom vaterpolisti i upisati u sledeći red fajla poruku „Vec postoji u listi“.

• Javnu metodu koja sa tastature učitava podatke o dvadeset dvojici vaterpolista i unosi ih u listu. U slučaju greške (nekog izuzetka) u toku unosa podataka za nekog vaterpolistu, metoda bi trebalo da preskoči unos za tog vaterpolistu, ispiše poruku izuzetka i nastavi sa unosom za preostale vaterpoliste.

Zadatak 5 – 2011

Napraviti javnu klasu GradException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Grad koja može da bude serijalizovana i ima:• Privatni atribut naziv. Početna vrednost za ovaj atribut je “nepoznat”.• Privatni atribut brojStanovnika. Početna vrednost za ovaj atribut je nula.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednostu za atribut naziv su

null i svi Stringovi koji imaju manje od dva slova, a broj stanovnika mora biti veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase GradException sa odgov. porukom.

• Redefinisanu equals metodu klase Object. Metoda prvo proverava da li je uneti objekat klase Grad, pa ako nije baca izuzetak klase GradException. Metoda vraća true ako je naziv grada jednak nazivu unetog grada, a inače vraća false.

Napraviti vizuelnu klasu GradoviGUI koja izgleda kao na slici 1. Naslov prozora bi trebalo da bude “Gradovi GUI”. Podesiti grafički interfejs tako da se, u toku rada aplikacije, ne mogu menjati dimenzije forme.

• Klasa GradoviGUI bi trebalo da sadrži privatni atribut gradovi koji predstavlja listu objekata klase Grad. Odmah inicijalizovati listu.

• Kada se pritisne dugme “Obriši”, briše se sadržaj oba polja za unos.• Kada se pritisne dugme “Sačuvaj”, svi podaci o gradovima iz liste se upisuju (serijalizuju) u tri fajla:

“mali_gradovi.out”, “srednji_gradovi.out” i “veliki_gradovi.out” i to u zavisnosti od broja stanovnika (veličine). Gradovi sa manje od sto hiljada stanovnika su mali, srednji gradovi imaju između sto hiljada i milion stanovnika, a veliki gradovi preko milion stanovika.

• Kada se pritisne dugme “Dodaj”, preuzimaju se podaci o nazivu grada i broju stanovnika iz polja za unos, i novi grad se unosi u listu. Unošenje se vrši samo ako u listi već ne postoji isti grad i to tako da se sačuva opadajući poredak liste prema broju stanovnika. Ako u listi već postoji isti grad, ili ako je nastao neki izuzetak u toku unosa podataka, njihovog prevaranja u odgovarajući tip itd., potrebno je u oba polja za unos ispisati reč “GREŠKA”.

Slika 1: Zadatak 5 - 2011

Zadatak 6 – 2011

Napraviti javnu klasu GradException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Grad koja može da bude serijalizovana i ima:• Privatni atribut naziv.• Privatni atribut brojStanovnika.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljena vrednost za atribut naziv je null

String, a broj stanovnika mora biti veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase GradException sa odgovarajućom porukom.

• Redefinisanu metodu toString klase Object koja vraća jedan String u kome se nalaze svi podaci o gradu u formatu “NAZIV GRADA: #### BROJ STANOVNIKA: ####”.

Napraviti vizuelnu klasu GradoviGUI koja izgleda kao na slici 2. Naslov prozora bi trebalo da bude “Lista gradova”, a centralni deo ekrana bi trebalo da sadrži editor za tekst. Kada se promeni dimenzija forme, trebalo bi da se ovaj centralni deo poveća/smanji a da ostale komponente ostanu na istom mestu (slika 3)

• Klasa GradoviGUI bi trebalo da sadrži privatni atribut gradovi koji predstavlja listu objekata klase Grad. Odmah inicijalizovati listu.

• Kada se pritisne dugme “Izadji”, prekida se izvršavanje programa.• Kada se pritisne dugme “Ucitaj”, učitavaju se (deserijalizuju) svi podaci o gradovima iz dva fajla:

“arhiva1.out” i “arhiva2.out” i puni se lista ali tako da u njoj ne bude ponavljanja (moguće je da se podaci o nekom gradu ponavljaju u oba fajla). Pre učitavanja izbrisati listu.

• Kada se pritisne dugme “Ispisi”, podaci o tri najmnogoljudnija grada iz liste se ispisuju u editoru. Ispisivanje se vrši tako da su podaci o svakom gradu u posebnom redu. Ako je lista prazna, potrebno je u editoru ispisati poruku “Lista je prazna”.

Slika 2: Zadatak 6 - 2011

Slika 3: Zadatak 6 - 2011

Zadatak 7 – 2011

Napraviti javnu klasu VaterpoloKlubException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Vaterpolista koja ima:• Privatni atribut imePrezime. Vrednost za ovaj atribut je uvek u formatu “IME PREZIME”.• Privatni atribut pozicija koji predstavlja poziciju koju vaterpolista igra (npr. “golman” ili “bek”).• Privatni atribut poeni koji predstavlja ukupan broj poena koje je vaterpolista postigao na utakmici.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute

imePrezime i pozicija su null i prazni String-ovi, a broj poena može biti nula ili veći od nule. U slučajuunosa nedozvoljenih vrednosti,baciti izuzetak klase VaterpoloKlubException sa odg. porukom

• Redefinisanu equals metodu klase Object. Prvo je potrebno proveriti da li je unet objekat klase Vaterpolista, pa ako nije, baciti izuzetak klase VaterpoloKlubException sa odgovarajućom porukom. Metoda vraća true ako su ime i prezime jednaki imenu i prezimenu unetog vaterpoliste, a u suprotnom false.

Napraviti javnu klasu VaterpoloKlubGUI koja izgleda kao na slici 4. Naslov prozora bi trebalo da bude “Vaterpolo klub”. Podesiti grafički interfejs tako da se, u toku rada aplikacije, ne mogu menjati dimenzije forme. Padajuća lista bi trebalo da ima stavke: “golman”, “krilo”, “bek”, “sidro”, “centar”.

• Klasa VaterpoloKlubGUI bi trebalo da sadrži privatni atribut igrači koji predstavlja listu objekata klase Vaterpolista. Ovu listu je potrebno odmah inicijalizovati.

• Kada se pritisne dugme “Obriši”,briše se sadržaj svih polja za unos (ne brisati sadržaj pad. liste).• Kada se pritisne dugme “Sačuvaj”, svi podaci o vaterpolistima iz liste se upisuju u dva data fajla

„golmani.out“ i “igraci.out”. U prvi fajl je potrebno upisati samo podatke o golmanima iz liste dok bi drugi trebalo da sadrži podatke o svim ostalim igračima iz liste. U oba slučaja potrebno je upisati podatke za svakog igrača u posebnom redu u formatu: <ime prezime><tab><pozicija><tab><broj poena>.

• Kada se pritisne dugme “Unesi”, preuzimaju se svi podaci o vaterpolisti iz odgovarajućih polja (ime i prezime, pozicija i poeni), i novi vaterpolista se unosi u listu. Unošenje se vrši samo ako u listi već ne postoji isti vaterpolista i to tako da se očuva opadajući redosled prema broju poena. Ako u listi već postoji isti vaterpolista, ili ako je nastao neki izuzetak u toku preuzimanja unetih podataka ili njihovog prevaranja u odgovarajući tip, potrebno je u naslov prozora dodati reč “GREŠKA”.

Slika 4: Zadatak 7 - 2011

Zadatak 8 – 2011

Napraviti javnu klasu SportException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima :

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Fudbaler koja može da bude serijalizovana i ima:• Privatni atribut imePrezime. Vrednost za ovaj atribut je uvek u formatu “IME PREZIME”.• Privatni atribut golovi koji predstavlja ukupan broj golova koje je fudbaler postigao u sezoni.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut imePrezime

su null i prazan String, a broj golova može biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase SportException sa odgovarajućom porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o fudbaleru uz odgovarajuću poruku.

Napraviti javnu klasu SezonaGUI koja izgleda kao na slici 5. Naslov prozora bi trebalo da bude “Fudbaleri”, a centralni deo ekrana bi trebalo da sadrži editor za tekst. Kada se promeni dimenzija forme, trebalo bi da secentralni deo poveća/smanji a da ostale komponente ostanu iste (slika 6).

• Klasa FudbaleriGUI bi trebalo da sadrži i privatni atribut fudbaleri koji predstavlja listu objekata klase Fudbaler. Odmah inicijalizovati listu.

• Kada se pritisne dugme “Obrisi”, briše se sadržaj editora. • Kada se pritisne dugme “Ucitaj”, učitavaju se (deserijalizuju) svi podaci o fudbalerima iz fajla

“fudbaleri.out” i puni se lista. Pre učitavanja je potrebno izbrisati listu. U listu se unose samo oni fudbaleri iz fajla koji imaju makar 3 data gola.

• Kada se pritisne dugme “Ispisi”, u editoru se ispisuje izveštaj o fudbalskoj sezoni koji se sastoji iz više delova. Prvo bi trebalo ispisati sve podatke najuspešnijem strelcu sezone (to je onaj fudbaler koji je dao najviše golova). Nakon toga, potrebno je ispisati u editoru za koje nagrade se ovaj fudbaler kvalifikovao. Nazivi nagrada i broj golova koji su potrebni da bi se osvojile su dati u data fajlu “nagrade.out” i to u formatu:<naziv_nagrade><broj_golova>.

Slika 5: Zadatak 8 - 2011

Slika 6: Zadatak 7 - 2011

Zadatak 1 – 2012

Napraviti javnu kl. DemografijaException koja predstavlja proveravani izuzetak(nasl.kl. Exception) i ima• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor

nadklase prosleđujući mu parametar.

Napraviti javnu klasu Opština koja ima:• Privatni atribut naziv. • Privatni atribut godinaPopisa koji predstavlja godinu u kojoj je vršen popis (ceo broj, npr. 2011).• Privatni atribut natalitet koji predstavlja ukupan broj novorođene dece od prethodnog popisa.• Privatni atribut mortalitet koji predstavlja ukupan broj umrlih ljudi od prethodnog popisa.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za naziv su null i svaki

String kraći od 2 znaka, a godina, mortalitet i natalitet mogu biti nula ili veći od nule. U slučaju unosanedozvoljenih vrednosti, baciti izuzetak klase RuntimeException sa odg. porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o opštini uz odgovarajuću poruku, ali tako da se svaki atribut ispisuje u posebnom redu (koristiti znak za kraj reda).

• Redefinisanu equals metodu klase Object. Prvo je potrebno proveriti da li je unet objekat klase Opština, pa ako nije, baciti izuzetak klase RuntimeException. Metoda vraća true ako su naziv opštine i godina popisa jednaki nazivu i godini popisa unete opštine, a u suprotnom false.

Napraviti javnu klasu Region koja ima:• Privatni atribut opštine koji predstavlja listu objekata klase Opština.• Javni konstruktor bez argumenata koji inicijalizuje listu.

• Javnu metodu koja sa tastature učitava podatke o jednoj opštini i unosi ih u listu. Unošenje se vrši samo ako u listi već ne postoje isti podaci. U slučaju pojavljivanja neke greške pri unosu tj. pojavljivanja izuzetka, uhvatiti izuzetak i ispisati „stack trace“ na ekranu.

• Javnu metodu koja kao ulazni parametar dobija godinu i u dva tekstualna fajla upisuje podatke o opštinama koji se odnose na unetu godinu. Ako je unet negativan broj za godinu, baciti izuzetak klase DemografijaException. U fajl „bela_kuga.txt“ metoda upisuje sve podatke o opštinama u kojima je mortalitet veći od nataliteta (za unetu godinu), dok u fajl „normalni_prirast.txt“ upisuje podatke o opštinama gde to nije slučaj (za unetu godinu).

• Javnu metodu koja kao ulaz dobija naziv opštine i u data fajl „opstina.out“ upisuje sve podatke za određenu opštinu u formatu <naziv><godina_popisa><natalitet><mortalitet> ali tako da se prvo unesu podaci iz najranijeg popisa, onda od sledećeg popisa...da bi se na kraju uneli podaci iz poslednjeg popisa.

Zadatak 2 – 2012

Napraviti javnu kl. FakultetException koja predstavlja proveravani izuzetak(nasl. klasu Exception)i ima:• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor

nadklase prosleđujući mu parametar.

Napraviti javnu klasu FakultetskeStatistike koja može da bude serijalizovana i ima:• Privatni atribut naziv koja predstavlja naziv fakulteta.• Privatni atribut godinaUpisa koji predstavlja godinu upisa na koju se odnose podaci (npr. 2011).• privatni atribut brojMesta koji predstvlja broj mesta za upis na fakultet. • Privatni atribut brojPrijavljenih koji predstavlja broj prijavljenih kandidata za prijemni ispit.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za naziv su null i svaki

String kraći od tri znaka, a svi ostali atributi moraju biti veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase RuntimeException sa odgovarajućom porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o fakultetu uz odgovarajuću poruku, ali da se svaki atribut ispisuje u posebnom redu(koristiti znak za kraj reda).

• Redefinisanu equals metodu klase Object. Metoda vraća true ako su naziv fakulteta i godina upisa jednaki nazivu i godini upisa unetog fakulteta, a inače false.

Napraviti javnu klasu UniverzitetskeStatistike koja ima:• Privatni atribut fakulteti koji je lista obj. klase FakultetskeStatistike. Listu odmah inicijalizovati. • Javnu metodu koja iz data fajla „arhiva.out“ učitava podatke o fakultetima i dodaje ih u listu. Podaci u

fajlu su u formatu (podaci o svakom fakultetu NISU dati u posebnom redu): <naziv><godina_upisa> <broj_mesta><broj_prijavljenih>. Pre unosa, obrisati listu.

• Javnu metodu koja u fajl „popularni_fakulteti.out“ serijalizuje podatke o svim fakultetima iz liste kod kojih je broj prijavljenih studenata makar dva puta veći od broja mesta. Ako takvih fakulteta nema, ova metoda bi trebalo da baci izuzetak klase FakultetException sa odgovarajućom porukom.

• Javnu metodu koja u tekstualni fajl „top_fakulteti.txt“ upisuje podatke o najpopularnijem fakultetu za 2010, 2011 i 2012 godinu. Fakultet je najpopularniji za određenu godinu ako ima najveći odnos brojaprijavljenih kandidata prema broju mesta.

Zadatak 3 – 2012

Napraviti javnu kl. StatistikaException koja predstavlja proveravani izuzetak (nasl. kl. Exception) i ima:• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor

nadklase prosleđujući mu parametar.

Napraviti javnu klasu Domaćinstvo koja može da bude serijalizovana i ima:• Privatni atribut mesto koji predstavlja naziv mesta u kojem se domaćinstvo nalazi.• Privatni atribut brojOdraslih koja predstavlja broj odraslih članova domaćinstva.• Privatni atribut brojDece koja predstavlja broj dece u domaćinstvu.• Privatni atribut mesečnaPrimanja koji predstavlja iznos mesečnih primanja cele porodice u

dinarima.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljena vrednost za atribut mesto je null

String i svaki String kraći od 5 znakova ili duži od 13 znakova, a ostali atributi moraju biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase RuntimeException sa odgovarajućom porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o Domaćinstvu uz odgovarajuću poruku, ali da se posle svakog atributa upiše u String i znak „tab“.

• Redefinisanu equals metodu klase Object. Metoda vraća true ako su vrednosti svih atributa jednaki vrednostima odgovarajućih atributa unetog domaćinstva, a inače false.

Napraviti javnu klasu PopisDomaćinstava koja ima:• Privatni atribut domaćinstva koji predstavlja listu objekata klase Domaćinstvo• Javni konstruktor bez argumenata koji inicijalizuje listu. • Javnu metodu koja u data fajl „domacinstva_bez_prihoda.out“ upisuje samo podatke o onim

domaćinstvima u kojima je iznos mesečnih primanja nula i to u formatu <mesto><broj_odraslih><broj_ dece>. Ako je lista prazna, baciti izuzetak klase StatistikaException.

• Javnu metodu koja na osnovu podataka iz liste domaćinstava sastavlja izveštaj i upisuje ga u fajl „izvestaj.txt“. U njemu treba da se nađe ukupan broj domaćinstava, prosečan iznos mesečnih primanja po domaćinstvu, prosečan broj odraslih po domaćinstvu, prosečan broj dece po domaćinstvu, kao i prosečan iznos mesečnih primanja po članu domaćinstva (računaju se i odrasli članovi i deca).

• Javnu metodu koja sa tastature učitava podatke o nekoliko domaćinstava i unosi ih u listu. Broj domaćinstava se unosi na početku. U slučaju pojavljivanja izuzetka pri unosu za neko domaćinstvo, uhvatiti izuzetak,ispisati njegovu poruku i pokušati još jednom unos sa tast. za to domaćinstvo.

Zadatak 4 – 2012

Napraviti javnu klasu HRException koja predstavlja proveravani izuzetak (nasl. kl. Exception) i ima:• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor

nadklase prosleđujući mu parametar.

Napraviti javnu klasu Zaposleni koja može da se serijalizuje i ima:• Privatni atribut imePrezime. • Privatni atribut godineStarosti .• Privatni atribut godineStaža koji predstavlja koliko godina radnog staža ima zaposleni.• Privatni atribut pol koji može imati vrednost 'z' ako je osoba ženskog pola ili 'm' ako je muškog.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za imePrezime su null

i Stringovi duži od 20 znakova,godine starosti i godine staža mogu biti nula ili veći od nule, pol mora biti 'm' ili 'z'. U slučaju unosa nedozvoljenih vrednosti, baciti RuntimeException sa odg. porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o zaposlenom uz odgovarajuću poruku ali tako da se posle svakog atributa u String upiše i znak „tab“.

• Redefinisanu equals metodu klase Object. Metoda vraća true ako su ime, prezime i godine starosti jednaki imenu, prezimenu i godinama starosti unetog zaposlenog, a u suprotnom false.

Napraviti javnu klasu HRSistem koja ima:• Privatni atribut zaposleni koji je lista objekata klase Zaposleni. Listu odmah inicijalizovati.• Javnu metodu koja u data fajl „izvestaj.out“ upisuje podatke o onim zaposlenima koji su ostvarili

pravo na jubilarnu platu i to u formatu: <ime_prezime><godine_staža>. U pitanju su svi zaposleni koji imaju radni staž od makar 10 godina.

• Javnu metodu koja serijalizuje u fajl „skora_penzija.out“ podatke o zaposlenima spremnim za penziju. To su oni zaposleni muškog pola koji imaju bar 65 godina starosti ili bar 40 godina staža, tj. oni zaposleni ženskog pola koji imaju bar 60 godina starosti ili bar 35 godina radnog staža.Osim toga, potrebno je na ekranu ispisati ukupan broj svih zaposlenih koji su spremni da se penzionišu.

• Javnu metodu koja sa tastature učitava podatke o jednom zaposlenom i unosi ih u listu. U slučaju greške (nekog izuzetka) u toku unosa podataka za bilo koji atribut tog zaposlenog, potrebno je ispisati poruku izuzetka na ekranu i pokušati ponovni unos za taj atribut.

Zadatak 5 – 2012

Napraviti javnu kl. DemografijaException kao neproveravani izuzetak (nasl.RuntimeException)koja ima:• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor

nadklase prosleđujući mu parametar.

Napraviti javnu klasu Regija koja može da bude serijalizovana i ima:• Privatni atribut naziv.

• Privatni atribut natalitet koji predstavlja ukupan broj novorođene dece od prethodnog popisa.• Privatni atribut mortalitet koji predstavlja ukupan broj umrlih ljudi od prethodnog popisa.• Privatni atribut migracioniSaldo koji predstavlja promenu broja stanovnika zbog migracija

(odseljavanje, doseljavanje, u pitanju je ceo broj).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut naziv su null

i svi Stringovi koji imaju manje od dva slova, natalitet i mortalitet moraju biti veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase DemografijaException sa odg. porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o opštini uz odgovarajuću poruku, ali je potrebno u String ubaciti i podatak o promeni broja stanovnika koji se izračunava po formuli PROMENA = NATALITET – MORTALITET + MIGRACIONI SALDO.

Napraviti vizuelnu klasu RegijeGUI koja izgleda kao na slici 7. Naslov prozora bi trebalo da bude “Demografski podaci po regionima” a centralni deo ekrana bi trebalo da sadrži editor za tekst. Kada se promeni dimenzija forme, trebalo bi da se ovaj centralni deo poveća/smanji a da ostale komponente ostanu na istom mestu (slika desno).

• Klasa RegijeGUI bi trebalo da sadrži privatni atribut regioni koji predstavlja listu objekata klase Region. Odmah inicijalizovati listu.

• Kada se pritisne dugme “Obriši”, briše se sadržaj svih polja za unos i editora za tekst. • Kada se pritisne dugme “Sačuvaj”, svi podaci o regijama iz liste se upisuju (serijalizuju) u dva fajla:

“rastuće_regije.out” i “umiruće_regije.out” i to u zavisnosti od promene broja stanovnika koja se izračunava po formuli PROMENA = NATALITET – MORTALITET + MIGRACIONI SALDO. One regije gde je promena broja stanovnika veća od nule treba serijalizovati u prvi fajl, a ostale u drugi.

• Kada se pritisne dugme “Dodaj”, preuzimaju se podaci o regiji iz polja za unos, i nova regija se unosiu listu. Unošenje se vrši samo ako u listi već ne postoji ista regija i to tako da se sačuva opadajući poredak liste prema natalitetu. Ako u listi već postoji ista regija, ili ako je nastao neki izuzetak u toku unosa podataka ili prevaranja u odgovarajući tip itd., potrebno je u editoru ispisati reč “GREŠKA”.

Slika 7: Zadatak 5 - 2012

Zadatak 6 – 2012

Napraviti javnu kl. PrijemniException kao neproveravani izuzetak (nasl. RuntimeException) i koja ima:• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor

nadklase prosleđujući mu parametar.

Napraviti javnu klasu PrijemniIspit koja može da bude serijalizovana i ima:• Privatni atribut nazivUstanove.• Privatni atribut godinaUpisa koji predstavlja godinu upisa na koju se odnose podaci (npr. 2011).• privatni atribut brojMesta koji predstvlja broj mesta za upis na fakultet. • Privatni atribut brojPrijavljenih koji predstavlja broj prijavljenih kandidata za prijemni ispit.

• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za naziv su null i svakiString kraći od pet znakova, a svi ostali atributi moraju biti veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase PrijemniException sa odgovarajućom porukom.

• Redefinisanu metodu toString klase Object koja vraća String sa svim podacima o prijemnom ispitu ali je potrebno izračunati i u taj String ubaciti i podatak o relativnom odnosu broja prijavljenih i broja mesta (podeliti ta dva).

Napraviti vizuelnu klasu PrijemniGUI koja izgleda kao na slici 8. Naslov prozora bi trebalo da bude “Prijemni ispit”, a centralni deo ekrana bi trebalo da sadrži editor za tekst. Kada se promeni dimenzija forme, trebalo bi da se ovaj centralni deo poveća/smanji a da ostale komponente ostanu na istom mestu (slika 9)

• Klasa PrijemniGUI bi trebalo da sadrži privatni atribut ustanove koji predstavlja listu objekata klase PrijemniIspit. Odmah inicijalizovati listu.

• Kada se pritisne dugme “Izadji”, prekida se izvršavanje programa.• Kada se pritisne dugme “Ucitaj”, iz editora se preuzima tekst koji sadrži naziv fajla i iz kojeg je

potrebno deserijalizovati podatke o prijemnom ispitu i uneti ih u listu. Unos u listu se vrši samo za one ustanove (iz fajla) kod kojih je broj prijavljenih veći od nule.

• Kada se pritisne dugme “Ispisi”, ispisuje se izveštaj u editoru koji sadrži samo nazive ustanova koje su 2012. godine imali veći broj prijavljenih nego 2011. godine.

Slika 8: Zadatak 6 - 2012

Slika 9: Zadatak 6 - 2012

Zadatak 7 – 2012

Napraviti javnu klasu RukometException koja predstavlja neproveravani izuzetak (nasleđuje klasu RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Rukometaš koja ima:• Privatni atribut imePrezime. Vrednost za ovaj atribut je uvek u formatu “IME PREZIME”.• Privatni atribut pozicija koji predstavlja poziciju koju rukometaš igra (npr. “golman” ili “bek”).• Privatni atribut poeni koji predstavlja ukupan broj poena koje je rukometaš postigao na utakmici.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute

imePrezime i pozicija su null i String-ovi duži od 20 znakova, a broj poena može biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti,baciti izuzetak klase RukometException sa odg.porukom.

• Redefinisanu equals metodu klase Object. Prvo je potrebno proveriti da li je unet objekat klase Rukometaš, pa ako nije, baciti izuzetak klase RukometException sa odgovarajućom porukom. Metoda vraća true ako su ime i prezime jednaki imenu i prezimenu unetog rukometaša, a inače false.

Napraviti javnu klasu RukometGUI koja izgleda kao na slici 10. Naslov prozora bi trebalo da bude “Rukomet”. Kada se promeni dimenzija forme, trebalo bi da forma izgleda kao na slici 11. Padajuća lista bi trebalo da ima stavke: “golman”, “krilo”, “bek”, “centar”.

• Klasa RukometGUI bi trebalo da sadrži privatni atribut igrači koji predstavlja listu objekata klase Rukometaš. Ovu listu je potrebno odmah inicijalizovati.

• Kada se pritisne dugme “Obriši”,briše se sadržaj svih polja za unos (ne brisati sadržaj pad. liste). • Kada se pritisne dugme “Sačuvaj”, svi podaci o rukometašima iz liste se upisuju u dva data fajla

„golmani.out“ i “igraci.out”. U prvi fajl je potrebno upisati samo podatke o golmanima iz liste dok bi drugi trebalo da sadrži podatke o svim ostalim igračima iz liste. U oba slučaja potrebno je upisati podatke za svakog igrača u posebnom redu u formatu: <ime prezime><tab><pozicija><tab><poeni>.

• Kada se pritisne dugme “Unesi”, preuzimaju se svi podaci o rukometašu iz odgovarajućih polja (ime iprezime, pozicija i poeni), i novi rukometaš se unosi u listu. Unošenje se vrši samo ako u listi već ne postoji isti rukometaš i to tako da se očuva opadajući redosled prema broju poena. Ako u listi već postoji isti rukometaš, ili ako je nastao neki izuzetak u toku preuzimanja unetih podataka ili njihovog prevaranja u odgovarajući tip, potrebno je u naslov prozora dodati reč “GREŠKA”.

Slika 10: Zadatak 7 - 2012

Slika 11: Zadatak7 - 2012

Zadatak 8 – 2012

Napraviti javnu kl. RadnikException koja predstavlja neproveravani izuzetak (nasleđuje RuntimeException) i ima:

• Javni konstruktor koji kao parametar prima poruku greške i poziva odgovarajući konstruktor nadklase prosleđujući mu parametar.

Napraviti javnu klasu Radnik koja može da bude serijalizovana i ima:• Privatni atribut imePrezime. • Privatni atribut godineStarosti .• Privatni atribut godineStaža koji predstavlja koliko godina radnog staža ima zaposleni.• Privatni atribut pol koji može imati vrednost TRUE ako je osoba ženskog pola ili FALSE ako je

muškog.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute

imePrezime su null i Stringovi duži od 20 znakova, godine starosti i godine staža mogu biti nula ili veći od nule. U slučaju unosa nedozvoljenih vrednosti, baciti izuzetak klase RadnikException sa odg. porukom.

• Redefinisanu toString metodu klase Object koja vraća String sa svim podacima o radniku uz odgovarajuću poruku i to tako da se posle svakog atributa u String upiše i znak „tab“.

Napraviti javnu klasu RadniciGUI koja izgleda kao na slici 12. Naslov prozora bi trebalo da bude “Radnici”, acentralni deo ekrana bi trebalo da sadrži editor za tekst. Sadržaj padajuće liste treba da budu stavke: „muški“i „ženski“. Kada se promeni dimenzija forme, trebalo bi da se centralni deo poveća/smanji a da ostale komponente ostanu iste (slika 13).

• Klasa RadniciGUI bi trebalo da sadrži i privatni atribut radnici koji predstavlja listu objekata klase Radnik. Odmah inicijalizovati listu.

• Kada se pritisne dugme “Obrisi”, briše se sadržaj editora i svih polja za unos.• Kada se pritisne dugme “Ucitaj”, učitavaju se (deserijalizuju) svi podaci o radnicima iz fajla čiji naziv

je upisan u editor i puni se lista. Posle učitavanja, ispisati sadržaj liste u editoru.• Kada se pritisne dugme “Unesi” preuzimaju se svi podaci o radniku iz odgovarajućih polja i novi

radnik se unosi u listu. Unošenje se vrši samo ako u listi već ne postoji isti radnik. Ako je nastao nekiizuzetak u toku unosa ili pretvaranja unetih podataka u odgovarajući tip, potrebno je u odgovarajuće polje za unos upisati reč “GREŠKA” (npr. ako je uneto -1 kao godine staža,u polje za unos staža upisati „GREŠKA“)

Slika 12: Zadatak 8 - 2012

Slika 13: Zadatak 8 - 2012

Dodatak: Zadaci za pripremanje ispita

NAPOMENA: Rešenja zadataka iz ovog poglavlja se mogu naći na sajtu predmeta: http://ai.fon.bg.ac.rs/osnovne/programiranje-2/praktikum-i-resenja-zadataka/

Zadatak 1 – januar 2012

Napraviti javnu klasu Beba u paketu porodilište.bebe koja ima: Privatni atribut ime koji predstavlja ime i prezime bebe. Početna vrednost je NULL. Privatni atribut vremeRođenja koji predstavlja tačan datum i vreme rođenja (klasa

GregorianCalendar). Početna vrednost je NULL. Privatni atribut težina koji predstavlja težinu na porođaju u gramima (npr. 3650 gr). Početna

vrednost je 0. Privatni atribut dužina koji predstavlja dužinu bebe u santimetrima (npr. 55 cm). Početna vrednost je

0. Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za ime i prezime su

null Stringovi i svi Stringovi kraći od pet znakova, vreme rođenja mora biti pre trenutnog datuma, težina mora biti u rasponu od 500 gr do 8000 gr, a dužina veća od 25cm. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

Redefinisanu equals metodu klase Object koja vraća true ako su atributi imePrezime i vremeRođenja unetog objekta jednaki imenu i prezimenu bebe i vremenu rođenja, a u suprotnom false.

Redefinisanu metodu toString klase Object koja vraća String sa svim podacima o bebi.

Napraviti javni interfejs Statistike u paketu porodilište.statistika koji ima : Javnu metodu upišiEkstreme koja kao ulazni parametar prima String i ne vraća ništa. Javnu metodu vratiFrekvencijskuTabelu koja nema ulaznih parametara, a vraća niz celih brojeva.

Napraviti javnu kl. Porodilište u paketu porodilište koja implementira interfejs Statistike i ima:• Privatni atribut bebe koji predstavlja niz objekata klase Beba.• Javni konstruktor koji kao ulazni parametar dobija kapacitet porodilišta i inicijalizuje niz na tu

vrednost. U slučaju da je uneti broj nula ili manji od nule, baciti PROVERAVANI izuzetak.• Implementiranu javnu metodu upišiEkstreme koja u data fajl čiji je naziv unet kao parametar

upisuje podatke o najtežoj bebi. Podaci se upisuju u formatu <imePrezime><tab><težina><tab><dužina> (nije potrebno upisati vreme rođenja).

• Javnu metodu otpustiIzPorodilišta koja kao ulazni parametar dobija jedan objekat klase GregorianCalendar a vraća listu objekata klase Beba. Ova metoda bi trebalo da u nizu nađe sve bebe sa datumom i vremenom rođenja koji je pre unetog datuma, i da ih iskopira u listu. Na kraju, metoda vraća listu kao povratnu vrednost.

• Implementiranu javnu metodu vratiFrekvencijskuTabelu koja nema ulaznih parametara, a vraća niz koji ima tačno 24 elementa. Svaki element niza bi trebalo da sadrži broj beba u porodilištu koji suse rodili u satu koji je jednak indeksu elementa niza (npr. poslednji element niza bi trebalo da sadrži broj onih koji su se rodili od 23:00 do 23:59h).

Zadatak 2 – januar 2012

Napraviti javnu klasu Lekar u paketu klinika.osoblje koja može da se serijalizuje i ima: Privatni atribut imePrezime koji predstavlja ime i prezime lekara. Početna vrednost je “nepoznato”. Privatni atribut datumZaposlenja koji predstavlja datum zaposlenja lekara (klasa

GregorianCalendar). Privatni atribut specijalnost koji predstavlja naziv specijalnosti lekara. Početna vrednost je

“nepoznato”. Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za ime i prezime su

null i prazni Stringovi, datum mora da bude različit od null i pre trenutnog datuma, a specijalnost mora da sadrži bar tri znaka. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

Redefinisanu metodu toString koja vraća String sa svim podacima o lekaru.

Napraviti vizuelnu klasu KlinikaGUI u paketu klinika koja izgleda kao na slici 14, a kad se dimenzije promene kao na slici 15. Padajuća lista za specijalnost bi trebalo da sadrži vrednosti “opšta praksa”, “oftalmolog” i “kardiolog”. Naslov prozora je “Klinika”, a centralni deo ekrana zauzima editor.

• Klasa KlinikaGUI bi trebalo da sadrži privatni atribut lekari koja predstavlja listu objekata klase Lekar.Ovu listu je potrebno odmah inicijalizovati.

• Kada se pritisne dugme “Prikaži”, potrebno je u editoru ispisati podatke o lekarima iz liste u obrnutom redosledu u odnosu na redosled iz liste. Podatke o svakom lekaru ispisati u posebnom redu.

• Kada se pritisne dugme “Unesi”, preuzimaju se vrednosti svih polja za unos na ekranu, pravi se noviobjekat klase Lekar, puni se ovim podacima i unosi se u listu. Ako u listi već postoji lekar sa istim imenom, prezimenom i specijalnošću i datumom zaposlenja, potrebno je u editoru ispisati poruku “Greška, taj lekar je već unet” i ne unositi ga u listu.

• Kada se pritisne dugme “Izveštaj”, potrebno je u fajl “izveštaj.out” serijalizovati sve lekare iz liste koji su zaposleni u klinici kao specijalisti iz više disciplina. To su oni lekari iz liste čije ime i prezime se pojavljuje više puta u listi, ali je specijalnost drugačija. Redosled lekara u listi nije definisan.

Slika 14: Zadatak 2 - januar 2012

Slika 15: Zadatak 2 - januar 2012

Zadatak 1 – februar 2012

Napraviti javnu apstraktnu klasu MasinaZaCiscenjeSnega u paketu masina.apstr koja ima:• Privatni atribut markaIModel koji predstavlja naziv marke i modela mašine.• Privatni atribut vremeServisa koji predstavlja datum posle kojeg je potrebno servisirati mašinu

(klasa GregorianCalendar)

• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut markaIModel su null i svaki String koji ne sadrži blanko znak (znak za prazno mesto). Vreme servisa mora da bude neki datum u budućnosti i ne sme da bude null. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je baciti izuzetak sa odgovarajućom porukom.

• Redefinisanu metodu toString klase Object koja koja vraća jedan String u kome se nalaze svi podacio mašini uz odgovarajući tekst.

• Javnu apstraktnu metodu servisiraj koja nema ulaznih argumenata a vraća boolean vrednost.

Napraviti javnu klasu Ratrak u paketu masina koja nasleđuje aps. kl. MasinaZaCiscenjeSnega i sadrži:• Implementiranu javnu apstraktnu metodu servisiraj koja proverava da li je datum servisa prošao. Ako

jeste, metoda zaista “servisira” mašinu tj. postavlja vrednost atributa vremeServisa na datum koji je godinu dana kasnije u odnosu na datum servisa koji je tu trenutno upisan i vraća true. Ako nije, metoda samo vraća false.

Napraviti javnu klasu Grtalica u paketu masina koja nasleđuje aps. kl. MasinaZaCiscenjeSnega i sadrži:• Implementiranu javnu apstraktnu metodu servisiraj koja proverava da li je datum servisa prošao. Ako

jeste, metoda zaista “servisira” mašinu tj. postavlja vrednost atributa vremeServisa na datum koji je godinu dana kasnije u odnosu na trenutni datum i vraća true. Ako nije, metoda samo vraća false.

Napraviti javnu klasu SlužbaZaPuteve u paketu masina.služba koja ima:• Privatni atribut mašina koji predstavlja niz objekata klase MasinaZaCiscenjeSnega.• Javni konstruktor koji kao ulazni argument prima broj mašina i inicijalizuje niz mašina na taj kapacitet

ako je uneti broj veći od nule. U suprotnom, kapacitet se postavlja na 35.• Javnu metodu koja kao ulazni parametar prima objekat klase MasinaZaCiscenjeSnega i unosi ga u

niz na prvo slobodno mesto. Mesto u nizu je slobodno ako element na tom mestu ima NULL vredost.Ako u nizu više nema mesta, metoda samo baca PROVERAVANI izuzetak.

• Javnu metodu koja servisira sve mašine pozivanjem metode servisiraj. Takođe, potrebno je u tekstualni fajl “servis.txt” upisati podatke samo onih mašina koje su tom prilikom zaista “servisirane”.

• Javnu metodu koja kao nema ulaznih argumenata a vraća niz objekata klase MasinaZaCiscenjeSnega. Ovaj novi niz se formira tako što se kopiraju svi elementi iz postojećeg niza mašina ali tako da prvo budu uneti svi objekti klase Ratrak, a onda i svi objekti klase Grtalica. Uz to, ovaj novi niz ne sme da ima praznih mesta tj. elemenata koji imaju NULL vrednost.

Zadatak 2 – februar 2012

Napraviti javnu klasu Reka u paketu vodostaj.reka koja može da se serijalizuje i ima:• Privatni atribut naziv koji predstavlja naziv reke. Početna vrednost je NULL.• Privatni atribut datumMerenja koji predstavlja datum merenja vodostaja (klasa GregorianCalendar).• Privatni atribut vodostaj (realan broj) koji predstavlja nivo vode u metrima. Početna vrednost je -1.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za naziv su null i

Stringovi kraći od dva znaka, vodostaj mora biti nula ili veći, a datum mora da bude različit od null i pre trenutnog datuma. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

• Redefinisanu metodu toString koja vraća String sa svim podacima o reci uz odgovarajući tekst.

Napraviti vizuelnu klasu VodostajGUI u paketu vodostaj koja izgleda kao na slici 16. Padajuća lista za dan bi trebalo da sadrži vrednosti od 1 do 31, za mesec od 1 do 12 a za godinu od 2010 do 2015. Naslov prozora bi trebalo da bude “Vodostaj”, i trebalo bi onemogućiti da mu se menjaju dimenzije.

• Klasa VodostajGUI bi trebalo da sadrži privatni atribut reke koja predstavlja niz objekata klase Reka.Niz odmah inicijalizovati na kapacitet od 100 elemenata.

• Kada se pritisne dugme “Unesi”, preuzimaju se vrednosti svih polja za unos na ekranu, pravi se noviobjekat klase Reka, puni se ovim podacima i unosi se u niz na prvo slobodno mesto. Mesto u nizu jeslobodno ako element na tom mestu ima vrednost NULL.

• Kada se pritisne dugme “Prikaži sve”, potrebno je u editoru ispisati sve podatke o svakoj reci iz niza.U prvom redu ispisati reč “VODOSTAJ” a onda podatke o svakoj reci ispisati u posebnom redu. Obratiti pažnju na prazna mesta u nizu. Na kraju ispisati i naziv reke sa najvišim vodostajem.

• Kada se pritisne dugme “Izveštaj”, potrebno je u tekstualni fajl “izveštaj.txt” upisati podatke o onim rekama iz niza u kojima je vodostaj u odnosu na prethodno merenje porastao za više od metar. Računati na to da se u nizu nalaze podaci iz samo dva poslednja merenja za svaku reku. Sam redosled ovih podataka o merenju u nizu nije definisan. Obratiti pažnju na prazna mesta u nizu.

Slika 16: Zadatak 2 - februar 2012

Zadatak 1 – jun 2012

Napraviti javnu klasu TwitterPoruka u paketu com.twitter.poruke koja ima:• Privatni atribut korisnik koji predstavlja naziv korisnika koji je objavio poruku.• Privatni atribut poruka koji predstavlja tekst poruke.• Privatni atribut vreme koji predstavlja datum i vreme objavljivanja poruke (klasa GregorianCalendar)• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribut korisnik su

NULL i prazan String, a poruka ne sme biti NULL i može imati najviše 140 znakova. Vreme mora da bude neki datum u prošlosti i ne sme da bude NULL. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je baciti izuzetak sa odgovarajućom porukom.

• Redefinisanu metodu toString klase Object koja koja vraća jedan String u kome se nalaze svi podaciporuke u formatu “KORISNIK_####_VREME_####_PORUKA_####”.

Napraviti javni interfejs TwitterAPI u paketu com.twitter.api koji ima:• Javnu metodu vratiPoruke koja kao ulaz prima naziv korisnika i vraća listu objek. TwitterPoruka.• Javnu metodu vratiPoruke koja kao ulazni parametar prima ceo broj koji predstavlja maksimalan broj

poruka i String koji predstavlja tag, a ne vraća ništa.• Javnu metodu unesi koja kao ulaz dobija naziv korisnika i tekst poruke, a ne vraća ništa.

Napraviti javnu klasu Twitter u paketu com.twitter koja implem. interfejs TwitterAPI i ima:• Privatni atribut poruke koji predstavlja listu objekata klase TwitterPoruka.• Javni konstruktor koji inicijalizuje listu poruka.• Implementiranu metodu unesi koja novu poruku unosi na kraj liste. Pre unosa podesiti vreme

objavljivanja poruke na trenutno vreme. Kad se izvrši unos, potrebno je na ekranu ispisati sve poruke iz liste.

• Implementiranu metodu vratiPoruke koja kao ulazni parametar prima ceo broj koji predstavlja maksimalan broj poruka i String koji predstavlja tag. Metoda u tekstualni fajl “pretraga.txt” upisuje tekst svih poruka koje sadrže dati tag. Tag se nalazi u tekstu poruke i počinje znakom # a završava se praznim mestom (tag u sebi ne sme da sadrži prazna mesta). Primer: ako je unet tag “programiranje” onda se u tekstu poruke traži “#programiranje_”. Maksimalan broj poruka koje treba upisati u fajl je dat kao ulazni parametar - ako ih ima više od toga, prekobrojne poruke se ne upisuju.

• Implementiranu metodu vratiPoruke koja kao ulazni parametar prima naziv korisnika i vraća listu objekata klase TwitterPoruka u kojoj se nalaze samo poruke koje je objavio taj korisnik i to u toku prethodnog meseca (u odnosu na trenutni datum). Poruke u listi treba da budu poređane tako da na početku budu najstarije poruke pa tek onda novije. Obratiti pažnju na situaciju kada je trenutno januar mesec.

Zadatak 2 – jun 2012

Napraviti javnu apstraktnu klasu Poruka u paketu poruke koja ima:

• Privatni atribut pošiljalac koji predstavlja identifikator korisnika koji je poslao poruku (String).• Privatni atribut primalac koji predstavlja identifikator korisnika koji treba da primi poruku (String).• Privatni atribut poruka koji predstavlja tekst poruke.• Privatni atribut vreme koji predstavlja datum i vreme slanja poruke (klasa GregorianCalendar)• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute pošiljalac i

primalac su NULL i prazan String, a poruka i vreme ne smeju biti NULL. U slučaju unosa ovih nedozvoljenih vrednosti potrebno je baciti izuzetak sa odgovarajućim tekstom.

• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze neki podaci poruke uformatu “POŠILJALAC_####_PRIMALAC_####_PORUKA_####”.

Napraviti javnu klasu SMS u paketu poruke.sms koja nasleđuje klasu Poruka i ima:• Redefinisanu metodu setPoruka koja ne dozvoljava unos NULL Stringa, ali ni Stringa dužeg od 170

znakova. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak sa odgovarajućim tekstom.

Napraviti javni interfejs SMSAPI u paketu poruke.sms.api koji ima:• Javnu metodu vratiPoruke koja kao ulaz prima identifikator korisnika i vraća listu objek. Poruka.• Javnu metodu arhivirajPoruke koja nema ulazne parametre i ne vraća ništa.

Napraviti javnu klasu SMSCentrala u paketu poruke koja implem. interfejs SMSAPI i ima:• Privatni atribut poruke koji predstavlja niz obj. klase Poruka.Niz inicijalizovati na 1000 mesta.• Javnu metodu unesi koja kao ulaz prima objekat klase Poruka i unosi ovu poruku na prvo slobodno

mesto u nizu. Mesto je slobodno ako je element na tom mestu NULL. Kad se izvrši unos, potrebno je u tekstualni fajl “backup.txt” upisati sve poruke iz niza (preskočiti NULL elemente tj. prazna mesta).

• Implementiranu metodu arhivirajPoruke koja u data fajl “arhiva.dat” unosi sve poruke iz prošle godine i to u formatu <posiljalac><primalac><poruka>. Sve arhivirane poruke je potrebno izbrisati iz niza.

• Implementiranu metodu vratiPoruke koja vraća listu onih poruka u kojima se pojavljuju makar dva smajlija. Poruke u listi treba da budu poređane tako da na početku budu najstarije poruke pa tek onda novije. Pri tome, zna se da se smajli piše isključivo na ovaj način: :)

Zadatak 1 – septembar 2012

Napraviti javnu klasu Pretplatnik u paketu telefoni.pretplatnik koja ima:• Privatni atribute imePrezime.• Privatni atribut telefon (koji je ceo broj).• Privatni atribut adresa.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute

imePrezime i adresa su null i stringovi kraći od pet znakova. Pored toga, mora se proveriti da telefonbude broj veći od nule i da ima makar pet cifara. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

• Redefinisanu metodu toString klase Object koja koja vraća jedan String u kome se nalaze svi podacipretplatnika.

Napraviti javni interfejs InfoServis u paketu telefoni.imenik koji ima :• Javnu metodu dodajPretplatnika koja kao ulaz dobija 3 parametra: ime i prezime pretplatnika,

telefon i adresu, i ne vraća ništa.• Javnu metodu nadjiPretplatnika nema parametre, a vraća listu objekata klase Pretplatnik.• Javnu metodu vratiInformator koja kao ulazni parametar dobija niz Stringova i ne vraća ništa.

Napraviti javnu klasu Info988 u paketu telefoni koja implementira interfejs InfoServis i ima:• Privatni atribut imenik - listu objekata klase Pretplatnik.• Javni konstruktor koji inicijalizuje listu.• Implementiranu javnu metodu dodajPretplatnika koja dodaje pretplatnika u imenik i to na početak.

Ako je bilo koji od unetih argumenata null, ne vrši se unos u imenik već se u tekstualni fajl “log.txt” upisuju vrednosti unetih parametara i poruka da je nastala greška.

• Implementiranu javnu metodu nadjiPretplatnika koja sa tastature učitava adresu pretplatnika (ili neki njen deo), pronalazi sve pretplatnike koji su na toj adresi ili u čijoj adresi se nalazi ono što je uneto sa tastature (kao deo te adrese) i vraća ih kao listu.

• Implementiranu javnu metodu vratiInformator koja kao ulazni parametar dobija niz Stringova (koji sadrži nazive svih ulica - svaki element niza je naziv jedne ulice) i u tekstualni fajl "imenik988.txt" upisuje podatke o telefonskim pretplatnicima i to grupisane po ulicama (upišu se svi pretplatnici iz jedne ulice, pa svi pretplatnici iz sledeće ulice itd.). Adresa pretplatnika je uneta u formatu “ULICA BROJ”.

Zadatak 2 – septembar 2012

Napraviti javnu klasu Klijent u paketu klijenti.domen koja ima:• Privatni atribut ime.• Privatni atribut prezime.• Privatni atribut telefon (telefon je dat kao String vrednost).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za sve atribute su null

i prazni Stringovi (""). Pored toga, telefon mora da ima makar osam znakova i da je prvi znak nula ('0') jer telefon sadrži i pozivni broj. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

• Redefinisanu metodu toString klase Object koja vraća String sa svim podacima o klijentu.

Napraviti javnu vizuelnu klasu KlijentiGUI u paketu klijenti.gui koja izgleda kao na slici 17. Naslov prozorabi trebalo da bude “Klijenti”, bela površina na ekranu bi trebalo da bude editor za tekst, a padajuća lista bi trebalo da ima stavke "VIP" i "Obični".Staviti da dimenzija forme ne može da se menja.

• Klasa KlijentiGUI treba da sadrži privatni atribut vipKlijenti koji predstavlja listu objekata klase Klijent i privatni atribut obicniKlijenti koji takođe predstavlja listu objekata klase Klijent. Obe liste odmah inicijalizovati.

• Kada se pritisne dugme “Prikazi”, potrebno je u editoru prikazati podatke o klijentima iz imenika. Akoje u padajućoj listi izabrana stavka "VIP", prikazati samo klijente iz liste vipKlijenti, a u suprotnom samo klijente iz liste obicniKlijenti. Na početku je, u prvom redu, potrebno ispisati tekst “VIP klijenti” ili “Obicni klijenti” u zavisnosti od toga koja lista se prikazuje.

• Kada se pritisne dugme “Ucitaj”, potrebno je da se podaci iz data fajla "klijenti.dat" učitaju i da se oba imenika popune ovim podacima. Podaci o svakom klijentu su dati u posebnom redu u formatu <ime><tab><prezime><tab><telefon><tab><status> pri čemu status predstavlja String koji može imati vrednost "VIP" ili "Obican". Ako je vrednost statusa "VIP", potrebno je uneti klijenta u listu vipKlijenti a u suprotnom u listu obicniKlijenti.

• Kada se pritisne dugme “Sacuvaj”, potrebno je da se u tekstualni fajl "klijenti.txt" upišu podaci o svimklijentima (iz oba imenika) i to tako da budu grupisani po pozivnom broju (upišu se svi klijenti sa jednim pozivnim brojem, pa svi klijenti sa sledećim pozivnim brojem itd.). Zna se da se pozivni brojevi kreću od 010 do 039 (010, 011, 012,..., 038, 039) i da su u okviru atributa telefon dati kao prva tri znaka.

Slika 17: Zadatak 2 - septembar 2012

Zadatak 1 – oktobar 2012

Napraviti javnu klasu Preduzece u paketu preduzece koja može da se serijalizuje i koja ima:• Privatne atribute PIB (ceo broj), naziv, datumRegistracije (String) i telefon (telefon je dat kao String).• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute naziv i

telefon su null i Stringovi kraći od tri znaka. Pored toga, mora se proveriti da telefon počinje znakom za nulu ('0'), i da je PIB ceo broj veći od nule i da je datum registracije neki trenutak pre trenutnog datuma i vremena. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

• Redefinisanu metodu toString klase Object koja koja vraća jedan String u kome se nalaze svi podacipreduzeća uz odgovarajući tekst.

Napraviti javni interfejs RegistarPreduzeca u paketu preduzece.registar koji ima:• Javnu metodu dodajPreduzece koja kao ulazne argumente dobija PIB, naziv preduzeća, datum i

telefon, a ne vraća ništa.• Javnu metodu nadjiPreduzece koja kao ulazni argument dobija deo naziva, a vraća listu objekata

klase Preduzece.

Napraviti javnu klasu ZuteStrane u paketu preduzece koja implementira interf. RegistarPreduzeca i ima:• Privatni atribut imenik koji predstavlja niz objekata klase Preduzece.• Javni konstruktor koji inicijalizuje niz na kapacitet 1000. • Javni konstruktor koji inicijalizuje niz na kapacitet koji se unosi kao ulazni parametar.• Javni konstruktor koji kao ulazni parametar dobija naziv fajla koji sadrži serijalizovane objekte klase

Preduzece. Konstruktor iz ovog fajla učitava podatke o preduzećima i puni niz. Pri inicijalizaciji niza podrazumevati da fajl može da sadrži podatke o maksimalno 1000 preduzeća.

• Implementiranu javnu metodu nadjiPreduzece koja pronalazi svako preduzeće koje ima kao deo naziva String koji je unet kao parametar. Sve podatke o preduzećima koja su pronađena je potrebnoupisati u tekstualni fajl "pronadjeno.txt" i uneti u listu koja se vraća kao povratna vrednost metode. Ako nije pronađeno nijedno preduzeće, metoda baca izuzetak. Obratiti pažnju na prazna mesta u nizu (element na tom mestu je NULL).

• Implementiranu javnu metodu dodajPreduzece koja dodaje novo preduzeće u niz i to po sledećem principu. Ako je preduzeće registrovano pre više od deset godina, unosi se na prvo slobodno mesto u prvoj polovini niza, a u suprotnom na prvo slobodno mesto u drugoj polovini niza. Mesto je slobodno ako je element na tom mestu NULL.

Zadatak 2 – oktobar 2012

Napraviti javnu klasu Preduzece u paketu pravna_lica koja ima:

• Privatne atribute PIB (ceo broj), naziv, telefon (ceo broj) i adresa.• Odgovarajuće javne get i set metode za ove atribute. Nedozvoljene vrednosti za atribute naziv i

adresa su null i prazni Stringovi (""). Pored toga, PIB mora da bude ceo broj veći od nule. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

Napraviti javnu klasu Racun u paketu pravna_lica.prodaja koja ima:• Privatni atribut datum koji predstavlja datum izdavanja računa.• Privatni atribut iznos (npr. 23.4)• Privatni atribut preduzece koji predstavlja objekat klase Preduzece.• Odgovarajuće javne get i set metode za sva tri atributa. Datum i preduzeće ne smeju biti null, a

iznos mora biti veći od nule. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.

Napraviti vizuelnu klasu ProdajaNaVelikoGUI u paketu pravna_lica.prodaja koja izgleda kao na slici 18. Naslov prozora bi trebalo da bude “Prodaja na veliko” a potrebno je namestiti da se dimenzija prozora ne može promeniti..

• Klasa ProdajaNaVelikoGUI bi trebalo da sadrži privatni atribut racuni koji predstavlja niz objekata klase Racun. Napraviti javni konstruktor koji inicijalizuje ovaj niz na kapacitet 100 elemenata.

• Kada se pritisne dugme “Obrisi”, preuzimaju se podaci o PIB-u preduzeća iz polja za unos i brišu se svi računi iz niza u kojima preduzeće ima taj PIB. Pored toga, briše se i sadržaj svih polja za unos.

• Kada se pritisne dugme “Dodaj”, preuzimaju se podaci o preduzeću i iznosu iz polja za unos, pravi se novi račun sa ovim podacima i današnjim datumom i dodaje se u niz na prvo slobodno mesto. Mesto u nizu je slobodno ako je vrednost elementa na tom mestu null. Ako u nizu nema slobodnih mesta, baciti izuzetak.

• Kada se pritisne dugme “Sacuvaj”, svi podaci o računima (uključujući i podatke o preduzećima) koji su ostvareni prethodnog meseca se upisuju u data fajl "racuni.out" u formatu: <dan><tab><mesec><tab><godina><tab><PIB><tab><naziv><tab><adresa><tab><telefon><tab><iznos> pri čemu su dan, mesec i godina podaci iz datuma kupovine.

Slika 18: Zadatak 2 - oktobar 2012

Zadatak 1 – oktobar 2 2012

Napraviti javnu apstraktnu klasu SmestajnaJedinica u paketu smestaj koja ima:• Privatni atribut datumOslobađanja koji predstavlja datum od kojeg će smeštajna jedinica biti

slobodna (koristiti klasu GregorianCalendar).• Privatni atribut brojKreveta.• Odgovarajuće javne get i set metode za ove atribute. Broj kreveta mora biti jedan ili više, a datum ne

sme da bude null. U slučaju unosa nedozvoljenih vrednosti baciti izuzetak.• Javnu apstraktnu metodu imaKuhinju koja nema ulaznih parametara a vraća boolean vrednost.

Napraviti javnu klasu Soba u paketu smestaj koja nasleđuje klasu SmestajnaJedinica i ima:

• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze svi podaci o sobi uz odgovarajući tekst i napomenu da je u pitanju obična soba.

• Implementiranu javnu apstraktnu metodu imaKuhinju koja uvek vraća false.

Napraviti javnu klasu Apartman u paketu smestaj koja nasleđuje klasu SmestajnaJedinica i ima:• Redefinisanu metodu toString klase Object koja vraća String u kome se nalaze svi podaci o

apartmanu uz odgovarajući tekst i napomenu da je u pitanju apartman.• Implementiranu javnu apstraktnu metodu imaKuhinju koja uvek vraća true.

Napraviti javnu klasu Hotel u paketu turizam koja ima:• Privatni atribut smestaj koji predstavlja listu objekata klase SmestajnaJedinica. (NAPOMENA: u listi

će se zapravo nalaziti objekti klasa Soba i Apartman). Listu odmah inicijalizovati.• Javni konstruktor koji kao ulazne parametre dobija ukupan broj smeštajnih jedinica. Na osnovu ovog

podatka, konstruktor inicijalizuje i popunjava listu tako da četvrtinu smeštajnih jedinica predstavljaju dvokrevetne sobe, četvrtinu trokrevetne sobe, a preostalu polovinu četvorokrevetni apartmani. Datum oslobađanja za svaku sobu i apartman bi trebalo da bude trenutni datum.

• Javnu metodu ištampajSmestaj koja kao ulaz prima boolean vrednost. Ako je uneta vrednost TRUE, metoda u tekstualni fajl “sobe.out” upisuje podatke o svim smeštajnim jedinicama koje imaju kuhinju i to u posebnom redu za svaku. Ako je uneto FALSE radi se isto,samo za smešt. jedinice bez kuhinje.

• Javnu metodu rezerviši koja kao ulazne parametre dobija željeni broj kreveta, datum do kojeg turistaželi da ostane u hotelu (GregorianCalendar) i indikator da li turista želi apartman ili sobu (char vrednost 'A' ili 'S'). Na osnovu unetih podataka, metoda bi trebalo da pronađe sobu tj. apartman iz ponude hotela koji ima odgovarajući broj kreveta i koji je slobodan (datum oslobađanja je pre trenutnog datuma). Metoda bi nakon toga trebalo da rezeviše smeštajnu jedinicu i to tako da postavi da datum oslobađanja bude uneti datum. Ako nije pronađena odgovarajuća smeštajna jedinica, metoda baca PROVERAVANI izuzetak.

Zadatak 2 – oktobar 2 2012

Napraviti javnu klasu Bungalov u paketu naselje koja može da se serijalizuje i ima:• Privatni atribut broj koji predstavlja redni broj bungalova.• Privatni atribut ime koji predstavlja ime i prezime turiste koji trenutno odseda u tom bungalovu.• Privatni atribut zauzetDo koji predstavlja datum do kojeg će bungalov biti zauzet

(GregorianCalendar).• Privatni atribut pogledNaMore koji ima vrednost TRUE ako bungalov gleda na more, a FALSE

inače.• Odgovarajuće javne get i set metode za ove atribute. Broj sobe mora biti veći od nule, datum mora

da bude posle trenutnog datuma, a ime ne sme da bude null i mora da bude duže od pet znakova. Uslučaju unosa nedozvoljenih vrednosti baciti izuzetak.

• Redefinisanu metodu toString koja vraća String u kome se nalaze svi podaci o bungalovu u formatu “Broj: ___ Ime turiste:____ Zauzet do:____ Pogled na more:____”.

Napraviti vizuelnu klasu TuristickoNaseljeGUI u paketu naselje.gui koja izgleda kao na slici 19, a kada se poveća kao na slici 20. Centralni deo ekrana čini editor, a padajuća lista bi trebalo da sadrži vrednosti Da i Ne. Naslov prozora bi trebalo da bude “Bungalovi”.

• Klasa TuristickoNaseljeGUI bi trebalo da sadrži privatni atribut bungalovi koji predstavlja listu objekata klase Bungalov. Ovu listu je potrebno odmah inicijalizovati.

• Kada se pritisne “Sacuvaj”, serijalizovati sve podatke o slobodnim bungalovima u fajl “sb.out”.• Kada se pritisne dugme “Rezervisi”, preuzeti sa ekrana podatke: ime i prezime, datum (dan, mesec i

godina) i da li želi bungalov sa pogledom na more ili ne. Nakon toga, pokušati rezervaciju odgovarajućeg slobodnog bungalova (atribut “zauzetDo” sadrži datum pre trenutnog datuma). Rezervacija se vrši tako što se u slobodan bungalov unesu podaci o imenu i prezimenu kao i podaci o datumu do kada će biti zauzet bungalov (preuzet sa forme). Nakon uspešne rezervacije, ispisati broj bungalova u editoru.

• Kada se pritisne dugme “Ucitaj”, potrebno je iz fajlova čiji su nazivi uneti u editor (svi nazivi su u istom redu ali su odvojeni praznim mestom) učitati (deserijalizovati) sve podatke o bungalovima, dodati ih u listu i prikazati u editoru i to tako da se podaci o svakom bungalovu nalaze u posebnom redu.

Slika 19: Zadatak 2 - oktobar 2 2012

Slika 20: Zadatak 2 - oktobar 2 2012