Laslo Kraus - Rešeni Zadaci Iz Programskog Jezika JAVA 2.izdanje, 2007++

You might also like

Download as pdf
Download as pdf
You are on page 1of 260
ee ee i NE ReSeni zadaci iz programskog jezika Java Laslo Kraus Ispravke uz drugo izdanje [ Mesto [ Pogresno | Ispravno . 4 linearna 4 linearna strana: 17 podenein xa-bfe Rees xa-ofh if (b < 0) { a = -a/ b = -b; } af (b < 0) { a = -a; b = -b; } strana: 58 for (int i=0; i < maxProst && long absA = a 0) wn && a > O}) rez t= "+"; strana: 61 red: 7 5 uble rastojanje (Krug k) ublic double rastojanje (Krug k) strana: 67 red: | 9 protected String private String strana: 71 red: | 6 [ounte ter = Citaj.Int (); double ter = Citaj.Double (); Figura() Figura({) it i strana: 75 preieees | one postavi () postavi() Of), Pt) oO), Pt) citaj(), toString!) citaj(), toString() strana: 78 strana: 79 strana: 87 red: f 12 strana: 87 red: f 8 strana: 112 red: f 20 strana: 116 red: | 20 + Tacka () +x, FO ~tem!+ toString + pisiNiz(} public double x, Y¥, Z; { } [import verizan; at[i] [i] ouble intenzitet += m2.mat[i] [jf]; 142.0 14.0 16.0 18.0 2300 25.0 27.0' 29.0 34.0 36.0 38.0 40.0 Tacka (1 xO, ¥O toString (}) toString () private double *, Y, Z; ublic double intenzitet () { } import verizan.*; mat (ij [j] -= m2.mat[i][jl]+ 10.0 10.0 10.0 10.0 19.0 £90 19.0 19.0 28.0 28.0 28.0 28.0 strana: 126 red: | 14 teasivan program program strana: 137 = Zodatak 6 Bf} [ Treba izbaciti. » strana: 146 ouble a, b; char vrs; double a, b; red: f 19 strana: 153 = <> Zbizka <> iterator mr] <> fq--n rrr r roma < Zbizka iterator Laslo Kraus RESENI ZADACI PROGRAMSKOG JEZIKA Java | IZ AKADEMSKA MISAO Beograd, 2007 Laslo Kraus RESENI ZADAC! IZ PROGRAMSKOG JEZIKA JAVA Drugo, preradeno izdanje Recenzenti Dr Igor Tartalja Dr Jelica Proti¢ lzdavaé AKADEMSKA MISAO Bul. kralja Aleksandra 73, Beograd Stampa Planeta print, Beograd Tiraz 500 primeraka ISBN 86-7466-231-1 NAPOMENA: Fotokopiranje ill umnoZavanje na bilo koji nacin ili ponovno objavijivanje ove knjige - u celini ili u delovirna - nije dozvoljeno bez prethodne izriéite saglasnostii pismenog odobrenja izdavaca, ote ar augers Se : eh gates ati Predgovor Ova zbirka zadataka je pomoéni udzbenik za uéenje programiranja na jeziku Java, Zbirka je namenjena za upotrebu u fakultetskoj nastavi ali moze da se koristi i za samostalno produbljivanje znanja iz progra- miranja. ReSenja svih zadataka su potpuna u smislu da prilozeni programi mogu da se izvrSavaju na racunani, Pored samih tekstova programa prilozeno je samo malo objaSnjenja, prvenstveno u obliku slika i formula, Oéekuje se da ce izvodad nastave dati dodatna usmena objaSnjenja sluSaocima, Uz malo vise napora zadaci mogu da se shvate i samostalno. Uz svaki program dat je i primer izvrSavanja da bi se olakSalo rae zumevanje rada programa. Kroz zadatke, pored elemenata samog jezika, prikazani su osnovni principi objektno orijentisanog progra- miranja (saknvanje podataka, ponovno koriséenje koda, nasledivanje | polimorfizam), konkurentnog pro- gramiranja (rad $ nitima) i izrade programa zasnovanih na grafickoj korisniékoj povrsi (rad s prozorima), Prikazani su i najéeSce kori§¢eni postupei u programiranju: pretrazivanje i uredivanje nizova, obrada zna kovnih podataka, rad s bitovima, rad s dinamitkim strukturama podataka (kao §to su liste i stabla) f obrada datoteka. Posebna paZnja posvecena je i ingenjerskim aspektima programiranja: preglednosti, rae zumijivosti i cfikasnosti. Izvorni tekstovi svih programa iz ove zbirke mogu da se preuzmu preko Interneta sa adres galeb.etf.bg.ac.yu/~kraus/knjige/. Svoja zapazanja Citaoci mogu da upute elektronskom po- $tom na adresu krausGetf.bg.ac.yu. Beograd, januar 2007. Laslo Kra Sadriaj NOV asconcoieskesecddaerinictscesalens etocaaloer ease lcnaen eae ee, cane SMUT tigen mseensnemnnsnenan npn esas maphiniaannser sneer anteneree SEE —— Preporutena literati cscs. cs.cc.scsccmmecinatsnseicsssunenmcmeenmenan ens seet 1 Operatori ......... Zadatak 1.1 Ispisivanje teksta na glavnom izlazu...........0000ur coe aucune” waste 1 0 Zudatak 1.2 IzraCunavanje zbira dva cela broja..........eeceeceeer | ae i Zadatak 1.3 Izratunavanje obima i povrsine krupa ............c00ee- nn = Seer Zodatak 1.4 Izratunavanje povréine trougla —...............-..-. Siteneenns greet Zudatak 1.5 Pakovanje i raspakivanje vremena ..............0.0c1cee er ; i. Zadatuk 2.1 Nalagenje najmanjeg od tri broja .........c00..c0eceneeeeeeeee paeterAe ee astucetiet 15 Zadatak 2.2 Urediv PE OT CRI cc eicccercsetchvevcetiascn resis Somme nd : "G\Progcam Files\ Jawa jdkl, 3.0\bin\ java. exe” —c lesspach "Cr \Preogteam Files y s ‘ " Directory ; "C:\Program Files) Xinox Softvace\dCceatorVaLe) ayheojecns\ Pomeavl ; eDetaules—|a| \l Porsdrevy svima! ; Gul Gutput | 3a Tak vst oa es 1 Operator Zadatak 1.1 Zadatak 1.2 /zracunavanje zbira dva cela broja Napisati na jeziku Jave program koji proéita dva cela broja s glavnog ulaza raéunara, izraéuna njihoy zbir i ispiSe rezultat na glavnom izlazu ra€unara. ReSenje: // Zbirl.java - Izrac¢unavanje zbira dva cela broja. public class %birl ({ public static void main (String[] varg) { System.out.print ("Unesite dva cela broja: "); int a = Citaj.Int ({), Bb = Citaj.Int ()? int c =a + b; System.out.println ("Zbir unetih brojeva: " + c); § javac Zbirl.java $ java Zbirl Unesite dva cela broja:; 123 -45 2bir unetih brojeva: 78 Citanje podataka s glavnog ulaza (nije standardno): Preskacu se beline i Cita se do sledeceg belog znaka: Citaj-Byte() byte Citaj.Short () short Citaj.Int() int Citaj.Long({) long Citaj.Flcoat () float Citaj}.Double() double Citaj.Boolean () boolean Citaj.Char () char (prvi nebeli znak) Citaj.String() String (jedna rec) Bez preskakanja belih znakova: Citaj.getch () char (prvi znak, ukljuéujuci t bele znakove) Citaj.Line() String (do kraja reda, ukljucujuci i bele znakove) Preskakanje svih znakova do kraja reda: Citaj.getNL{) Ispitivanje da li je protitan znak za kraj: Citaj-.end() boolean Zadatak 1.2 1 Operatori eae 10 Zadatak 1.3 JIzra¢unavanje obima f povrsine kruga Napisati na jeziku Jave program koji procita polupretmik kruga s glavnog ulaza raéunara i ispi$e obim i povrsinu tog kruga na glavnom izlazu radunama. ReSenje: f/f Krugl.java - Izracunavanje obima i povrsine kruya. public class Krugl { public static void main (String[] varg) { System.out.print (|"Poluprecnik? "); double r = Citaj.Double (); System.out.printin ("Obim =" + (2*r*Math, PI) ); System,out.printin ("Povesina =" + (ge*r*Math.PI)); | $ javac Krugl.java § java Krugl Poluprecnik? 10 i Obim = 62.83185307179586 Povrsina = 314.1592653589793 1 Operatori Zadatak 1.3 te ee a cia a Zadatak 1.4 /zra€unavanje povrsine trougla Napisati na jeziku Java program za izracunavanje povréine trougla u ravni ako su zadate koordinall mena. Potrebne podatke Citati s glavnog ulaza racunara, a rezultat ispisati na glavnom izlazu racuna ReSenje: Ate y,)s Brags ya); Cte.¥e), Lo a ee Pore ae = | a=y(tp—Xc) +Oa-Ye) » Ba Vee Ks) +e —¥.)" E =(a+h+c)/2, P= Js(s—a)(s—b)(s—c). f/f Trougaol.java - Povrdina trougla u ravni. public class Trougaol [ public static void main (String[] var Q ¢#f Temena trougla: System.out.printin ("Koordinate temena trougla"); System.out.print ("= prvo teme? "); double xA = Citaj.Double (), yA = Citaj.Double (); System.out.print ("- drugo teme? "); double xB = Citaj}.Double (), yB = Citaj.Double (); System.out.print ("- trece teme? "); double xC = Citaj.Double (), yC = Citaj.Double (); f/f Stranice double a = Math.sqrt (Math.pow (xB-xC, 2) + Math.pow (yB-yc, 2} v3 double b = Math.sqrt (Math.pow (xC-xA, 2) + Math.pow (yC-yA, 2)1)3 V)e tCrougla: > double c = Math.sqrt (Math.pow (xA-xB, 2) + Math.pow (yA-yB, 2 // Povréina trougla: double 5s = (a + b +e) / 2; double P = Math.sqrt (s * (s-a) * (s-b) * (s-c)); System,out.println ("“Povrsina trougla: " + P); [% javac Trougaol. java $ java Trougaol Koordinate temena trougla - prvo teme? 11 - drugo teme? 5 2 |- trece teme? 3 6 Povrsina trougla: 9. 000000000000007 Zadatak 1.4 Zadatak 1.5 Parkovarie i raspakivanje vremena Vreme se zadaje pomocu broja godina, meseci, dana, sati i minula Mipiiatl (i perikw fave program za pakovanje i obmuti proces za raspakivanje podataka o vrement Wi jedinu }. biti eelobrejni promenijivu Potrebne podatke Citatis glavnog ulaza raéunara, a rezultate (ipiivel fa glavnom) (elaea radunara Resenje: | minut: 0-59 6 bitova (0- 63) | sat; 0-23 5 bitova (0-31) |dan; 1-31 5 bitova (0-31) mesec: -]2 4 bita (0-15) godina: ll bitova (0 - 2047) 31 bit (ne koristi se bit za predznak) i ee) 5 Hatley ee kK Geir el TE bleed ea ee are godina mesee cian Jat wridnitel vreme.java - Pakovanje i raspakivanje vremena. public class Vreme | public static void main (String[] varg) { System.out.print ("Dan, mesec, godina? "); byte dan = Citaj.Byte {), mesec = Cita).Byte (); short godina = Citaj.Short (); System.out.print {"Sat, minut? "); byte sat = Cita}.Byte (), minut = Cita}.Byte (); int vreme = gqodina << 20 | mesec << 16 | dan << 11 | sat << 6 | minut; System.out.printlin ("Pakovano: " + yvreme); godina = (short) (vreme >>> 20 3 mesec = (byte) (vreme >>> 16 & Ox0F); dan = (byte) (vreme >>> 11 & Oxif); sat = (byte) (vreme >>> 6 & Oxlf); minut = (byte) (vreme & Ox3f); sout.println ("Raspakovano: " + dan + “." + mesec + "." + godina + "oe + sat + "2" + minut); = 8 javac Vreme.java # java Vreme Dan, mesec, godina? 29 10 2004 nut? 14 59 Sat, Pakovano: 2102062011 Raspakovano: 29.10.2004 14:59 1 Operatori Zadatek 1.5 2 Naredbe 14 Zadatak 2.1 Nalazenje najinarjeg od th broja Napisati na jezikcu Jova program za nalazenje najmanjeg od ui cela bro ja, ReSenje: f/f minl.java - Najmanji od tri broja. public class Minl { ' public static void main {String[] vargq) | i; System.out.print ("Tri broja? "); ‘ int a = Citaj.Int (), b = Citaj.Int ()) ¢ = Citas.iInt (); i int min = a; if (b < min) min = if (te < min} min = 4; | System.out.printin {"Najmanji= " + min); § javac Minl. java § java Minl Tri broja? 4 2 7 Najmanji= 2 2 Naredbe Zadatak 2.1 Zadatak 2.2 Liredivanje tri broja Napisati na jezikuJava program za uredivanje tri nealna broja po neopadajuéem redosledu. ReSenje: fé Uredil,java - Uredivanje tri broja. public class Uredil | public static void main (String[] varg) [ System,out.print ("Tri broja? "); double a = Citeaj.Double (), b = Citaj.Deuble (), ¢ = Citaj.Double | i if (a > b) { dowble p = a; a = b; b = p; } 4 if (a > c) { double p = a; a = c; ¢ = p; } if ib > c) { dowble p = b; b = 6; ¢ = p; } ‘ System.nut.printin ("Uredjeno= "+at" "+ b+" " + of; i pp Atae x | 4 javac Uredil.java # java Uredil Tri broja? 8 2 5 Uredjeno= 2.0 5 -0 &.0 iD nisi eakiiha nhl hi M2 nls os a tana cai Zadatak 2.2 16 Zadatak 2.3 ReSavanje sistema od dve linearne jednadline Napisati na jeziku /ava program za regavanje sistem od dve lineirie jedaidine § dve nepoznate. ReSenje: Jednacine: Determinante: axt+by=c, Bult b 4 | ayx+b,y=c, lee = 0, — 9,0 le, 8 D. = = ¢\b, -c,b, yp, a, ¢ D, = nea ACy — Ay6, 1 Resen je D Ded y=, D De=D, =D, =0: neodredeno inate protivrecno ff LindJed.java - Regavanje sistema od dve linearne jednaéine. public class LinJed { public static void main System.out.print double al Citaj.Double {), bl syatem.out.print double a2 Citaj.Double (}, double pb al * b2 - a2 * bi, Dx = cl * b2 = bl, Dy = al * c2 el; if (D != 0) {i double x = Dx / D, = Dy / D; System. out.printin + Eb; System.out.printin + yi? else if (Dx==0 && Dy==0) (String{] varg) ("Koeficijenti prve jednacine? "); = Citaj.Double {), ¢1 = Citaj.Double (174 ("Koeficijenti druge jednacine? "); b2 = Citaj.Double (), c2 ( System.out.printin ("Sistem je neodredjen."); else me System.out.printin ("Sistem je protivrecan."); } javac Linded. java ) java LinJed Koeficijentl prve jednacine? 12 3 | Koeficijenti druge jednacine? 4 5 6 ja= -1.0 \y= 2.Q Is java LinJed Koeficijenti prve jednacine? 12 3 Koeficijenti druge jednacine? 2 4 6 Sistem je neodredjen. $ java LinJed Koeficijenti prve jednmacine? 12 3 ijenti druge jednacine? 24 5 stem je protivrecan. 2 Naredbe = Citaj.Double (); Zadatak 13 17 Zadatak 2.4 SeSavanje kvadratne jednacine Napisati oa jezikuJave program za reSavanje kvadratne jednacine, ReSenje: 7a KvadJed.java - ReSavanje kvadratne jednacine. public class Kvadded /{ public statie void main (String[] varg) [ Final int REALNI = 0, DVOSTRUKI = 1, // Sifre vrsta regenja jednadine. KOMPLERSNI = 2, LINEARNA = 3, POGRESNA = 4; System.out.print ("Koeficijenti kvadratne jednacine? "); double a = Citaj-Double (), b = Citaj.Double (}, ¢ = Citaj.Double (); double x1 = 0, x2 = Q, f/f Realni delovi korena. yl = 0, y2 = Q; f/f Imaginarni delovi korena. int vrsta; // Vrsta regsenja jednacine. if {a != 0) { double d=b*b-4* a * G} f/f Diskriminanta jednaéine. af (d > 0) { vrsta = REALNI;? xl = ([- b + Math.’sart (dj) / (2 * aj; x2 = f= b= Math.sqrt (d)y / (2 * a}; else if (d == 0} [ ; : vista = DVOSTRUKI; Jednadéina: ax? fbx +e + 0° a ea SERS Diskriminanta: d= 6° —4ac_ else | a‘ i 5 wresta = KOMPLEKSNI; Vrste reSenja: =b / (2 * ee eis: Math. sqrt (-d) /(2*a);| / raclicita xs realna: ha - yl 2 dvostruka a fede --realna ca cee Sea if (b l= 0) [ 3 razlicita Oo btiv=d wresta = LINEARNA; kompleksna tiger (a#0nd <0) xlo=-c / Bb; a nga be pee! : | — f Pnearne e S ble te) vrsta = POGRESNA; ~jednaging pce JS nema regenja eu (a=0A6=0) btvd — (g#0Ad>0) a Dee ; (a#0ad=0) ‘(as0A5 #0) if (vrsta == REALNI) System.out.printlin ("Realni koreni su "+ xl + "i “ + x2); else if (vrsta == DVOSTRUKT) System.out.printin ("Dvostruki realni koren je ees else if (vrsta == KOMPLEKSNI) System,out.println ("Kompleksni koreni su ("+ xl + "," + yl + Nar CM RBS Eee aes else if (vrsta == LINEARNA) System.out.println ("Resenje linearne jednacine je " + x1); else if (vrsta == POGRESNA) System,out.println ("Fodaci nemaju smisla!"); '$ java KradJed Koeficijenti kvadratne jednacine? 1 11 Kompleksni koreni su (-0.5,0.8660254037844396) i (-0.5,-0.8660254037844386) Fadatak 2.4 2 Naredbe aOR Se ec Zadatak 2.5 Tabeliranje vrednostf izvaza ’ Napisati na jeziku Java program Za tabeliranje vredmosti izraza xi-2r-2 ee al zasvako x,,, Ts tof ia} fel ie 2 3! n! i! d) g=2—+—+4+— +7... 4 ————_ a jp hor PT fook' 1 ft public class Izrazl | Public static void main (String[] System,out.print ("n? "); int r double 0; for {int i=l; i<= lL; i System.out.prin - Izracunavanye proizvoda uzastopnih prirodnih brojeva. public class Izraz2 | public static void main (String[] vara) Ssystem.out.print {*n? “); int r Cita leng s = 1; “ for (int i=l; i<= | # java Izraz2 System.out.printin ("s Ss); jn? 20 4 | $= 24329020081766400% Zadatak 2.5 ee ee Izrazj.java - [zracunavanje gbire Fakierisela public class Izraz3 [{ public static void main (String/| varg) System.qut.print ("n? ")f DAS fe oleae Ine 7 long s = 0; for (int f=1, i=l; i<=ny; jae) | { *= 1; os += ¢; Re } @ java [zraz3 ("s= " # gs), ne:.5 s= 153 Ssystem.out.printin Sazetije: for (int f=1, i=l; i<=n; sre(f*=i++)); d // Izgraz4.java - Izracumavanje slozZenog zbira. public class Izraz4 | public static void main (String[] varg) [ System.out.print ("n? "); int n = Citaj.Int (); double s = 0, ¢g¢ = 0;' long f = 1; for (int i=]; i<=n; i++) { £ *= i; # java Izraz4 n?s s= 111.39838092941542 izraz5.java - Izraéunavanje public clasa Izraz5 | public static void main (String[} System.out.print ("n? "); int a double s = 0; for (int f=0, g=0, i=l, z=1; F += i; = li += (double) f ( java Tzrazs | System.out.println ("s= " + n } s= 0, 767965367 fechovan 2.6 FE é | ; 4 Zadatak 2.7 Tabeliranje vrednosti slozenijih izraza Napisati na jeziku /ava program za tabeliranje vrednosti izraza a) s=xe ex's iex"= > b) s=x—-x? +x? -...4(-1)""'2x’ = Cn" ist isl za svako x,,, SxS X,,, 8 korakom Ax, ReSsenje: ff Tabela2.java - Tabeliranje vrednosti izraza. public class Tabela2 |[ public static void main (String[{] varg) { System.out.print ("n? "); int n = Citaj.Int (); System,.,out.print ("xmin, xmax, dx? "); double xmin = Cita}.Double (), xmax = Cita).Double (), dx = Citaj.Double (); System.out.print ("\n x s\n==sseeeeessenee=\p") 7 for (double x=xmin; x<=xmax; x+=dx) { double s = 0, p=1; § java Tabela2 for (int j=l; i<=n; i++) s += (p *= x); a? 5 System.out.format ("%8.3£%8.3£\n", x, si xmin, xmax, dx?-1 1 .25 x s SSS ree eee eee SSS -1.000 -1.000 -0.750 -0,530 -0.500 -0,344 b) -0.250 -0.200 // Tabela3.java - Tabeliranje vrednosti izraza. 0.000 0.000 0.250 0.333 public class Tabela? "0.500 0.969 public static void main ({String|) varg) [ 0.750 2,208 System.out.print ("n? *); imt n = Citaj-Int (); 1.000 5.000 System.out.print (“xmin, xmax, dx? “); double xmin = Citaj.Double (), xmax = Citaj.Double (), dx = Citaj.Double {); System.out.print ("“\a * §\ne2s=ssssenens===\n") } for {double x=xmin; x<=xmax; xtedx) | double s = 0, p = -1; is ae n? for (int i=l; i<=n; i++) s . | System.out.format ("%8.3£88.3£\n", x, s); |*#in, xmax, dx? -1 1 .25/) += (p t= -x); x & -1..000 -5..000 -0.750 -2.288 -6.500.. -6..969 -0.250~ =0. 332 0.060 0.000 0.250 9.200 0.500 0.344 0.750 0.530 F.000 1.000 SS el Zndatak a7 : 2 Naredbe | 22 Zadatak 2.8 /zracunavanje aritmeticxe srednje vrednosti i standardne devijacije niza brojeva Napisati na jeziku Java program za izraCunavanje aritmetiéke srednje vrednosti i standardne devijacije niza realnih brojeva. Program treba da Gita | obraduje nizove i ispisuje dobijene rezultate sve dok za broj elemenata niza ne protita nulu ili megativaa vrecinost. ReSenje: // Statist.java - Srednja vrednost i standardna devijacija Le niza reainih brojeva. public class Statist { public static void-main (String[] varg) [ System.out.print ("“\nBroj elemenata niza? "); int n = Citaj.Int (7 while (n > 0) { System.out.print ("Elementi niza? "); double s = 0, d = 0; for {int i=l; i<=n; i++) { double a = Citaj.Double (j; s += a; d += a* a; | s /= nj; d = Math.sqrt id / n - s * s); System.out.println {"Srednja vrednost: fb hy System.out.printin ("Standardna devijacija: “ + d); System.out.print ("\nBroj elemenata niza? "); n = Citaj.Int ()7 % java Statist Braj elemenata niza? 10 Elementi niza? 0123456789 Srednja vrednost: 4.5 Standardna devijacija: 2.8722813232690143 Broj elemenata niza? 10 Elementi niza? 44444555 55 Srednja vrednost: q.5 Standardna devijacija: 0.5 Broj elemenata niza? 10 Elementi niza? 0000 0 95999 5 Srednja vrednost: 4.5 Standardna devijacija: 4.5 Broj elemenata niza? 0 Zadatak 2.8 Zadatak 2.9 Znacaj redosieda sabiranja niza realnih brojeva Napisati na jeziku Java program koji izracunava § = La po opadajucem 1 po rastuce) vrednosti sabiraka za proizvoljan broj vrednosti parametra sr. Resenje: ff Redosled.java - Znaéaj public class Redosled | public static void main while (true) int n = Cita}.Int (n <= 0} break; float sl = 0; for float s2 = 0; for System.out.println if (int 1 (int i=n; "\em redosleda (String]|] (he nas in + Sabiranja reainih brojeva. varg) | si += sz + ix=n; 14+) i--) i>=]; + *\—e" + sl + \e™ + s2); | Prethodni program je pogodan 2: za obradu unapred pripremljenih podataka koji se Citaju ( | glavnog ulaza) iz : neke datoteke — nema a pre Citanja, a procitani podaci se kasnije ispis Redosled. pod [100 200 500 1000 2000 | 1000000 2000000 3000 10000 20000 50000 100000 200000 sogg000 0 500000 (% java Redosled >> 15; System.out.print (bit); if (i % 4 == 0) System.out.print (' '); dec <<= 1; ) System.out.printin (); § java Binar Decimalan broj? 1 Binaran broj: oo0¢ 0000 OCo0d Ob0i Decimalan broj? -1 Binaran broj: 1211 lili 1111 1111 Dacimalan broj? 32767 Binaran broj: OL22- D212 2222 Lili Decimalan broj? -32768 Binaran broj: io00 Gd00 b006 oD00 Decimalan broj? 1234 Bindran broj: 0000 6100 1101 0010 Decimalan broj? -765 Binaran broj: 21122 1161 0000 0011 Decimalan broj? s Zaclatak 2,11 2 Naredbe Zadatak 2.11 3 Ss z oa = m4 2p aide he an aE : Sa —— oS - = _— a ss a a = sone Ea ee i = = =e =. 28 Zadatak 3.1 TJabeliranje vrocdnosi poiinine Napisati na jeziku Java program za tabelipanje polinorme Koji j@ nodal pomocu niza koeficijenala, za sva- ko x,,, S¥5*,,, skorakom Ar man ee ReSenje: =i = 4 pix) -5 ax =ax4+a(3° &.*aaeo, =(..((a c+ a, x4, s)et...+ a, )x+ay ES ae i 3 = — ff Polinom.java - Tabeliranje polinoma zadatog pomoéy koeficijenata. public class Polinom | public static void main {String|] varg) [ System.out.print ii polinoma? "); int n = Citaj.Int (); float([] a = new float [n+l]; System,out.print ("Koeficijenti? "); for {int i=n; i2-=0; i=--) afi] = Cita}.Float (); System.,out.print ("xmin,xmax,dx? "); float xmin = Citaj.Floeat {), c Float._{), System.out.print \ . =\n")3 for (float x=xminj x<=xmax; x+=dx) fleat p = ai[n); for (int i=n-1; vetem. out .print System.out.print % java Polinom Red poline 3 3 Nizovi Zadatak 3.1 Zadatak 3.2 /zra¢unavanje srednje vrednosti elemenata niza Napisati na jeziku Java program za izra¢unavanje srednje vrednosti onih clemenata niza celih brojeva koji su deljivi sa tri. Program treba da proéita niz, izvr$i trazenu obradu, ispise dobijeni rezultat i ponavija prethodne korake sve dok za duzinu niza ne procita nedozvoljenu vrednost. ReSenje: // SrVredl.java - Srednja vrednost brojeva deljivih sa tri. public class SrVredl | public static void main (String[] varg) [ while (true) [ System,out.print ("n? "); int n = Citaj.Int (); if (n < 0) break; int[] a = new int [n]; System.,out.print ("A? "); for (int i=0; iQ; k--) Bik] += b[k=-1]; for (int k=0; k<=n; System.out.print (b[k++]+" "))? System.out.printlin (); $ java Binko nmax? 12 i ij 4 20 £32 |i 4641] [i 5-20 10 S.1 il 615 20 15 6 1 1 7 22 35 35-21 7.4 1 828 56 70 56 28 @ i I9 36 44 126 126 84 36 3 1 1 10 45 120 210 252 210 120 45 10 1 i il 55 165: 330 462 462 330 165.55 Li J 1 32 66 220 495 792 S24 752 495 220 66 I? I 3. ONizovi Zadatak 3.5 33 Zadatak 3.6 Nalazenje fuzije dva uredena niza Napisati na jeziku Java program za nalazenje fuzije dva niza celih brojeva koji su uredeni po neopada- jucem redosledu u tredi, na isti naéin ureden, niz. Program treba da obraduje proizvoljan broj kompleta ulaznih podataka. ReSenje: Ooh na- | Uporeduju se po jedan element iz oba niza, manji se stavija na kraj a:[o}+ est 7113 rezultata i uoéi se sledeci element ia:(4] niza kome je taj manji pripadao, Kad se dode do kraja jednog Ootea~ abet od nizova, ostali clementi drugog b: [a]: (i[3151 919] ez [=] niza se dodaju na kraj rezultata, ihe[*] ‘des H b) Rezultantni niz a) Podetni nizovi // Fuzija,java - Fuzija dva uredena niza celih brojeva. publie class Fuzija | public static void main (String[] varg) | while (true) | System.out.print ("na? "j; int na = Citaj.Int (); if {na < 0) break; int({] a = new int [na]; System.out.print ("A -? "); fer {int i=0; i afj)) { int b = afi); alil = afj); afj) = bz } /f Ispisivanje uredenog niza: System.out.print ("\nUredjeni niz:\n\n"); for (int i=0; i=0 && a[j}>a[j+l}; j--) { int b = a(j]: alj) = afj+1}; alj+1) = b; } ¢/ Ispisivanje uredenog niza: System.out.print ("\nUredjeni niz:i\n\n"); for (int i=0; i m) p = m ee ee eee | p: int{] ¢c = new int [mtn]; o-1-2 1 mel 0.81 int i= 0, j = 0, k = 0; }eCI TT TITT) &(t-{eb)| while (i < p}) c{kt+) = a[li++]; | | ee sak oe) while (j max) { max = afi][j]; imax = i; float b = a[imin] [jmin]; a[imin] [jmin] = af{imax] [jmax]; a[imax] [jmax] = b; System.out.printin (); for (int i=0; i0 && b>O 6& c>0 && atb>c && btc>a && ctarb; } public Trougao2 (double aa, double bb, double cc) [ // Stvaranje, if {! moze (aa, bb, cc)) System.exit (1); a = aga: b = bby c= cc; } public double return a; /# Bohvatanje stranica. public double return b; public double return public double 0 { return oe // Obim trougle. public double P { f/f Povrsina trougla. double s = 0 () / 2; return Math.sqrt [(s * (s-= } public String toString () ‘f Tekstualni oblik. { return "Troug" + id + BP. Foe FYE g ze Zadatak 4.3 Trougac2T.java fapitivane public class Trougao?? | public static void main (O11) ystem.out .print ("Aro) trougit 4 nt f t Trougac2[] niz new Trougan jal for (int i=0; i0; s+t=nizj--i)+*" “); return s; h // Glavna funkcija za ispitivany? klase Stek. <<«9=sscese=sseesecs==eEn public static void main (String[] varg) [ Stek s = mew Stek (); while (! s.pun ()) € a.stawi (Citaj.tntt)): } while (! s.prazan (}) [ Systen.out.print (s.uzmi(} # " ")?; | System.out.printin (); // StekT.java - Ispitivanje klase stekova ograni¢enih kapaciteta. public class StekT { public static void main (String[] varg) | Stek s = new Stek (); radi: while (true) | System.out.print ( “\nl. Stvaranje steka\n" + "2. Staviljanje podatka\n" + "3. Uzimanje podatka\n" + "4. Ispisivanje sadrzaja\n" + "5. Praznjenje steka\n" + "0. Zavrsetak rada\n\n" + "Vas: izbor? " ); switch (Citaj.Int (}) | case 1: System.out.print ("Kapacitet? "); s = new Stek (Citaj.Int ()); break; case 2: if (! s.pun ()) | System.out.print ("Broj7 oy s.stavi (Cita}.Imt ()); } else System.out.println ("*** Stek je pun ***"); break; ease 3: if (! s.prazan ()) System.out.println ("Broj= " + s.uzmi()); else System.out.printin (""** Stek je prazan ***"); break; ease 4: System,out.println ("Stek= "+ 9); break; | ease 5: s.prazni (); break; case 0: break radi; default: System.out.printin ("*** Nedozvoljeni izbor ***"); 4 Klase Zadatak 4.4 i $ javac StekT. java Vas ilzbor? 2 5 @ java StekT )*** Stek je pun *** 1. Stvaranje steka Vas izbor? 4 |2. Staviljanje podatka Stek= 3 J. OUzimanje podatka . z 4. Ispisivanje sadrzaja Vas izbor? 3 3 \5. Praznjenje steka | | Broj= 4 Oo. Zavrsetak rada | 7 Vas izbor? 3 ‘ Vas izbor? 1 Broj= z Kapacitet? 3 | _ | |Vas izbor? 3 : Vas izbor? 2 Broj= i ‘| Broj? 1 ‘i Vas izbor? 3 | Vas izbor? 2 *** Stek je prazan ~] j Broj? 2 = | | sd vas izbor? 55 “| Vas izbor? 2 | “ee Nedozveljeni izb | s Broj? 2 A te : | |» | [Vas izbor? 0 Zadatak 4.4 48 Zadatak 4.5 Nizovi komplekani trojeva Napisati na jeziku Jave klasu nizova homnplohinih lrapeve. Poedyiiett * stvaranje niza zadate duZine (padmaguimnevane |b) ¢ ehermentinea jecdnakim null, « dohvatanje duzine niza, * postavijanje i dohvatanje vredinoati vndedog clement nina, * sastavijanje tekstualnog oblika nica, * izratunavanje vrednosti polinoma, @iji su koefleijenii elements niza, za zadatu vrednost nezavisne promenljive, i * sastavijanje tekstualnog oblika niza kada se on turned) kao polinoa Napisati na jeziku Jave program za ispitivanje prethodine Klos ReSenje: == NinckKomp 1 NizKompl.java - Klasa nizova kompleksnih brojeva. public class Nizk Private Kompll[) Zadatak 4.2 : public NizKompl (int n) [ vA ain niz = new Kompll [n]; for (int 0; i=niz.length) System.exit (1)7 niz({i] = new Kompll (z.re(), z2.im())}i return this; 1 public Kompll dohvati (int i) Dohvatanje elementa. if (i<0 || i>=niz.length) System.exit (1); return niz[i]; | public String toString () [ '/ Tekstuaini oblik niza. String s = ""; for (int i=0; i=0; i--) { s t= nie(ije if (2 > 0) Ss t= %) "7 | return s + ")": // MizKomplT,.java - Ispitivanje xlase niza kompleksnih brojeva. public class NizKomp1T | public static void main (String[] varg) | System.out.print ("Red polinoma? "); dint n = Citaj.Int (); NizKompl poli = new NizKompl (n+l); for tint len; i>=0; i--) [ System.out.print ("p([" + i + "] (re,im)? "); poli.postavi (Kompli.citaj(), i)j } System.out.printin ("\n" + poli.poli()); System.out.print ("\nPocetna vrednost (re,im)? "); Kompll z = Kompll.citaj (}; System.out.print ("Vrednost koraka (re,im)? "); Komp1l1 d = Kompll.citaj (); System.out.print ("Broj tacaka? "); int k = Citaj,Int () System.out.format ("\nt15s %20s\nts\n", “z", "pi(z)", ee ee for (int i=0; is2.niz[j] ? s2.niz[j++] sl1.niz{it++] if (j s2.niz(j}} j++: else {oa(ntt) = sk. abelite)}s j++F kopiraj (a, n); } 4 Klase Zadatak 4.¢ public void razlika (Skup sl, Skup 42) [ “f/f Razlika dva skupa) double[] a = new double [sl.niz.length); int n = 0; for (int i=), j=<07 i s2.niz[3]) J++; else t abe ote} kopiraj {a, n); } public String toString () [ // Tekstualni oblik String s = "({"3 for (int i=0; i OF 7 "+" : BH; rez += atb + "/" + b; I return rez; i } 4 } * #/ RacBrojT - Ispitivanje klase racionalnih brojeva. 0 ial public class RacBrojT | i public static void main (String|] varg) { it int n = Integer.parseint (varg[0]}; ee RacBroj a = new RacBroj (); EY for (int i=1; i<«n; 2 System.out.println (i + " " + a.dodaj (mew RacBroj (1, of me 4a] = as iv # javac RacBrojT. java 13 3+64913/360360 corel Sal $ java RacBrojT 45 14 53+90653/360360 > PogreSni 4 +7 15 3+114677/360360 : prekoraden | 9 14+i/2 16 34274399/720720 : teva ioe YY 3 1+5/6 17 3+5385503/12252240 =; JEV2 BPS 4 2+1/12 1@ 342022062/4084080 j +10") 5 2417/60 19 9#42503239/77597520 6 249/20 i 7 2483/1490 40 94195299214989013/48572104155120 @ 24+201/280 41 4¢6032785856100733/1991456270359 9 2+2089/2520 42 44029562872992619/2849937529085 10 242341/2520 9) 4¢02816141067768217/122332313 750 1] 3+551/27720 44° 4249165472261895961/44955181 70850 12 3+#2861/27720 45 188607719594513747/2482982421 648 *. Zadatak 4.9 Zadatak 4.10 Tacke j krugovi Koj re ane de fe prekfapaj uv rave Napisati na jeziku Java klasu taéaki u fave Myeclvidet) * stvaranje tacke zadatih Kooreliiiti (pnd ieee (OF), | * izraéunavanje rastojanja tadke off koordinatieyg potetiat oul zoclate lacke Napisati na jeziku Java klasu krugova u raved koj) ae sme} da se preklapoju. Predvideti: proveru da li sme da se napravi krug datog polupretnika | koordinata centra, * stvaranje kruga zadatog poluprecwika i koordinata centra, uniStavanje kruga, premeStanje centra kruga u odredenu tacky i pomeranje kruga 2a cadati pomak, izracunavanje najmanjeg rastojanja do datog sastavljanje tekstualnog oblika kruga Klase staviti u paket klasa, Napisali na jeziku Jave program za ispitivanje prethodnil klasa, Resenje: // Tacka.java package ravan; class Tacka | double x, yi Koordinate. Tacka () {) “ o, ‘spiaedga pocetku, Tacka (double x) | this.x My na x-osi, Tacka (double x, double y) Adatim koordinatama. | this.% = x; this.y yi) double poteg () Mietejanje acd koordinatnog pocetka. { geaturn Math.sqrt (x*x # y*y) double rastojanje (Tacka t) Maetajanie od zadate tacke. ( cetucn Math.sqrt (Math, poawinet PMALW, Pow tyet.y f 3) Zadatak 4.10 | \ 61 // Krug.java - Klasa krugova wu ravni koji ne smeju da se preklapaju. package ravan; public class Krug [ private Tacka c; private double r; // Centar i poluprecnik,. private Krug pret, sled; // Prethodni i sledeci krug. private static Krug prvi = null; // @Zajednitka lista svih krugova. private Krug {) {} // Samo za interne potrebe. // Moze li krug da postoji? public static boolean moze (double r, double x, double y) | Krug k = new Krug ()7 k.r = ci k.c = new Tacka (x, y)i for (Krug tek=prvi; tek!=null; tek=tek.sled) if (tek. rastojanje (k}) < 0) return false; return true; ) public Krug (double r, double x, double y) [| // Stvaranje kruga. if (! moze (r, x, y)) System.exit (1); this.r = £; this.c = new Tacka (x, y); sled = prvi; pret = null; 4f (prvi != null) prvi.pret = this; prvi = this; ) public void brisi (i) | // Krug vise nije potreban. if (pret != null) pret.sled = sled; else prvi = sied; if (sled != null) sled.pret = pret; ) public boolean premesti (double x, double y) { // Premedtanje kruga. if (! moze (r, x, y)) return false; c.xX = x; c.y = yi return true; j public boolean pomeri (double dx, double dy) | // Pomeranje kruga. if (! moze (r, c.x+tdx, c.y+dy)) return false; c.x += dx; c.y += dy; return true; } double rastojanje {Krug k) // Rastojanje do drugog kruga. ( xreturn c.rastojanje (k.c) - rc - k.r: ) public String toString () // Tekstualai oblik. ( return "K{" # re", (" + ¢c.xn ¢ ",." # e.y + "))": J Zadatak 4.10 ot 6 ere é ee a a f/ RavanT.java - Ispitivanje tlasa Krug i Tacka u paketu Ravan. import ravan.Krug; public class Ravan? | public static void main (String/| varg) { Krug{] krugovi = new Krug [100]; while (true) {| int n = 0; System.out-printin (); while (true) { System.qut.print ("K(" #4 "] (ryxepy)? "he double r = Cita}.Double(), x = Citaj.Double(), y = Cita}.Double(); if (rt < 0) break; if (Krug.moze (cr, x, y)) kKrugovi[nr+] = mew Krug (r, x, y); else System.cut.println ("*** Ne moze da se smesti! ***"); } if in == 0) break; for (int i=0; i= return this; public String toString () | return "(" + super.toString() + ; + je public class ValjakT | public static void main (String[) Valjak new Valjak (2, 3); System.out-.printin (“vl Kanta } new Kanta (1, 3, 10): system. -printin ("k1(10); kl System. -printin ("kl-85 :; " + kil.odlij(5)). kl.dolij(4))7 System.out.println ("kl+=4 Kanta = new Kanta (0.6, System.out.printin ("k2(9) public boolean puna () [ return puno == + return V() = puno; VOu ms k.puno) { puno += k.puno; else { puno = V()? k.puno -= prazno; ava - Ispitivanje klase valjaka 0; dopuna <= V()) ? puno+dopuna 4f (puno-odliv > 0) pune -= edliv; else puno } + Koliko ima tec. /*f Koliko teénosti fali? f/f pa li je puna? ff Da ff Dolivanje. li je prazna? f/f OGdlivanje. O; f/f Preaipanje, k -puno = O: f/f Tekstualni oblik. nye vV1.V()); kl .Vi())3 k2 +" "+ R2V 00) System.out-printin ("k2<-kl: " 2.presipa)(kl)); System.out.printin ("ki : \ he i? javac ValjakT.java { java ValjakT vl ¢ f2.0,3.0] 37. 6991118430775. k1(1O): ([1.6,3.0],9.42477796076938) 9.4. kl-=5 ({21.0,3.0)],4.424777960769379) kl+=4 ({1.6,3.0],8.42477796076938) k ({0.6,5.0],0.0}] 5. 6548667 76461626 1a ({6.6,5.0],5. 654866776461628) ((1.0,3.0],2- 7699111843077517) Zadatak 5,1 a777 960 76938 § Izvedono kinase Se See 66 Zadatak 5.2 Osobe, daci/ zaposileni Podatke 0 esobi Cine ime, datum rodenja i adresa simmovanja, Dak je osoba za koju se dodatno znaju na- ziv Skole i razred koji pohada. Zapeslen je osoba za koju se dodatno zna naziv firme i naziv odeljenja u kome radi, Napisati na jeziku Java klase koje omogucéavaju unificiranu obradu podataka o nabrojanim kategorijama osoba, Svi atributi su niske znakova, Predyideti unosenje podataka u objekte Gitanjem s glavnog ulaza j sastavljanje tekstualnog oblika objekata. Napisati na jeziku Java program za ispitivanje prethodnih klasa. ReSenje: —— ES == Gapa =| ci ime, rodjen, adresa ‘| + citajt), toString() {Ns [—Waposien | - firma, odeljenie + citaj(}), toString() Sak iil + citaj(), toString () f/f Osoba.java - Klasa osoba. Public class Osoba { private String ime, rodjen, adresa; public void citaj () | System.out.print ("Ime i prezime? "); Citaj.getNL (); ime = Citaj.Line (); System.out.print ("Datum rodjenja? “); rodjen = Citaj.Line’ (); System.out.print ("Adresa stanovanja? "); adresa = Citaj.Line (); } public String toString () { return "Ime i prezime: "+ ime + "in" + "Datum rodjenja: " + roedjen Ane + “Adresa stanovanja: “ + adresa fin // Djak.java - Klasa daka. public class Djak extends Osoba | private String skola, razred; public void citaj () [ super.citaj (); System.out.print ("Naziv skole? “); skola = Citaj.Line (); System.out.print ("Razred? ")} tagred = Citaj.Line (): } 5 lzvedene klase Zadatak 5.2 LS Ath eh we paw Siete public String toString ({) | return super.toString () + “Naziv skole: " + skola + *\n" + “Razred: “4+ razred + "in" 2 // Zaposlen.java ~- Klasa zaposlenih, public class Zaposlen extends Osoba | protected String firma, odeljenje; publie void citay {) | super.citaj (); System.out.print ("Naziv firme? "); firma = Citay System.out.print ("Naziv odeljenja? "); odeljenje = Cita} } public String toString ({) { return super.toString () + "Naziv firme: "+ firma HOA + “Naziv odeljenja: "+ odeljenje + "\n" ; // OsobeT.java - Ispitivanje klasa osoba, daka i zaposilenih. public class OsobeT | public static void main (String(] varg) | Osoba[] ljudi = new Osoba [20]; int n = 0; System.out.println ("“Citanje podataka o ljudima"); radi: while (true) | System.out.print ("\nlzbor (O8osoba, D=djak, Z=zaposlen, switch (Citaj.Char ()) { case 'O': case ‘"o": ljudi[n] = new Osoba (): break; ease ‘'D': case ‘d‘: ljudi[n] = new Djak (); break; case "Z': case 'z'; ljudi[n] = new Zaposlen (); break; ease 'K': case 'k': break radi; } if (ljudifn) != null) ljudi[n++].citaj (); } System.out.println ("\nPrikaz procitanih podataka"); for (int i=0; isny i++) System.out.print ("\n" + ljudi[ijye Zadatak 5.2 68 avac OsobeT. java itanje podataka o ljudima Imé i prezime? 3 § java OsobeT Cit Datum rodjenja? Ime i prezime? Datum rodjenja? Izbor (O=osoba, D=-djak, zZ=zaposien, Aexra))? @ Marko Markovic 13. 5. 1984, Adresa stanovanja? Avalska 33, Beograd Zoran Zoranovic 1. 1, 1965. a fO=osoba, D=-djak, 2=-zaposlen, Nekra))? a | Adresa stanovanja? Naziv skole? Razred? Datum rodjenja? Adresa stanovanja? Ime i prezime: Datum rodjenja: vanja: Adresa stan Ime 1 prezime: Datum rodjenja: Adresa sta Naziv skole: Razred: as Ime i prezime: Datum rodjenja: Adresa stanovanja: Naziv firme: Naziv odeljenja: 5 lzvedene klase Izbor (O=osoba, D=djak, g=zaposlen, K=kraj) Backa 132, Beograd O.8. "P. P. Njegos" III-1 Zz Petar Petrovic 23. 10. 1965. Pancevacki put 37a, Beograd "IMT Rakovica", Beograd Nabavna sluzba Izbor (O=oseba, D=djak, g=zaposlen, Kekraj)? k Prikaz procitanih podataka Marko Markovic i3. 3S. 198d. Avalska 33, Beograd Zoran zZoranovic i. ds 1985, Backa 132, Be GS. ““P. iBs Lift=2 grad Petar Petre 23. 10. 1965. Pancevacki put 37a, Beograd "IMT Rakovica", Beograd Nabavna siluzba | I 7 | | | | | | i | 1 | i 1h { = peaidiie a ; Zadatak 5,2 \ ] | Zadatak 5.3 Vozila, leretna vozila / putni¢éka vozila Vozilo ima sopstvenu tezinu. Teretno vozile je vozilo koje je natovareno teretom odredene teZine. Purtnié- | ko vozilo je vozilo u kome se nalazi izvestan broj putnika zadate proseéne teZine. Napisati na jeziku Java klase koje omoguéavaju unificiranu obradu nabrojanih vrsta vozila. Predvideti inicijalizaciju zadatim vrednostima parametara, dohvatanje jednoslovne oznake vrste vozila, izratunava- nje ukupne tezine vozila i sastavijanje tekstualnog oblika vozila. Napisati na jeziku Java program koji s glavnog ulaza protita podatke o odredenom broju vozila i posle toga na glavnom izlazu ispise podatke o vozilima koja mogu da predu preko mosta zadate nosivosti. ReSenje: | Vozilo() vrstaf(] tezina() toString () vozila + TVozilo() PVozilo() * vrsta() vrsta() * tezina tezina ] * toString ({) toString{) //f Vozilo.java - Apstraktna klasa vozila. | package vozila; public abstract class Vozilo | private double sopTez; Sopstvena teZina, public Vozilo (double st) { sopTez = st: } Inicijalizacija. (le Vesta vozila, - public abstract char vrsta public double tezina {) [ return sopTez; } Ukupna teZina. | public String toString () Tekstualni oblik. { seturn vrstal) + "(" + sopTez + ","F } | Zadatak 5.3 iF ast eg tage Ss ae ee te te dee pa pea aterctitts pet = cio etepaeeeeme thm fl ethe-ponnr et ro “/ TVozilo.java - Klasa teretnih vozila. package vozila; public class TVozils extends Vozilo { private double teret; 7/ Tezina tereta. public TVozilo (dowble st, double t}) // Inicijalizacija. { super (st); teret = t; | public char vrsta () [ retuzm 'T'; } // Ursta vozila. public double tezina () /f Ukupna teZina. { return super.tezina () + teret; } public String toString () ff Tekstualni oblik. { xeturn super.toString{) + teret + ")"; ) /f P¥ozilo.java - Klasa putnickih vozila. package vozila; public class PVozilo extends Vozilo [ 7/ Srednja teZina putnika- double srTez; // Broj putnika. int brPut; public PVozilo (double st, double srt, int bp) // Inicijalizacija. { super (st); srTez = srt; brPut = bp; ) public char vrsta () | return 'P'; } f/f Vrsta vozila. public double tezina () // Ukupna teZina. { return super.tezina () + srTez * brPut; } public String toString () *#f Tekstualni oblik. { return super.toString{) + srfez + "," + brPut + ")"; } // VozilaT.java - Ispitivanje klasa vozila. import vozila.*; public class VozilaT [ public static void main (String[{] varg) { Vozilo[) vozila = new Vozilo [100]; int n = 0; radi: while (true) | System.out.print ("\nVrsta vozila (T,P,.*)? ")}: switch (Cita),Char ()) | case ‘t': case 'T'| System. our print ("sapatvena tezina? double stez = Cita), Double (): System.out.print ("Téesina tereta? *) double ter © Citay. Int ():,; vozila(nt+] = naw TVoxzllo (sTez, ter); break; case ‘p': case '/)'; System.,out.print ("Sopatvena tezina? m2 | sTea = Cita).Double (); System.out.print ("Sr. tezina putnika? “7 double srT@z = Cita).Double ({); System,out.print ("Broj) putnika? ")3 int brPut = Cita}.Int (); vozila(n++) = mew PVozilo (sTez, srTez, brPut); t break; ; case '*'; break radi; default: System.out.println ("*** Nepoznata vrsta vozila!"); } System.out.print ("\nNosivost mosta? me double nosivost = Citaj.Double (); System.out.print (“\nMogu da predju most:\n"); for (int t=O; icn; i++) if (vozila[{i]).tezina{) <= nosivost) System.out.println (vozilafij] + " - " + vozila[i] .tezing # javac VozilaT 4 java VozilaT Vrsta vozila (T,P,*)? t Sopstvena tezina? 1500 Tezina tereta? 5000 eas! Vrsta vozila /T,P,*)? p Sopstvena tezina? 1000 Sr. tezina putnika? 75 Broj putnika? 5 Vrsta vozila (T,P,*)? t ———— (eee Ph ee oe Sopstvena tezina? 2000 | Tezina tereta? 10000 Vesta vozila {T,P,*)? * i| Nosivost mosta? 8000 a | Mogu da predju most: | 1T(1500.0,5000.0) = 6500.0 P(1000.0,75.0,5) - 1375.0 Stee Lr ey Zadatak 5.3 = zs Es 72 : Zadatak 5.4 Predmeii, sfere i kvadn Predmet ima specifiénu tezinu i jednoslovau Genala veule predineta Sera je predimet zadat polupreém- kom. Avedar je predmet zadat duZinama jviea Napisati na jeziku Java klase koje omoguéava)u unificwanu Gbrady aabrojanih vrsea predmeta. Precvideti inicijalizaciju zadatim vrednostima parametarm (podiarumevano |), dolwatanje oznake viste predmeta, izratunavanje zapremine, izratunavanje tezine, dilanje predmeta s glavnog ulaza i sastavijanje tekstu- alnog oblika predmeta. Napisati na jeziku Java program koji 5 glavnog ulaza protitn podatke o odredenom broju predmeta i posle ve iznad prosecne toga na plavnom izlazu ispiSe podatke o predmetima Cije su te? Resenje: Predmet + veri) Vi) ot) cita)f{) teString() | | ~ Predmet.java | -Sfera.java | Kvadar.java a | | // Predmet.java - Apstraktna klasa predmeta. | package predmetil import usluge.Citaj; public abstract class Predmet | private double sigma; protected Predmet (double 5s) | sigma sa; } [nicijalizacija. protected Predmet () {| sigma i ) public abstract char vr (); /f Vrsta. public abstract double V () (f gapremina. public double © () | return V () * slama; ) f/f Tedina. public void citaj {) | sigma Citaj.Bouble (); } // Citanje. public String toString () Tekstuaini oblik. { return vr{) + “[" + Double,to Lag (sigma) | Napomena: U novijim verzyjama jezika Jaw ne miogu da te veri klase iz bezimenog paketa (na pri- mer: import Cita}; to je ranije bilo Hegde) fhog logo postoje dva primerka kla- korigéen je primerak i¥ bezimenag jikeli | | se Citayj — jedan ul bez inenan jrokotu i jevlan paketit usLUuge. U ranijim zadacima, | ee 5 lzvedene klase Zacatak 5.4 oa a ith // Stera.java - Alasa sfera. package predmetil; import uslucge.Cita); public class Sfera extends Predmet |[ public static final char VR = 'S'; // Vrsta. private double r; f/f Poluprecnik. public Sfera (double ss, double rr) | super (ss); rc = rr; } Inicijalizacija. ( this (1, 1): } public Sfera {) public char vr () { return VR; } // Vesta. public double V() { return 4./3 * c*r*r “ Math.PI: } // Zapremina. public void citaj () // Citanje. ( super.citaj ()7 r = Citaj.Double (); | Tekstualni oblik. public String toString () ( return super.toString() + r+ ")"; ) // Kyadar.java - Klasa kvadara. package predmetil; import usluge.Citaj; public class Kvadar extends Predmet | public static final char VR = 'K'; // Vrsta. private double a, b, c; /f Ivice. public Kvadar (double ss, double aa, double bb, double cc) // Inicijali- { super (ss); a = aa; b = bb; c = cc; } f/f #acija. public Kvadar {) { this (1, 1, 1, 1)? } public char vr () { return VR; } ff Vesta. public double v () (| returna* b*c; |} // Zapremina. public void citaj () { // Citanje. super.citaj ()i a = Cita}.Double (); b = Citaj-Double (); = Citaj.Double ()7 ) public String toString {) | Tekstualni oblik. return super.toString() + +o "]"7 Zadatak 5.4 5 tevedene klase pe ee ee STL wpe 74 f/f PredmetilT.java - Ispitivanje kKlasa predmeta. import predmetil.*; import usluge.Citaj; public class PredmetiiT { public static void main [(String[) vpar) { Predmet[] p = new Predmet (100); double q = 0; int n = 0; radi: while (true) { Switch (Citay.Char {)) | case ‘'s': case 'S': p[n) = new Sfera [); break; @ase 'k': case 'K': p[n]) = new Kvadar (); break; case '.': break radi; if (p{n) != null) { Pin].citaj ()7 System,out.printin (p{n) + " (Q=" + p(n] .Q¢) + ")"); q-+= pint+].Q (); } if (n != 0) q /= n; System.out.print ("\nQsr= "+ q + "\n\n"); for (int i=0; i q) System.out.printin (p[i] + " (Q=" + p[i}.Q() + ")")2 % javac PredmetilT.java 4 java PredmetilT Teas. | ete “I rae soe mie ‘ Mk Saas ~ = “. —— . ° Figura? k Figura? t Figura? k =-2 = Figura? o -1 Figura? t Figura? x krug [T=(0.0,0.0), r-10.0, ; xvadr(T™=(1.0.1.0). a=3.0, me eee P=314.1592653589793) croug{T=(7.0,2.0), a=3.0, baq.9, ‘cms 0, Qm12.0, P=6.0) Avadr(T=(-2.0,-4.0). a=33.0, 0~}32.0, P=1089.0) exoug{2=(7.0,22.0) , ao8.0, pri5, 0796326784896, 2-19. 634954004996208) Ve TSSePe <1 585.0, cm5.0, O=13.0, P=?.15454940106270926} Zadatak 5.6 Tadake, linije, dull, zlomijene linije i poligoni u ravni Napisati na jeziku Java sledece klase ® Taéka u ravni se zadaje pomodu realnih koordinata (podrazumevano (0,0)), me vrednosti koordinata. Tekstualii oblik taéke je (x,y), ede su: x jy — koordin postoji i usluzna metloda 24 sastavijanje tekstuainog oblika niza tataka T,Ty tekstualni oblik jedne tacke u nizu / « Apstrakina linija u ravni ima jodinstven, automatski generisan identifikacioni BP dohvati identifikacioni broj, izmtuna duzina j sastavi tekstualni oblik koji = { broj linye. « Dui je linija koja je zadata krajnjim ta&kama (podrazumevano (—1—1) i (1,00 pored identifikacionog broja, sadrdi | reé diez i koordinate krajnjih tataka. » Izlomijena \inija je linija koja se sastoji od niza tataka koje predstavijaju te inicijalizuje nizom taéaka koje Cine temena linije. Tekstualni oblik, pored ide i sadr3i i reé iclamijena i niz koordinata temena, « Poligon je za\vorena izlomijena linija koja se dobija spajanjem prvog i poslednj stualnom obliku koristi se ree poligon | Napisati na jeziku Java klasu s flinkeijom za citanje jedne linije s glavnog ulaza i koja s glavnog ulaza procit niz raznovrsnih linya, ispise sve procitane podatke na glawi éujuéi i du%ine pojedinih linija), pronade najduZu liniju i ispise je na glavnom izlazu. & zadaje se kao parametar glavne funkeije. ReSenje: ae Linija // Tacka,java - | i his + Buz) ff Kl = > be * duz{) ff dasa Cacaxra + id = iat) : ff u ravni. «hee tS SF] + toString () + toString({) package linije: ——— ; i j|* Tzlomljena() public class Tacka | | : duz () toString () private double x,y; // Koordinate. ff Inicijalizacija. | public Tacka (double xx, double yy) — ( x = xx; y = yy i public Tacka (double xx) | & © XK; public Tacka {) {1 linije public double x {) {| return x; | // Koordinate: public double y () | return y: | public String toString () / Tekstualni obs { return “("*# e+ °-" © y * i public static String toString (Tacka(} niz) { // Texstualni ob StringBuffer s * new dtringBuffer () Jf fiza tacakae for (int i=0; i 0) s.append (',"*) s.append (miz{il)? return s.toString ¢) ‘private static int ukId . private int id = +#ukId; ¥Ypublic int id{) { return id; Public abstract double duz // Duz.java = package linije; public class Duz extends Linija private Tacka A, B; public Duz { public Duz { Tack } } f public double return Math. public String return super, toString a.java - Klasa izl Se oe LZLOm.L Je package lin public class Izlomljena extends protected Tacka[] tem; public Izlomljena (Tacka public double duz {) | double d = 0; for {int i=0; i < usluge, Uporediv Uredjivac + Espyed() — sseaess * uredi {) + jednak (} + toString) + uredi () + toString {) MetodalIzbora + uredi() + toString (} + Ceo{) + vri{) + Lspred() if + jednak () toString () */ Uporediv.java - Interfejs uporedivih objekata. package usluge; public interface Uporediv { folly boolean ispred (Uporediv u); // Da di je ispred drugog objekta? boolean jednak (Uporediv u); // Da li je jednak drugom objektu? ry if // Uredjivac.java - [nterfejs algoritama uredivanja. package uredjivacil; public interface Uredjivac | void uredi (usluge.Uporediv([} niz); f/f Uredivanje niza. String toString (7 /* Tekstualni oblik. } 5 Izvedene kiase Zadatak 5.9 * Metodalzbora. ava ana fa uredivanie® netoagom 1zZ00Lra f/f M Jal zt Nl / tod 3 ff (election Sort) ; ' package uredjivecil; i import usluge.Uporediv; j j public class Metocdalzbora implements Ured)ivac } public void uredi (Uporediv|] miz) | /f Uredivanje niza. i int n = niz.length: i for (int imO0; i¢n-1l; i++) st for (int jmi¢l; j"0 66 nie(jel).depred (mniel4))) + Uporediv p nletpel)y adatged) nig(j)]; niz(j--]) = pF ‘ } dadatak 5.9 l public String toString () ( return "Metoda umetanja”; é/ MetodaUmetanjazZ.java - K z4 uredivanjé \ i package uredjivacil; i import usluge.Uporediv; | public class MetodaUmetanjad implements Uredjiva public void uredi (Uporediv[] niz) [| Uredivanje niza. int n = niz.length; for (int i=l; i=0 G6 p.i niz(j+1) = niz[j+1] | gq ft) | return "Poboljsana Klasa za uredivanje metodom zamene suseda (Bubble Sort). package ured: import usluge.Uporediv; | public class MetodaZameneSuseda implements Uredjivac [ | public void uredi (Uporediv[) Ey f/f Uredivanje niza. ; int n = niz.length; i boolean dalje true; + rn 1 2 for {int i=0; i¢n-1 64 dalje; i++ a dalje = false; | for (int jen-27 j>edir j-=) a} " if (niz(j+1)-.ispred (nizlj))) | i Uporediv p ni2(44¢l)7 nial al] niz([j]i niz[] 4 dalje true} i! iI I ; } A public String toString () Na i] itm "“Maetoda #aneare uaedsa { return § lavedone kinase fadatak 6.0 /f MetodaPodele.java - Kiasa za uredivanje metodom podele Af fQuiek Sort). package uredjivacil; import usluge-Uporediv; public class MetodaPodele implements Uredjivac | public void uredi (Uporediv[] niz) ff Uredivanje niza. { uredi (niz, 0, niz.length-1); } Niz se podeli oko elementa / tako da levo svi brojevi budu Sq), a desno svi budu 2a). Levi i desni deo niza ureduju se nezavisno. Podela se pravi preme’tanjem elemenata vecih od a,.; s potetka niza prema kraju, a eleme- nata manjih od a,.; s kraja prema poéetku. Na kraju ay.) se stavi negde u sredinu niza, ieee private void uredi (Uporediv[{) a, int p, int q) | if (q > p) | int i= p-l, j) = q while (true) [ do i++; while (a[{i].ispred (a[q])); do j--; while (j>=0 6& alq].ispred (a[j])); | if {i >= j) break; Uporediv b = afi]; afi] = afjl# af{j] = bi ) Uporediv b = a[ij; afi] = alg]: alq] = 5; uredi (a, p, i-1); uredi (a, itl, q)i } public String toString () // Naziv algoritma. { return "Metoda podele"; |} // Ceo.java - Klasa uporedivih celih brojeva. import usluge.Uporediv; public class Ceo implements Uporediv [ private int broj; // Vrednost u objektu. public Ceo (int b) | broj = b; } f/f Inicijalizacija. Zadatak 5.9 5 Izvedene klase public int vr () { return broj; } // Dohvatanje vrednosti. public boolean ispred (Uporediv b) **/ Da li je ispred drugog objekta? { return broj < ((Ceo)b).broj; ) public boolean jednak (Uporediv b) f/ Da li je jednak drugom objektu? { return broj == ((Ceo)b).broj; | public String toString () // Tekstualni oblik. { return Integer.toString (broj); | // UredjvacilT.java - Ispitivanje klasa za uredivanje nizova. import uredjivacil.*; import usluge.Uporediv; import java.util.Random; public class UredjivacilT [ // Niw za objekte algoritama uredivanja. private static Uredjivac[{] metode = [{ new Metodalzbora: {), new Metodalzbora? (), new MetodaUmetanja (), new MetodaUmetanja2 {), new MetodaZameneSuseda (), new MetodaPodele ()} | ' é // Ispisivanje niza. private static void pisi (String nasl, Uporediv|] niz) | System.out.print (“\n" + nasl + "\n\n"); for (int i=0; i 0) niz = new Ceo [d]; else System.out.println ("*** Nedozvoljena duzina!"); break; 5 lzvedene kiase Zadatak 5.9 | | | iB pple ete weap tert cei a aa ae er ee te a 1. Ala! treet. eo sierwdien et wa ts a iene 1 Seah case 2: // Postavijanje generatora sluéajnih brojeva: System.out.print ("Pocetna vrednost generatora? "); sluc = new Random [(Citaj.Long ()): break; case 3: // Izbor algoritma: System.out.printin ()}; for (int i=0; i0 && izbor<=metode.length) metoda = metode [izbor-1]; else System.out.printin ("*** Nedozvoljen izbor!"); break; case 4: // Primena algoritma: for {int i=0; i b + My " i } // IzraziT.java - Ispitivanje klasa za izraze. import izrazi.*; public class [zraziT [ public static void main (String{] varg) |{ Prom x = new Prom ("x"), xmin new Prom ("xmin", Double.parseDouble(varg[0])), xmax new Prom ("xmax", Double.parseDouble(varg[1])), dx new Prom ("dx", Double.parseDouble (varg[2])); Tzraz izr new Razl ( new Step (x , Dew Konst(3)) » new Proizy (new Konst(2) , x) Ve Zbir korak = mew Zbir (x, dx); System.,out.println (xmin + "="+ xmin.vr() + ", " + xmax + "=" + xmax.vr() +", “ # dx + "=" + dx.ver()): System-out, printing: ("Nn ex 4 “GT 4 See 4 © \ pee eemnnenree*)ir for ({x.postavi(xmin); x.vr()<=xmax.vr(); x. postavi (korak) ) System.out.println (x.vr() + "\t" + ize.vr())? § java IzraziT -5 5 1 xkmin=-5.0, xmax=5.0, dx=1.0 x ({#*9.0)-{2.0"x) } cine “5.0 -1i5.0 9.0 =-56.0 me EE =4.0 5 lzvedene klase Zadatak 5.10 ener Some a a SPR SE OES ghee apne mien ce ta 102 Zadatak 5.11 Naredbe, proste naredbe, sekvence i ciklusi Koristedi tipove za izraze iz prethodnog zadatka, napisati na jeziku Java sledece tipove: « Apstraktna maredba moze da se izvr3i i da se sastavi tekstualni oblik naredbe. « Prosta navedba je naredba koja sadrzi jedan izraz, moze da bude i prazna. lzvrSavanje se sastoji od izraCunavanja izraza. Tekstualni oblik je izr;, gde je zr tekstualni oblik sadrzanog izraza. i « Sekvenca je naredba koja sadri proizvoljan broj naredbi. Stvara se prazna, a sadrzane naredbe se dodaju jedna po jedna i izvrSavaju po redosledu dodavanja. Tekstualni oblik sekvence je {nar ... nar}, ade je nar tekstualni oblik jedne sadrZane naredbe. Selekcija je naredba koja sadr?i jedan izraz i dve naredbe. Pri izvrSavanju izraéuna se vrednost izra- za i ako je #0 izvrSava se prva sadrzana naredba, a ako je =O izvrSava se druga sadrzana naredba. Tekstualni oblik je if (zr) naryelse nar, gde su: izr — tekstualni oblik sadrZanog izraza, a nar, i nar; —tekstualni oblici sadrZanih naredbi, Ciklus je naredba koja sadr3i jedan izraz i jednu naredbu. Pri izvrSavanju sadrzana naredba se izvr- ’ava sve dok je vrednost sadrzanog izraza #0. Tekstualni oblik je while (ir) mar, gde su: izr — tekstualni oblik sadrZanog izraza, a nar — tekstualni oblik sadrZane naredbe. Napisati na jeziku Java program koji stvara objekat naredbe koja predstavlja program za izra¢unavanje nl, ispiSe naredbu na glavnom izlazu i posle toga cita vrednost za # s glavnog ulaza, izratunava nm! i ispisuje dobijeni rezultat na glavnom izlazu, sve dok za m ne procita negativnu vrednost. ReSenje: [+ radi 0 “+ toString () ow narl nar?) | 1,1 [Presta _ + Prosta() + radi () + toString () + Ciklus () + radi() + toString () + dodaj() + radi() + toString() + Selekcija() + radi() + toString () // Naredba.java - Apstraktna klasa naredbi. package naredbe; public abstract class Naredba { public abstract void radi (); // TzvrSavanje. protected statie String nivo = ""; public abstract String toString (); // Tekstualni oblik. 5 lzvedene klase // Nivo naredbe vu tekstualnom obliku. Zadatak 5.11 rostihn naredbi // Prosta.java - Aiasa p pesememeenpeen stot package naredbe; import igrazi.Izrazi >; Zadatak 5.10 public class Prosta extends Naredba { f/ Tzreaz koji se izraéunava. Teraz ize; // Prazna naredba. publie Prosta {) {} // Inieijalizacija izrazom. public Prosta (Izraz i) [Nader = h7 } f// Tevergsavanje. public void radi () ( if (izr '= null) izr. oe Oe } ff Tekstualni oblik. public String toString {) { return nivo + f(izr != null 7? iar: wey ok Mo hae |) // Sekvenca.java - Klasa sekvenci, package naredbe; public class Sekvenca extends Naredba [ // Prva i poslednja naredba. private Elem prva, posi: private class Elem { // Element sekvence: Naredba nar; // - sadrZana maredba, Elem sled; // - sledeéi element liste, Elem (Naredba n) | f/f ~ inicijalizacija. nar = n; if (prva == null) prva = this; else posl.sled = this; posl = this; } j /f Dodavanje naredbe. public Sekvenca dodaj (Naredba n) { new Elem (n); return this; } // Tzvrgsavanje. tek!=null; tek=tek.sled) tek.nar.radi (); ) public void radi () { for (Elem tek=prva; public String toString () | // Tekstualni oblik. String s = nivo +"{\n" nivo += " "; for (Elem tek=prva; tek!=null; nivo = nivo.substring (2); return s + nivo + “)\n"; tek=tek.sled) s += tek.nar; Zadatak 5.11 5 lzvedene klase // Selekcija.java - Klesa selekcija. package naredbe; pooseneerestor import izrazi.Ilzraz; public class Selekcija extends Naredha [ private Izraz ize; // Uslov selekcije. private Naredba narl, nar2; // Uslovno izvréavane naredbe. public Selekcija (Izraz i, Naredba nl, Naredba n2) // Inicijalizacija. ( der = 4; marl = nl; nar2 = n2; } public void radi () // Tevrdéavanje. { 4@ (ize.ve () != 0) marl.radi (); else nar2.radi (); | public String toString () { // Takstuaini oblik. String s = nivo + "if(" + ize + ")\n"; nivo += " "“; s += narl; nivo = nivo.substring (2); s += nivo + “else\n"; nivo += " "; s += nar2; nivo = nive.substring (2); return s; // Ciklus.java - Klasa ciklusa. package naredbe; import izrazi.Izraz; private lzraz izr; // Uslov cikiusa. private Naredba nar; f/f SadrZaj ciklusa. public Ciklus (Izraz i, Naredba n) f/f Inicijalizacija. { izr = i; nar = n; } public void radi () // Tzvrgavanje. ( while (izr.vr () != 0) nmar.radi (); } public String toString () [ ¢/ Tekstualai oblik. String s = nivo + "while(" + izr + ")\n"; nive +=" "> s += nar; nivo = nivo.substring (2); return s; } levedens klase Zadatak 5.11 f/f NaredbeT.java - Ispitivanje klasa naredbi. import izrazi.*; ment Zadatak 5/0 | rt naredbe. * ; Seeree ee rrerrscccsisseed public class NaredbeT [ public static void main (String[] vpar) [ Prom n = new Prom ("n"), i—* new Prom ("i"), £ = mew Prom ("“f"); Sekvenca telo = new Sekvenca (); telo.dodaj (new Prosta (new Dodela (i, new Zbir(i, mew Konst (1)))))¢ telo.dodaj (new Prosta (new Dodela (f, new Proizv {f, i)))); Ciklus cikl = new Ciklus (new Razl (n, i), telo); Sekvenca prog = new Sekvenca (): prog.dodaj (new Prosta (new Dodela new Konst (0))));7 (i, prog.dodaj (new Prosta (new Dodela (£, new Konst (1)))); prog.dodaj (cikl); System.out.println (*Program:\n" + prog); while (true) | System.out.print ("n? “); n.postavi (Citaj.Int ()); if (n.vr () < 0) break; prog.radi (); System.out.printin ("f= " + f.vr ())7 $ java NaredbeT Program: (i=0.0); (f-1.0); while ((n-i)) { (ie (it1.0)) 7 (fe(F*ij}),; 3626800.0 -1 eeepc a a epee pape eR i Zadatak 5.11 5 lzvedene klase 106 - = wi : 5 lzvedene klase O ® N — N co Zadatak 6.1 Vekior realnih brojeva sa zadatim opsezima indeksa Napisati na jeziku Java klasu vektora realnih brojeva sa zadatim opsezima indeksa. Predvideti: * stvaranje vektora s opsegom indeksa od zadate donje do zadate gornje granice, od | do zadate gor- nje granice i od | do 10, * postavijanjc i dohvatanje vrednosti komponente sa zadatim indeksom, * izraéunavanje skalarnog proizvoda dva vektora, i « dohvatanje grani¢nih vrednosti indeksa. Za razreSavanje konfliktnih situacija koristiti mehanizam izuzetaka. Napisati na jeziku Java program za ispitivanje prethodne klase. ReSenje: é avekt + Vekt() ¢ - OPSEG, INDEKS, DUZINA + postavi(), dohvati() [— porfi,. sif + skalPro() Ke. + GVekt i) + miniInd(), maxInd() 1 ee + sifra(), toString() // GVekt.java - Klasa greSaka pri radu s vektorima. package vektor; public class GVekt extends Exception [ f/f Kodovi gresaka: public static final int OPSEG = 0, // ~ neispravan opseg indeksa, INDEKS = 1, // = indeks izvan opsega, DUZINA = 2; // = neusaglagene duzine vektora. private static final String[] por = { // Tekstovi poruka o greskama, “Neispravan opseg indeksa!", "Indeks je izvan opsega!", “Neusaglasene duzine vektora!" le private int sif; // Sifra greske. public GVekt (int 5s) [ sif = s; } f/f Inicijalizacija. public int sifra () { return sif; } // Dohvatanje Sifre. // Tekstualni oblik. public String toString () { return "*** " + por[sif]; } lzuzeci Zadatak 6.1 // Vekt.java - Klasa vektora realnih brojeva. package vektor; public class Vekt [ // Granice indeksa. // Niz komponenata. f/f Inicijalizacija: int min, max; double[] niz; public Vekt (int mi, int ma) throws GVekt | // - zadati opseg, if (mi > ma) throw new GVekt (GVekt.OPSEG) ; niz = new double [(max=ma) - (min=mi) +1); ) i - gadata gornja granica, Public Vekt (int ma) throws GVekt | ff { this (1, ma); ) public Vekt () throws GVekt { this (1,10); ) // - podrazumevani opseg. public Vekt postavi (int i, double b) throws GVekt | // Postavljanje if (imax) throw new GVekt (GVekt.INDEKS); // xomponente. nizf{i-min] = b; return this; h public double dohvati (int i) throws GVekt // Dohvatanje if (imax) throw new GVekt (GVekt.INDEKS); // komponente. return niz(i-min]; ] public static double skalPro (Vekt vl, Vekt v2) // Skalarni throws GVekt | ie proizvod, 4£ (vi.niz.length != v2.niz.length) throw new GVekt (GVekt.DUZINA); double s = 0; for (int i=0; i=a.length) throw new GVerInd({a.length, i); // koefici- afil = b; f/f jenta, return this; } 7 public double vr (double x) throws GVerNula (| // Vrednost razlomka. double s = 0; for (int i=a.length-1; i>=0; i--) { if (x + s == 0) throw new GVerNula (); s = ali] / (x * 3); } return s; } public String toString {) | “*/ Tekstualni oblik. String s = "Veriz("; for (int 1=0; i 0) s += ","; s += afi); } return s + "|"; } ) f/f VerizantT.java - Ispitivanje klase veriZnih razlomaka. import verizan; public class VerizanT ( public static void main (String[] varg) [ while (true) { System.out.print ("\nn? "); int n = Citaj.Int (); if (n <= 0) break; Verizan v = new Verizan (nj); while (true) [ System.,out.print ("i, afi]? "); try [ v.postavi (Citaj.Int(), Cita},Double()); } catch (GVerInd g)} { if (g-ind () == -1) break; System.out.println (g); } } System.out.println ("\n" + wv); System.out.print ("\nxmin, xmax, dx? "); double nmin = Citaj.Double(), xmax = Citaj.Double(), dx = Cita}.Double({); 6 Izuzeci Zadatak 6.2 System.out.printin try | } catch (GVerNula g) | for (double x=xmin; x<=xmax; System.out.print (x + "\t"); System.out.printin (v.vwr (x)); System.out.println ("Ne moze!"); xt+edx) { $ java VerizanT n? § i, afi]? 3 2 i, afi]? 5 0 i, afi]? 14 i, afi]? 23 i, afi]? 41 i, afi]? 0 5 i, afi]? -1 0 Veriz(5.0,4.0,3.0,2.0,1.0] xmin, xmax, dx? -1 1 .25 «x V(x) -].0 <-1.923076923076923 -“O.75 -2.130199589628801 -O.5 -2. 597864 768683274 “0.25 -4.323919020244939 0.0 Ne moze! 0.25 4.323919020244939 0.5 2.597864768683274 0.75) 2.130199589628801 1.0 1.9230769230765923 SSUES n? 0 a GRESKA: Nedozvoljeni indeks 5 u veriznom razlomku reda 5 i Zadatak 6.2 6 lguzeci 114 Zadatak 6.3 Matrice reainih brojeva Napisati na jeziku Java klasu matrica realnih brajeva. Predvideti: « stvaranje matrica zadatih dimenzija (podrazumevano 10x10), * postavijanje i dohvatanje vrednosti zadatog elementa, * stvaranje kopije matrice, .© izraéunavanje zbira, razlike i proizvoda dve matrice, * dodavanje i oduzimanje druge matrice i mnoZenje drugom matricom, ¢itanje matrice s glavnog ulaza, i sastavijanje tekstualnog oblika matnice. Konfliktne situacije (nedozvoljeni indeks elementa, neusagla3ene dimenzije matrica) prijavijivati izuze- cima. se Napisati na jeziku Java interaktivan program za ispitivanje prethodne klase. ReSenje: java.lang. Exception Matr() -matl.- vrs(), kol() --|}+ matl(), mat2() + GMatInd() proverilnd() [+ toString () +40, 30 postavi(), dohvati () + toString() kopija() aad proveriDim() gbir(), razlika(), proizvod() dedaj(), oduzmi(), pomnozi() citaj(), toString() + . . + d+ y+ + // GMatInd.java - Klasa za gre&ke: Nedezvoljeni indeks. package matrica; public class GMatInd extends Exception { private int i, j; // Nedozvoljeni indeksi. public GMatInd (int ii, int jj) { i = ii: j = jj: ) // Inicijalizacija. public int 1 () [| return i; ) // Dohvatanje nedozvoljenih indexsa. public int j () | return j; |) public String toString () // Stvaranje tekstualnog oblika. { return "*** Nedozvoljeni indeksi ["“ + i+ ")[" +] + "J"; } // GMatDim.java - Klasa za greSke: NeusaglaSene dimenzije. package matrica; public class GMatDim extends Exception |{ private Matr matl, mat2;- // Problematiéne matrice. public GMatDim (Matr ml, Matr m2) f/f Inicijalizacija. { matl = ml; mat2 = m2; } public Matr mati () { return matl; } // Dohvatanje problemati¢nih public Matr mat2 () ( return matz; } // matrica. public String toString () [ //f Stvaranje tekstualnog oblika. return "*** Neusaglasene dimenzije matrica [" + matl.mat.length + ")[{" + matl.mat{0].length + "J i [" + mat2.mat.length + “J[" + mat2.mat(0]).length + "]"; // Matr.java - Klasa matrica realnih brojeva. package matrica; impert usluge.Citaj; public class Matr [ double[]{}] mat; // Elementi matrice. public Matr (int m, int n) { mat = new double(m)[n]; ) // Inicijaliza- f/f eiga. public Matr () [ this (10, 10); }; public int vrs () { return mat.length; |} // Broj vrsta. public int kol () { return mat[0).length; | // Broj kolona. private void proveriInd (int i, int j) throws GMatInd [| // Provera if (i=mat.length || j<0 [| j3>mat[0).length) ff indeksa. throw new GMatInd (1, 3); ) // Postavljanje elementa. public Matr postavi (int i, int j, double b) throws GMatind { proveriInd (i, 3); mat{i){j) = b; return this; } public double donvati (int i, int j) throws GMatInd // Dohvatanje { proverilInd (i, j)# return mat[i)[j]: } // elementa. public Matr kopija () [ // Stvaranje kopije. Matr m = new Matr (mat.length, mat([0).length); for (int i=0; i=niz.length) throw new GPolIndeks (i); 4£ (niz[i] '= null) throw new GPolZauzeto (i); if (q + p.d() > maxQ) throw new GPolTezina (p); nizfi]) = pr gq += p.Q ()7 return this; i public Polica stavi (Predmet p) f/f Stavijanje na prvo slobodno mesto. throws GPolTezina, GPolPuna [ if (q + p.Q() > maxQ) throw new GPolTezina (p); int i = 0; while (i=niz.length) throw new GPolindeks (i); if (niz[i) == null) throw new GPolPrazno (i); Predmet p = niz({i); niz[i] = null; gq -= p.Q (); return p; } public Predmet dohvati (int i) // Dohvatanje na datom mestu- throws GPolIndeks, GPolPrazno { if (i<0 || i>=niz.length) throw new GPolIndeks (i); if (niz{i]) == null) throw new GPolPrazno (i); return niz[i}]; ) Public boolean prazno (int i) throws GPolindeks | // Da li je mesto if (i=niz.length) throw new GPolIndeks (i); // prazno? return niz[{i) == null; } public int kapacitet() [ return niz.length; |) // Kapacitet police. public int slobodno {) | // Broj slobodnih mesta. int k = 0; for (int i=0; i=0; s = s*x + a.dohvati({i--)); } catch (GVekt g) [} : return s; ) public double I (double x) ( // Vrednost double s = 0; *// integrala. try | - for {int i=a.maxInd(); i>=0; s = s*x + a.dohvati(i) / (i-- *1))7 } catch (GVekt g) {) return 5 * x; i Zadatak 6.7 #f IntegraliT.java - Ispitivanje ra¢unanja integrala. import integrali.*; public class IntegraliT { public static void main (String[] varg) [ radi: while (true) [ Fun fun = null; try { System.out.print ("\nFunkcija (8, 0, P, L, .)? "); switch (Citaj.Char ()) { case 's': case ‘S': fun = new Sin (); break; case 'o': case 'O': fun = new Oscil (); break; case 'p': case 'P': { System.out.print ("Red polinoma? "); int n = Citaj.Int (); Poli p = new Poli (n); while (true) | System.out.print ("Indeks i vrednost koeficijenta? "); int i = Citaj.Int (); if (i<0) break; p-postavi(i, Citaj.Double (}); } fun = p; . break; : } © case '1'; case 'L': fun = new Log (); break; case '.': break radi; default: throw new usluge.Greska ("Nedozvoljen izbor!"); } . OP errr esesssces eee F System.out.print ("Interval? "); } _ Zadatak 6.5 | System.out.println ("Integral= " + fun.I (Citaj.Double(), Citaj.Double()}); eateh (usluge.Greska g) [ System.out.println (g); catch (vektor.GVekt g) { System.out.printin (g); § java IntegraliT Interval? -5 5 Integral= 206.66666666666657 Funkeija (S, 0, P, Ly, «.)?7 a faterval? 0 3.14159 Integral= 1.99955999999964793 Funkcija (S, O, P, Lb, «J? k *** Nedozvoljen izbor! Funkcija (S, O, P, L, .)?1 Interval? -1 1 *** Ne postoji logaritam od -1.0! Funkcija (S, O, P, L, .J? 1 Interval? 1 10 Integral= 13.673735099805986 Funkeija {S, 0, PB, L, .)? p Funkcija (S, 0, P, Ly, .)? p Red polinoma? 3 Red polinoma? 3 Indeks i vrednost koeficijenta? 3 -1 Indeks i vrednost koeficijenta? 6 1 Indeks i vrednost koeficijenta? 2 2 *** Indeks je izvan opsega! Indeks i vrednost koeficijenta? 1 <3 Indeks i vrednost koeficijenta? 0 4 Indeks i vrednost koeficijenta? -1 Funkeija (8, 0, 2, Lb, 2)? Zadatak 6.7 6 lzuzeci idatak 6.8 Funkcije za koje mogu da se stvaraju izvodi, monomi, eksponencijaine funkcije / zbirovi funkeija apisati na jeziku Java sledece klase: * Apstraktnoj fierkeiji moze da se izratuna vrednost za datu vrednost realne nezavisno promenijive i moze da se stvori funkeija koja predstavija njen prvi izvod, Tekstualni oblik predstavija algebarski oblik funkcije. : Monom je funkcija oblika ax’ (podrazumevano x), a njen izvod je abx”'. Tekstualni oblik je a*xb, ede su ai 5 vrednosti parametara monoma. + Eksponencijalna funkcija je funkcija oblika ae" (podrazumevano e'), a njen izvod je abe™. Tekstualni oblik je a*exp (b*x) , gde suai 6 vrednosti parametara eksponencijalne funkcije. « Zbir funkcija je funkcija koja mo%e da sadrdi zadati broj funkcija (podrazumevano 2). Stvara se prazan, posle Gega funkeije mogu da se dodaju jedna po jedna. Pokusaj stavijanja funkcije u pun zbir funkcija se prijavljuje izuzetkom odgovarajuceg tipa. Vrednost zbira funkeija je zbir vrednosti sadrZanih funkcija. Izvod zbira funkcija je zbir izvoda sadréanih funkcija. Tekstualni oblik zbira funkeija je (fur) +...+ (fun), ede je fum tekstualni oblik jedine sadrzane funkcije. apisati na jeziku Java program koji napravi jedan zbir funkcija kapaciteta koji se zadaje kao parametar lavne funkcije, dodaje nekolike prostih funkeija (monoema ili eksponencijalne funkcije) citajuci potrebne odatke s glavnog ulaza, ispi8e algebarski oblik dobijenog zbira fimkcija i njegovog izvoda na glavnom lazu | posle tabelira vrednosti zbira funkcija i njegovog izvoda za svak0 XpinStStinax $a korakom Ax. Pa- wnetri tabeliranja zadaju se kao parametri glavne funkcije. l\esenje: f/f Fun.java - Interfejs za funkcije. package izvodi; public interface Fun [ double f (double x); f/f Vradnost funkcije. Fun izv (); f/f Izved funkcije. String toString (); // Tekstualni oblik. // Monom.java - Kiasa monoma. package izvodi; public class Monom implements Fun [ private double a, b; // Parametri. public Monom (double aa, double bb) /f/ Inicijalizacija. { a = aa; b = bb; } public Monom {) {a =b = 1; } public double f (double x) // Ragéunanje vrednosti. { return a * Math.pow {x, b); ) } lauzeci Zadatak 6,8 139 public Fun izv () f/f Stvaranje izvoda. { return new Monom (a*b, b-1); } public String toString () Tekstuaini oblik. ( geturn a + ""k*" + Bb } // Ekspon.java ~ Klasa eksponencijalnih funkcija. package izvodi; public class Ekspon implements Fun { private double a, b; Parametri. public Ekspon (double aa, double bb) Inicijalizacija. { @ = aa; b = bb; } public Ekspon () ( a= b 1; } public double f (double x) Raéunanje vrednosti. { return a * Math.exp (b * x); } | public Fun izv () Stvaranje izvoda. { return new Ekspon (a*b, b): } public String toString () Tekstualni oblik. { return a + "*exp(" +b + "*x)"; ) /f GZbirFunPun.java - Klasa za greske: Zbir funkcija je pun. Package izvodi; public class GZbirFunPun extends Exception [ public String toString () // Tekstualni oblik. { return “"** Zbir funkcija je pun!"; } // tbirPun.java - Klasa zbirova funkcija. package izvodi; public class ZbirFun implements Fun {| private Fun[] niz; // Niz funkcija. private int duz; // Broj popunjenih mesta. public zbirFun (int n) { niz = new Fun [n]; } f/f Inicijalizacija. 1 public ZbirFun ({) { this (2); } Zadatak 6.8 140 public 2birFun dodaj (Fun f) throws GZbirFunPun { // Dodavanje funkcije. | af (duz == niz.length) throw new GZbirFunPun ({); niz(duz++] = £; return this; i i } | public double f (double x) [ // Raéunanje vrednosti. double s = 0; for (int i-0; i 0) s.append ('t'); s.append ('(').append (niz[i]).append (‘)')? } | return s.toString (); } // TzvodiT.java - Ispitivanje stvaranja izvoda. import izvodi.*; import usluge.Greska; ==! public class [zvodiT [{ public static void main (String[] varg) { ZbirFun zbir = new ZbirFun (Integer.parseInt (varg[{0])); try [ radi: while (true) { | double a, b; char vrs; System.ocut.print ("Vrsta (M, E, *)? "); ) switch (Citaj.Char ()) { case 'm': case 'M': System.out.print ("a,b? "); zbir.dodaj (mew Monom (Citaj.Double(), Citaj.Double())); | break; case 'e': case 'E': System.out.print ("a,b? "); zbir.dedaj (mew Ekspon (Citaj.Double({), Cita}.Double(})); | break; case '*': break radi; ! default: throw new Greska ("Nedozvoljeni izbor!"); } } | Fun izvod = zbir.izv (); System.out.println ("Fun= " + zbir ); System.out.println ("Izv= " + izvod); | 6 lzuzeci Zadatak 6.8 141 double xmin = Double.parseDouble (varg[1]), xmax = Double.parseDouble (varg[2]), dx = Double.parseDouble (varg[3])i for (double x=xmin; x<=xmax; x+=dx) System.out.printin (x + "\t" + zbir.f(x) + "\t" + izvod.£(x)); } catch (Exception g) { System.out.println (g); } } $ java IzvodiT 5 -2 2 .5 Vrsta (M, E, *)? m a,b? 42 Vrsta (M, E, *)? e@ a,b? .5 -2 Vrsta (M, E, *}?™ a,b? 34 Vrsta (M, E, *}? * Fun= (4,0*x*2.0)+(0.5*exp (-2.0*x))+(3.0*x*4.0) Izv= (8.0*x*1.0)+(-1.0*exp(-2.0*x))+(12.0*%x*3.0) -2.0 91.29907501657212 -166.59815003314424 1.5 34.23026846159384 -72.58553692318768 -1.0 10.694528049465326 -27.389056098930652 @.5 2.5466409142295228 ~-8.218281828459045 0.0 0.5 -1.0 O.5 1.3714397205857212 5.132120558828557 1.0 7.067667641618306 i19.864664716763386 1.5 24,21239353418393 52.45021293163214 2.0 64.00915781944437 111.98168436111126 nn Zadatak 6.8 6 lzuzeci = ST 6 lzuzeci Zadatak 6.9 142 Zadatak 6.9 MaSiné, masine za sfere, maSine za kvadre j radnici Koristeéi tipove predmeta iz zadatka 5.4 napisati na jeziku Java sledece tipove: « Apstraktna waSina moze da proizvodi apstraktni predmet od materijala zadate specifitne teZine i zna se koliko je predmeta od datog materijala proizvela ta masina. Moze da se dohvati oznaka vrste proizvoda koje data maSina proizvodi | broj proizvedenih predmeta, MoZe da se promeni materijal od éega se prave predmeti, i da se dohvati specifitna teZina kori3¢enog materijala. « MaSina za kvadre je masina koja moze da proizvedi kvadre zadatih dimenzija. Parametri magine (dimenzije kvadra) ne mogu da se promene, ali mogu da se dohvate. + Maina za sfere je maSina koja moze da proizvodi sfere zadatog polupreénika. Parametar masine (polupreénik sfere) ne moze da se promeni, ali moze da se dohvati. ¢ Radnik ima ime i jedinstven, automatski generisan identifikacioni broj. Izraduje predmete odredene viste pomocu odgovarajuée magine. MaSina na kojoj radnik radi moZe da se promeni. Zna se koliko je predmeta radnik izradio na magini na kojoj trenutno radi. Radnik moze da ne bude rasporeden ni na jednu maSinu. U tom slucaju pokuSaj izrade predmeta ili dohvatanja broja izradenih predmeta se prijavijuje izuzetkom odgovarajuceg tipa. Tekstualni oblik radnika sadréi ime i identifikactoni broj radnika, U sluéaju da je radnik rasporeden na neku maSinu, dodaje se i vrsta predmeta koje trenutno izraduje 1 braj proizvoda koje je izradio na toj magini od pogetka rada na njoj. Napisati na jeziku Java program za ispitivanje prethodnih tipova. ReSenje: _ | predmetil. Predmet (Zadatok 5.41 ae + at L\ ~ : s (Zadewok 5.4} (Zadaiak 6,5) . | predmetil.Sfera le [Massfera | H Vy (Zadatak 5.4 _ usluge.Greska ‘radionica // Masina.java - Apstraktna klasa maSina. package radionica; import predmetil.Predmet; public abstract class Masina (| protected double spTez; f/ Specifiéna teZina pravljenih predmeta. protected int br; f/f Broj napravijenih predmeta. protected Masina (deuble s) { spTez = s; } // Inicijalizacija. public abstract char vrsta (); // Vrsta pravijenih predmeta. public int bro} {) {| return br; } // Broj napravijenih predmeta. public double uzmiSpTez ({) ({ return spTez; ) // Dohvatanje spec. teZzine. 143 public void postaviSpTez (double s) // Postavijanje spec. teZine. { spTez = s; br = 0; } public abstract Predmet napravi (); // Pravijenje predmeta. } // MasSfera.java - Klasa maSina za sfere. public class MasSfera extends Masina private double r; // Polupreénik praviljenih sfera. public MasSfera (double ss, double rr) // Inicijalizacija. { super (ss); r= rr; } double dohvatiR () { return r; } /f Dohvatanje poluprecnika. public char vrsta (|) | return Sfera.VR; } // Vrsta pravijenih proizv. public Predmet napravi () // Pravijenje sfere. | { br++; return new Sfera (spTez, r); } // MasKvad.java - Klasa maSina za kvadre. | | public class MasKvad extends Masina { | private double a, b, c; // Dimenzije praviljenih kvadara. public MasKvad (double ss, double aa, double bb, double cc) // Inicijali- { super (55); a = aa; b = bb; c = cc; } fi zacija. | double dohvatiA () { return a; } //f Dohvatanje dimenzija double dohvatiB () | return b; | /f pravljenih kvadara. double dohvatiC () { return c; } public char vrsta () { return Kvadar.VR; } // Vrsta pravljenih predmeta. | | public Predmet napravi {) // Pravijenje kvadra. { br++; return new Kvadar ({spTez, a, b, c); ) Zadatak 6.9 6 lzuzeci // GNemaMas.java - Klasa za greSke: Radnik nema maSinu. package radionica; import usluge.Greska; ===! Zadatak public class GNemaMas extends Greska { String ime; int id; // Ime i identifikator problematiénog radnika. public GNemaMas (String iime, int iid) // Inicijalizacija. { ime = iime; id = iid; } public String ime () [{ return ime; } // Dohvatanje atributa. public int id () [ return id; } public String toString () [ f/f Tekstvalni oblik. return "*** Radniku “" + ime + ", id " + id + ", nije dedeljena masina!"; // Radnik.java - Klasa radnika. Package radionica; © import predmetil.Predmet; public class Radnik { private static int ukId; ff Poslednje koriséeni identifikator. private int id = ++ukId; // Identifikator radnika. private String ime; // Ime radnika. private Masina mas; // MaSina koju radnik koristi. private int br; // Broj napravijenih proizvoda na masini. public Radnik (String iime) { ime = iime; } // Inicijalizacija. public int dohvatild () ( return id; } // Dohvatanje identifikatora public String dohvatilme {) { return ime; } // i imena. public Radnik rasporedi (Masina m) // Rasporedivanje na maSinu. ( mas = m; br = 0; return this; } public Masina dohvatiMas () [ return mas; } // Dohvatanje masine. public int broj () throws GNemaMas [ ff Broj napravljenih if (mas == null) throw new GNemaMas (ime, id); // predmeta. return br; } public Predmet napravi () throws GNemaMas ( // Pravljenje predmeta. if (mas == null) throw new GNemaMas (ime, id); br++; return mas.napravi (); } ee eee Zadatak 6.9 public String toString () | // Tekstualni oblik. String s = ime + "/" + id; if (mas '= null) s 4+=."(" + mas.vrsta() + "," + br + "j)"™; return 5s; // RadionicaT. java - Ispitivanje klasa maSina i radnika. import radionica.*; public class RadionicaT ( public static void main (String[] varg) [ try { MasKvad ml = new MasKvad (0.5, 1, 2, 3)i MasSfera m2 = new MasSfera (0.7, 2);7 Radnik marko = new Radnik ("Marko"); System,out.println (marko); marko.rasporedi (m1); for (int i=0; i<10; i++) marko.napravi (); System.out.printin (marko); Marko.rasporedi (m2); for (int i=0; i<5; i++) marko.napravi (); System.out.printin (marko) ; marko.rasporedi (null); for {int i=0; i<12; i++) marko.napravi (); System.out.println (marko); catch (GNemaMas g} [ System.out.println (g); $ java RadionicaT Marko/1 Marko/1(K,10) Marko/1 (5,5) *** Radniku Marko, id 1, nije dodeljena masina! Zadatak 6.9 6 lruzec! 146 Zadatak 6.10 Casovnici, pokretni radnici, kupci, prodavei i radnje Napisati na jeziku Java sledeée tipove za simuliranje rada radnje za proizvodnju i prodaju predmeta: » Casovnik studi za merenje vremena. Pokretni objekti (iz zadatka 5.8) mogu da se registruju kao kli- jenti kod dasovnika radi obaveStavanja o protoku vremena. Kada se Casovnik pokrene svoje klijente obaveStava o protoku vremena zadatim korakom do zadatog ukupnog vremena. Klijenti koji presta- ju sa radom mogu da se odjave od Casovnika. J Pokretan radnik je radnik (iz zadatka 6.9) koji za proizvodnju predmeta (iz zadatka 5.4) troSi pro- menljivo vreme do zadate gornje granice. Napravljene predmete stavlja na odredenu policu (iz za- datka 6.4). + Kupac ima jedinstven, automatski generisan, identifikacioni broj 1 kupuje predmet zadate vrste. Tekstualni oblik kupca je Kid (vr) , gde su: id — identifikacioni broj kupca, a vr — oznaka vrste pred- meta koji kupuje. o Ulaz u radnju je pokretan objekat kroz Koji kupci ulaze u promenljivim vremenskim intervalima sa zadatom najvecom duzinom intervala. Kupci staju u red da bi sa¢ekali da budu posluzeni. Prodavae je pokretan objekat koji posluZuje kupce. PosluZivanje traje promenljivo vreme sa zada- ; tim najduzim trajanjem. Kupcu se daje prvi predmet Zeljene vrste sa police. Ako takvog predmeta a nema kupac odlazi praznih ruku. t Radnja sadr2i jedou policu zadate nosivosti i broja mesta za odlaganje predmeta, moZe da sadrzi najviSe 10 maSina (iz zadatka 6.9) za proizvodnju predmeta. Radnja ima jedan ulaz i jednog pro- davea. Stvara se prazna posle Sega mogu da se unose magine u radnju i da se zaposle radnici koji se odmah rasporeduju na neku od maSina. Radnici mogu i da se otpuste iz radnyje. . Konfliktne situacije prijavljivati odgovarajuéim izuzecima. Napisati na jeziku Java program za ispitivanje prethodnih klasa. ReSenje: radionica.Radnik - ; 4 ak 6.9) i : i - sigetags ras > pokretni,Pokretan |! radionica.Masina || (Zadetak 6.9) 6 lzuzeci Zadatak 6.10 147 // Casovnik.java - Klasa Gasovnika. package radnja; import pokretni.Pokretan; import liste.*; public class Casovnik [ private Lista kiljenti = new Lista (); // Lista klijenata. public Casovnik dodaj (Pokretan k) “ff Dodavanje klijenta listi. { kiljenti.dodaj (k); return this; } ¢/ Izbacivanje klijenta iz liste. public Casovnik izbaci (Pokretan k) throws GCasNemaKli { try { kiljenti.izbaci (k); } catch (GLstNemaObj g) { throw new GCasNemaKli (k); } return this; } /*/ Parametri Casovnika: private double dt; */ - korak Gasovnika, private double t; // - trenutno vreme, private double tMax; ¢f ~ trajanje rada. public double dt () ( return dt; } // Dohvatanje parametara Casovnika. public double t () { return t; } public double tMax () { return tMax; } public void radi (double dt, double tmMax) ( // Rad Gasovnika. this.dt = dt; this.tMax = tMax; for (t=0; t<=tMax; tr=dt) { System.out.printin ("Vreme: " + t); for (kiljenti.naPrvi(); kiljenti.imaTek(); kiljenti.naSledeci ()) try { ((Pokretan)kiljenti.dohvatiTek()).proteklo (dt); } catch (GLstNemaTek g) [} // GCasNemaKli.java - Klasa za greske: Nema trazenog klijenta Gasovnika. package radnja; import pokretni.Pokretan; public class GCasNemaKli extends usluge.Greska ( Private Pokretan klijent; // Problematiéni klijent. public GCasNemaKli (Pokretan k) // Inicijalizacija. { super ("Ne postoji klijent ("+k + "]"); klijent = k; } public Pokretan klijent () { return klijent; } // Dohvatanje klijenta. ) Zadatak 6.10 6 lzuzeci // PokRadnik.java - Klasa pokretnih radnika. package radnja; radionica.*; 4 pokretni.Pokretan; ==; Zadaiak 5.8 polica.*: mote: Zadatak 6, predmetil.*; ndaterk class PokRadnik extends Radnik implements Pokretan | private Polica pol; “¢/ Odredigna polica. Private double = maxtT; // NajduZe vreme proizvodnje predmeta. private double t; /f Preostalo vreme do narednog dogadaja. private Predmet pred; ff Sledeéi proizvedeni predmet. public PokRadnik (String ime, double tMax, Polica p) // Inicijalizacija. ( super (ime); pol = p; maxT = tMax; } public PokRadnik (String ime, double tMax) [ this (ime, tMax, null); } public PokRadnik polica (Polica p) /f Pridruzivanje police. ( pol = p; return this; } public Pokretan proteklo (double dt) { /f Sledeéi korak rada, LE ((t <= dt) <= 0) [ try [ : if (pred != null) [ if (pol == null) throw new GRadNemaPol (this); pol.stavi (pred); System.out.println ("Radnik " + this + " je stavio " + pred); } pred = napravi (); t = Math.random () * maxT; catch (GPolica g) | System.out.println ("Radnik " + this + " je zatekao punu policu"); eatch f{usluge.Greska g) | System.out.printin (g); return this; // ®upac.java - Klasa kupaca. package radnja; prereenseenereeeees ren import predmetil.Predmet; Fr Zadatak 5.4 public class Kupac f private static int ukId; // Poslednje korisceni identifikator. private int id = ++tukid; // Identifikator kupca. ; private char vrsta; // Vesta predmeta koji se kupuje. public Kupac (char v) { vrsta = v; } // Inicijalizacija. public int dohvatiId () { return id; } // Dohvatanje identifikatora. public char dohvatiVrs () { returm vrsta: }| // Dohvatanje vrste predmeta. 6 truzeci Zadatak 6.10 public void usluzen (Predmet p) [ // Preuzimanje predmeta. System.out.println ( "Kupac "“ + this + * " + (p!=null ? “je dobio " + p “nije dobio nista") Vi | // Tekstualni oblik. public String toString () { return "K" + id + "(" + vrsta + ")";7 } // Radnja.java - Klasa radnji. package radnja; ‘ impert polica.Polica; »- Zadatak 6.4 — import pokretni.Pokretan; ===! Zadatak3.8°; import radionica.Masina; = Zadalaké.9 + import predmetil.Predmet; == Zadatak 5.4, import liste.Lista; | Zadatak 6.5 public class Radnja [ private Masina[] masine = new Masina [10]; // MaSine za proizvodnju. private int brMas; // Broj maSina. private Polica polica; // Polica sa artiklima. private Casovnik casovnik = new Casovnik (); // Generator takta. private Lista kupci = new Lista [); #/ Kupcei u radnji. public Radnja ( f/f Inieijalizacija: double maxQ, // - nosivost police, int kap, // - broj mesta na polici, double maxUlaz, // - najduze vreme do ulaska kupea, double maxKup // ~ najduge vreme kupovine. gt polica = new Polica (kap, maxQ); Casovnik.dodaj (new Ulaz (maxUlaz)); casovnik.dodaj (mew Prodavac (maxKup)) ; } public Radnja dodajMas (Masina mas) // Nabavka masine. ( masine[brMas++]) = mas; return this; | public Radnja zaposli (PokRadnik radnik) | // Zaposijavanje radnika. easovnik.dodaj (radnik); radnik.polica (polica); radnik.rasporedi (masine[ (int) (Math. random() *brMas) }}); System.out.println ("Zaposlen je radnik " + radnik); return this; } // OtpuStanje radnika. public Radnja otpusti (PokRadnik radnik) throws GRadNemaRad { try { casovnik.izbaci (radnik); } catch (GCasNemaKli g) { throw new GRadNemaRad (radnik); } return this; } public void radi (double dt, double maxT) // Radno vreme radnje. { casovnik.radi (dt, maxT); )} Zadatak 6.10 6 lzuzeci in | 150 private class Ulaz implements Pokretan { // KUASA ULAZA U RADNJU. private double maxT; // NajduZe vreme do ulaska kupea. private double t; // Preostalo vreme do narednog dogadaja. private Kupac kup; // Sledeéi kupac koji ulazi. private Ulaz (double tMax) { maxT = tMax; } // Inicijalizacija. public Pokretan proteklo (double dt) [ ¢f Sledeéi korak rada. if ((t -= dt) <= 0) { try [ if (kup != null) [ kupti.dodaj (kup); System.out.println ("Kupac " + kup + " je usao"); } 3 int i = (int) (Math. random()*brMas); kup = new Kupac (masine[i].vrsta()}; t = Math.random () * maxT; } catch (Exception g) {} } return this; } ) // class Ulaz private class Prodavac implements Pokretan ( // KLASA PRODAVCA. private double maxT; // NajduZe vreme kupovine. private double rt; // Preostalo vreme do narednog dogadaja. private Kupac kup; // Kupac koji kupuje. private Prodavac (double tMax) { maxT = tMax; } // Inicijalizacija. public Pokretan proteklo (double dt) { ¢f Sledeéi korak rada. if ((t -= dt) <= 0) { if (kup != null) { int i; Predmet p = null; for (i=0; i=n) return niz{i]; ) public abstract Zbirka dodaj protected void poveca} () [ int k = (n>50 ? n/10 5): int[] pom = new int[n+k]; for (int i=0; i=n) throw new GIndeks (i); int b = niz[{i], m = niz.length - n; if (m > niz.length/5 && m> 5) [ // - ako je bar 20% slobodno, m = (niz.length>10 ? niz.length/10 : 5); // skrati niz za 104, int[] pom = new int [niz.length - m); /f ali bar za 5. for (int j=0, k=0; j 0) s.append (',")? s.append (niz[i});’ } return s.append (')'}.teString(); } // UNUTRASNJA KLASA ITERATORA ZA NIZOVE. protected abstract class AlterAN implements Iterator ( protected int tek = 0; f/f Indeks teku¢eg elementa. public Iterator naPocetak () // Pomaranje na poéetak zbirke. { tek = 0; return this; } public Iterator naSledeci () // Pomeranje na sledeci element. { tek++; return this; } public boolean imaTek () // Ima li tekuéeg elementa? { return tek < nm; } public int dohvatiTek () throws GNemaTek { // Dohvatanje tekuceg if (!imaTek ()) throw new GNemaTek (}; // e@lementa. return niz[tek]; ] // Postavljanje tekuceg elementa. public abstract Iterator postaviTek (int b) throws GNemaTek; public Iterator brisiTek (}) throws GNemaTek { // Brisanje tekuceg if (!imaTek ()) throw new GNemaTek (); ff elementa. try | brisi (tek); } catch (GiIndeks g) (}) return this; lzuzec| Zadatak 6.11 // NUNiz.java - Klasa nevredenih nizova. package zbirke; public class NUNiz extends ANiz | // Dodavanje public @birka dodaj (int b) [ // elementa. if (n == niz.length) povecaj (); niz([n++] = b; return this; } throws GiIndeks | // Postavijanje public Zbirka postavi (int i, int b) ff elementa. 4£ (i<0 || i>=n) throw new GIndeks (i); niz({i] = b; return this; } //f Stvaranje iteratora. public Iterator iterator () | return new IterNUNiz (); } // UNUTRASNJA KLASA ITERATORA ZA NEUREDENE NIZOVE. private class IterNUN extends AlterAN { public Iterator postaviTek (int b) throws GNemaTek { // Postavljanje if ('imaTek ()) throw new GNemaTek (); ff tekuceg niz(tek] = b; Sf elementa. return this; // UNiz.java - Klasa uredenih nizova. package zbirke; public class UNiz extends ANiz | public Zbirka dodaj (int b) | // Dodavanje if (n == niz.length) povecaj (); ff elementa. int i =n; while (i>0 6& niz({i-1l]>b) niz[i]) = niz[--i]; ; niz[i] = b; n++; return this; ) public tbhircka postavi (int i, int b) throws GIndeks (| // Postavljanje if (1=n) throw new GIndeks {i}; ff elementa. if (b > niz[i]) while (i< n &&6 nizf{i)=0 6&6 niz[i]>b) niz[iJ=niz[--i]; niz([i] = b; novoMesto = i; return this; } // Mesto elementa posle promene vrednosti. // Stvaranje iteratora. () | vetwrn new IterUNiz (); } private int novoMesto; public [Iterator iterator Zadatak 6.11 Bi Et a , J i 158 ih || f/f UNUTRASNJA KLASA ITERATORA 2A UREDENE NIZOVE. i) private class Iter! extends AlterAN | # | public Iterator postaviTek (int b) throws GNemaTek | // Postavljanje if (! imaTek|)) throw mew GNemaTek (); id fekuceg try [ postavi (tek, 5); |} catch [(GIndeks g) {} ff elementa. tek = novoMesto; return this; /¢/ ALista.java -— Apstraktna klasa listi. package zbirke; public abstract class ALista implements Zbirka (| protected Elem prvi, posi; ¢/f Podetak i kraj liste. protected int n; // Dudina liste. protected class Elem | // Element liste: int broj; // - sadrZani broj, Elem sled; f/f - sledeci element, Elem (int b, Elem pret) { f/f + inicijalizacija. broj = b; if (pret == null) { sled = prvi; prvi = this; } else { sled = pret.sled; pret.sled = this; } posl = this; | ) protected Elem nadji (int i) throws GIndeks { // NalaZenje elementa. if (i<0 || i>=n) throw new GIndeks (i); Elem tek = prvi; while (i-- > 0) tek = tek.sled; return tek; } public int vel () { return n; } // Veli&ina zbirke. public int dohvati (int i) throws Gindeks // Dohvatanje elementa. { return nadji (i).broj; } public abstract 2birka dodaj {int b); // Dodavanje elementa. // Postavljanje elementa. public abstract Zbirka postavi (int i, int b) throws GIndeks; public Zbirka brisi (int i) throws GIndeks [| // Izbacivanje elementa. Elem pret = nadji (i-1); if (pret.sled == null) throw new Gindeks (i); pret.sled = pret.sled.sled; n--; return this; } public Zbirka isprazni () // Prainjenje zbirke. { prvi = posl = mull; n = 0; return this; } public abstract [terator iterator ({); /f Stvaranje iteratera. SS 6 lzuzeci Zadatak 6.11 public String toString () { // Tekstualni oblik zbirke. Stringhuffer a = new StringBuffer ("("}; for (Elem tekeprvi; tek!=null; tek=tek-.sled) { | if (nek != prvi) s.append (','}; S.append (tek, broj); } return s.append (']") .testring(); | | // UNUTRASNJA KLASA ITERATORA ZA LISTE. protected abstract class AlterAL implements Iterator { Protected Elem tek=prvi, pret=null; /f Tekuéi I prethodni element. public [terator naPocetak () “/ Pomeranje na poGetak zbirke. { tek = prvi; pret = null; return this; | public Iterator naSledeci () { // Pomeranje na sledeci element. if (tek != null) (pret = tek; tek =-tek.sled;} return this; ) public boolean imaTek (){ return tek != null; |} // Ima li tekuceg ff elementa. public int dohvatiTek () throws GNemaTek ( // Dohvatanje tekudeg if (!imaTek ()) throw new GNemaTek (); tf elementa. feturn tek. broy; } // Postavljanje tekuceg elementa. public abstract Iterator postaviTek (int b) throws GNemaTek; public Iterator brisiTek () throws GNemaTek | // Brisanje tekuceg if (!imaTek ()) throw new GNemaTek (); ff elementa. pret.sled = tek = tek.sled; n--; return this; // NULista.java - Klasa neuredenih listi. package zbirke; | | public class NULista extends ALista | public 2@birka dodaj (int b) // Dodavanje { new Elem (b, posl); n++; return this; | // elementa. | | public Zbirka postavi (int i, int b) throws GIndeks // Postavijanie | { nmadji (i).broj) = b; return this; | tf elementa, public Iterator iterator () // Stvaranje { xeturn new [terNULista (}; | f/f diteratora, Zadatak 6,11 6 lzuzeci | i // UNUTRASNJA KLASA ITERATOPRA ZA NEUREDENE LISTE. private class IterNUL extends AlterAL [ public Iterator postaviTek {int b) throws GNemaTek | // Postavijanje if ('imaTek ()} throw new GNemaTek ()7 ff tekuceg tek.broj = b; return this; sf elementa. // ULista.java - Klasa uredenzh listti. package zbirke; public class ULista extends ALista | public Zbirka dedaj (int b) { // Dodavanje elementa. Elem tek = prvi, pret = null; while (tek!=null «66 tek.broj<= b) [ pret = tek; tek = tek.sled: ) novi = new Elem (b, pret): npret = pret; n+t+; return this; I private Elem novi, npret; // Novododati i njemu prethodni element. public Zbirka postavi (int i, int b) throws GIndeks ( // Postavljanje if (i<0 || i>=n) throw new GIndeks (i); f/f elementa. brisi (i}; xeturn dodaj (bj); } public [terator iterator { return new IterULista (); | ff \) // Stvaranje iteratora. // UNUTRASNJA KLASA ITERATORA ZA UREDENE LISTE. private class [terUL extends AliterAL |[ public Iterator postaviTek (int b) throws GNemaTek { // Postavijanje iff (! imaTek(}) throw new GNemaTek {); s/f tekuceg int i = 0; for (Elem t=prvi; t!=tek; t=t.sled) i++; // elementa. try { postavi (i, b); ) catch (GIndeks g) [{} tek = novi; pret = npret; return this; eee Zadatak 6.11 // ZbirkeT.java - Ispitivanje klasa zbirki. import zbirke.*; public class ZbirkeT | publie static void main (String(] varg) [ gbirka(] nizZb = { new NUNiz (}, new UNiz (), new NULista (}, new ULista () }; String(] nasl = ( "NEUREDJEN NIZ", "UREDJEN NI2Z", “NEUREDJENA LISTA", “UREDJENA LISTA" }; int|) niz = (6, Oy Fp Se es ee eb Be Sh Be Ss te Be Obs for (int i=0; i= niz.length) throw new Greska ("Nedozvoljen indeks!"); nizfind] = broj; return this; } public devble uzmi {int ind) throws Greska | // Dohvatanje kKomponente. af (ind < 0 || ind >= niz.length) throw new Greska ("Nedozvoljen indeks!"); return niz[ind]; 7 Niti Zadatak 7.1 | 3 i 4 i Seater, ac i sett gS ge Ral rp nla pte eA eae Sse eects 165 public String toString {) [{ f/f Tekstualni oblik. String s = "("; for (int i=0; i 0) s += "77 3 t= nizli]; } return s + ")"; } // fbir dva vektora: public static Vektorl zbir (Vektorl vl, Vektorl ve) throws Greska [ int n = vl.niz.length, n2 = v2.niz.iength; if (n != n2) throw new Greska ("Neusaglasene duzine vektora!"); Sabirac{] Sab = new Sabirac [n]; for (int i=0; i> Uporediv cee aaa! renal stani() + [zbor() kreni () + radit) zavrsi () 1 NizZnakova() J+ 200 ‘ fe saett. Decade ee isti() + uredi() eOpaeg | . ; | toString |) toString() + toString () // Uporediv.java - Interfejs uporedivih pojmova. package uredjivanje; public interface Uporediv | boolean manji (Uporediv u); // Da li je manji? boolean isti (Uporediv wu); Zadatak 7.3 7 Nit ee Neen chemise — a i // Gnak.java ~ Klasa uporedivih znakova. package uredjivanje: public class ¢nak implements Uporediv | private char zn; Vrednost znaka. Inicijalizacija. public Znak (char zn) [| this.zn = zn; } public char znak ({) | return zn; | Dohvatanje znake. public boolean manji (Uporediv u) Da li je manji? { greturn zn < ((Znak)u).z2n; } public boolean isti (Uporediv u) Da li je isti? {| geturn zn == ((Znak)u).zn; } public String toStrng () ( return Character.toString (zn); | f/f Casovnik.java - Alasa aktivnaih éasovnika. package uredjivanje; public class Casovnik extends Thread | private int dt; private char zn; private boolean radi = false; f/f Ispisivani znak. // Da li treba da radi? public Casovnik (int dt, char zn) f/f Inicijalizacija. { this.dt = dt; this.zn = an; start ()F | public void run () | “¢/ Tele niti. try | while (! interrupted ()) { af (! radi) synchronized (this) [| wait (); } sleep (dt); System.out.print (zn); } ) catch (InterruptedException g) [| ) public synchronized void stani () // Privremeno zaustavljanje. { radi = false; | public synchronized void kreni () f/f Nastavak rada. { radi = true; notify (); | . public void zavrsi () // Zavrgetak niti. { interrupt (); } 7 Niti Tekstualni oblik. // Interval ispisivanja. Zadatak 7.3 // Uredjivac.java - Kilasa apstraktnih uredivaca. package uredjivanje:; public abstract class Uredjivac [ private Casovnik cas; // SadrZani Gasovnik. public Uredjivac (Casovnik cas) f/f Inicijalizacija. | this.cas = cas; } public void uredi (Uporediv[] u) ( // Organizovanje uredivanja. cas.kreni (); radi (ud; cas.stani (); protected abstract void radi (Uporediv(] u); // Uredivanje. } // Tzbor.java - Klasa uredivacta metodom izbora, package uredjivanje; public class Izbor extends Uredjivac | public Izbor (Casovnik cas) { super (cas); |} // Inicijalizacija. protected void radi (Uporediv[] niz) | // Uredivanje. for (int i=0; i': x >>= y; break; ] prikazi (); } eatch (ArithmeticException g) [ reg([¥j.setText ("G RES K A"); } noviBro} = true; } public Kalkularor (int x, int y) | // Inicijalizacija: super ("“Kalkulator"); setBounds (x, y, 305, 242): setResizable (false); add (ploRegistrit), BorderLayout .NORTH) ; f/f ~ popunjévanjé prozora, add (ploCifre(), BorderLayout . CENTER) ; add (plodOsnove(), BorderLayout .WEST) ; add (ploOperatori(), BorderLayout.EAST) ; addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent d) // - unistavanje prozora. { i£ (unisti) dispose [); else setVisible (false); |) lh? } public Kaikulator {) [ this (250, 50); } f/f Podrazumevani konstruktor Dohvatanje rezultaca. public long rezultat () { return x; } ts public static void main (String[{) varg) { f/f Glavna funkcija. Kalkulator kalk = new Kalkulator (); kalk.setVisible (true); kalk.unisti = true; ‘Zadatak 8.4 § Grafiéka korisniéka powers ee pg = ee een a // KalkulatorT.java - Nezavisan program koji koristi kalkulator. import java.awt.*; import java.awt.event.*; public class KalkulatorT extends Frame {| Kalkulator kalk = new Kalkulator (420, 50)3 // Prozor kalkulatora. Label rez = new Label ("", Label .CENTER); // Géitana vrednost. private void popuniProzor () | // Popunjavanje prozora: add (rez, "North"); // = polje rezultata, Panel ploca = new Panel (); add {ploca, "South"); // - otvaranje Button dugme = new Button (“Otvori™); ‘f kalkulatora, ploca.add (duqme) ; dugme.addActionListener (new ActionListener () [ public void actionPerformed (ActionEvent d) [ kalk.setVisible (true); ye ploca.add (dugme = new Button ("Ocitaj")); #// - o€itavanje dugme.addActionListener (new ActionListener {) | sf kaklulatora, public void actionPerformed f(ActionEvent d) | rez.setText (Long-toString (kalk.rezultat ()));7 } bbe ploca,add (dugme = new Button ("Zatvori")); f/ - #atvaranje dugme .addActionListener (new ActionListener () { Af kalkulatora. public void actionPerformed (ActionEvent d) { kalk.setVisible (false); | a 8 Grafiéka korisniéka povré Zadatak 6.4 private KalkulaterT () | “/ Inicifalizacija: super ("Neki program"); setBounds (100, 50, 300, 200); popuniProzor (); “*f - popunjavanje prozora, addWindowListener (mew WindowAdapter () | public void windowClosing (WindowEvent d) // - uniStavanje oba {( kalk.dispose [(); dispose (); } f/f prozora. pete I public static void main (String[] varg) [ f/f Glavna funkeija. new KalkulatorT (}.setVisible (true); aio ue 7G gh Be maa Zadatak 8.4 8 Grafiéka korisnicka povrs TRS a ere 186 Zadatak 8.5 Kiasa za komunikaciju s grafiékom korisniékom povrsi i klasa kompleksnih brojeva s grafiékim prikazom Napisati na jeziku Java klasu koja omogu¢ava prenos podataka standardnih tipova izmedu date kompo- nente grafiéke korisni¢ke povrsi 1 programa, Progiriti klasu kompleksnih brojeva iz zadatka 4.2 tako da se svaka promena vrednosti kompleksnog broja (realnog ili imaginamog dela) prikazuje na dve grafitke komponente pridruzene kompleksnom broju. Omoguéiti i menjanje vrednosti kompleksnog broja na osnovu trenutnog sadrZaja pridruzenih kompo- nenti, Napisati na jeziku Java program s grafi¢kom korisniékom povrai za ispitivanje prethodnih klasa, ReSenje: usluge.Greska fZeademiah 6.5) "aha usluge.GKompNeOdgovara // Polje.java - Polje graficéke korisnicéke povrSi za unos i prikaz podataka. Komp 11 ¢Zeularirk 2) : package usluge; import java.awt.*; public class Polje | private Component komp; f/f Pridruzgena graficka komponenta. private int ind; // Indeks stavke u komponenti. private Component prozor; // Roditeljski prozor. public Polje (Component k, int i) // Inicijalizacija. throws GKompNeGdgovara [ if ('(k anstaneceof Label) &é '(k anstaneeof TextComponent) 6&4 '(k instanceof List) ) throw new GKompNeGdgovara (k); komp = k; ind = i; prozor = komp.getParent (); while (prozor.getParent() != null) prozor = prozor.getParent(); | public Polje (Component k) throws GKompNeOdgovara (| this (k, -l)i ) public Component komponenta () // Dohvatanje sadrZane komponente. | xeturn komp; } public int indeks () // Dohvatanje indeksa pridruzene stavke. { return ind; | 8 Grafiéka korisniéka powrs. Zadatak 8.5 187 f/f PRIKAZIVANJE PODATAKA: public void pisi (String tekst) { f/f - String; Le (komp instanceof Label) ((Label)komp).setText (tekst); else if (komp instanceof TextComponent) ((TextComponent)komp).setText (tekst); else if (komp instanceof List) (({List)komp).replaceItem (tekst, ind); prozor.validate (); } public void pisi {long broj) ff = long, ( pisi (Long.toString (broj)); } public void pisi (long broj, int baza} { pisi (Long.toString (broj, baza)); } public void pisi (double broj) // - double, {( pisi (Double.toString (broj)}; } public void pisi (boolean 5b) f/f ~ boolean, { pisi (mew Boolean (b).toString ()); } public void pisi (char znak) ff - char, { pisi (mew Character (znak)-.toString ()); } public void pisi (Object o) ff ~- Object. { pisi {o.toString ()}; } // UZIMANJE PODATAKA: publie String String ({) { f/f = String, 2 (komp instanceof Label) return (({Label)komp).getText (); else if (komp instanceof TextComponent) return ((TextComponent)komp).getText (); else if {komp instanceof List) return ((List)komp).getItem (ind); else return null; } public long Long [{) f/f - long, { return Long.parseLong (String {)); } public long Long (int baza) { return Long.parseLong (String (), baza); } public int Int () fé= int, { return Integer.parseInt (String ()); } public int Int (int baza) { return Integer.parseInt (String (), baza); } public short Short ()} ff - shore, { return Short.parseShort (String ()); } public short Short (int baza) { return Short.parseShort (String (), baza); | Zadatak 6.5 8B Grafiéka korisniéka povrs 188 i | public byte Byte {) ‘/ - byte, } { return Byte .parseByte (String ()); } public byte Byte (int baza) { return Byte.parseByte (String (}, baza}; } | public double Double () // - double, { return Double.parseBbouble (String ()); } public float Float () f/f - float, { return Float.parseFleat (String ()}; } public boolean Boolean {) f/f - booelan, ( return Boolean.parseBoolean (String ()}; } public char Char () ff > char. { return String ().charAt (0); | // GKompWeGdgovara.java - Klasa za gregke: Tip komponente grafiéke ff korisniGke povrsi ne odgovara. package usluge; import java.awt.*; public class GKhompNeOdgovara extends usluge.Greska [ public GKompNeOdgovara (Component k) { super ("Tip komponente " + k.getClass(}) .getName() + "ne odgovara za polje ulaza/izlaza"); // Kompl2.java - Kiasa kompleksnih brojeva s grafiékim prikazom. import usluge.Polje; Pa Zadatok 4.2 | public class Kompl2 extends Kompll ([ private Polje rPolje, iPolje; f/f Polja za prikaz delova broja. public Kompi2 (double r, double i, Polje rP, Polje iP) // Inicijalizacija. { super (xr, i); rPolje = rP; iPolje = iP; prikazi (); } Public Kompl2 (Polje rP, Polje iP) { this (0, 0, rP, iP): | public Kompl2 (double r, “double i) | super (r, i); } public Kompli2 () {} public Komp]? postavi {double r, double i) /f Postavijanje ( super.postavi (r, i); prikazi (); return this;| // vrednosti. public Kompl? postavi ({Kompll z) ( return postavi (z.re(), z-im ()); ) 8 Grafiéka korisniéka povrs Zadatak 3.5 public Kompl2 uzmi () if (rPolje != null) if (iPolje != null) return this; } public Kompl2 prikazi if (rPolje != null) if (iPolje != mull) return this; { // Uzgimanje vrednosti postaviRe (rPolje.Double Pee iz grafiékih (1) postavilm (iPelje.Double ()); // komponenti. ff Prikaz vrednosti ff u grafiékim ff komponentama. oO rPolje.pisi LPolje.pisi (re (im OQ? OM); Kolicnik 0.44 ip er pg pt et ee _Zhir| Raziika| Proiavod | [Ke 0.08 f/f PoljeT.java import usluge.*; import java.awt.*; import java.awt.event.*; - Ispitivanje klase polja graficke korisnicéke povrsi. public class PoljeT extends Frame | private Label rez; private Kompl2 prvi, drugi, private final String[] {"Zbir", "Razlika", private void popuniProzor () | Panel plo add (plo, “West") ; Ple.add (mew Label plo.add (new Label plo.add (rez new new Panel (new GridLayout // Oznaka vrste rezultata. /f Operandi i rezultat. /f Natpisi dugmadi. "Kolicnik"}; rezult; oper "Proizvod", ff Popunjavanje prozora: (3, 1)): // - ploGa za oznake f/f podataka, ("Pri ))s ("Drugi")); | Label Ch): add (pio = new Panel (new GridLayout (3, 2)), "“Center"); // = ploéea za try [ ff podatke, TextField re = new TextField (), im = new TextField {); plo.add (re); plo.add (im); prvi = new Kompl2 (mew Polje{re), new Polje (im)); | re = new TextField (); im = new TextField (); | plo.add (re); plo.add (im); drugi = new Kompl2 (new Polje(re), mew Polje (im)); Label r = mew Label (), i = new Label (); plo.add (r); plo.add (i); rezult = new Kompl2 (mew Polje(r), mew Polje (i)); ) catch (GKompNeOGdgovara g) (1) Zadatak 8.5 § Grafiéka korisniéka povrs oS 190 (f - ploéa za dugmad. add (plo = new Panel (), “South"); . DugmeAkcija osmatrac = new DugmeAkcija (); for (String s: oper) [ Button dugme = new Button (s); plo.add (dugme); i dugme.addActionListener (osmatrac); | I " ) “/ popuniProzor () is private class DugmeAkcija implements ActionListener { // Obrada dogadaja | public void actionPerformed (ActionEvent d) | ‘f dugmadi. / String op = ((Button) (d.getSource ())).getLabel (); # try [ | if (op, equals (oper[0])) { rezult.postavi (prvi.uzmi {).zbir {drugi.uzmi ())); else if (op.equals{oper[1])) regult.postavi (prvi.uzmi ().rcazlika (drugd.uzmi ()))} else if (op.equals(oper[2])) rezult.postavi (prvi.uzmi ().proizved (drugi.uzmi ())); ' else if (op.equals (oper[3])) rezult.postavi (prvi.uzmi ().kolicnik (drugi.uzmi ())); rez.setText (op); rez.setForeground (Color.BLACK): eatch (NumberFormatException g) [ rez.setText (“GRESKA"); rez.setForeground (Color.RED); validate (); ) } ) //f elass DugmeAkcija f/ Inicijelizacija: private PoljeT () { i super ("Kompleksna aritmetika"); i setBounds (100, 100, 300, 150); setResizable (false) ; r popuniProzor (); // = popunjavanje prozora, fh addWindowListener (mew WindowAdapter () { // - obrada degadaja prozora. re public void windowClosing (WindowEvent d) ( dispose (); |} H bya bet } #// PoljeTf) i public static void main (String[] varg) // GLAVNA FUNKCIJA. ( new PoljeT ().setVisible (true); } } “/ class PoljeT Zadatak 6.5 8 Grafidka karisniéka povré Zadatak 8.6 Uredivanje niza celih brojeva Koristeéi klase za uredivanje nizova iz zadatka 5.9 napisati na jeziku Java program s grafickom korisnié- kom povréi za uredivanje nizova celih brojeva. ReSenje: |; —; | le: | prereset ye 9985307066093941 Hy 097513729209630 loaa3427273865040 c s 2883876686929153 * Pobolisanametoda izbora 0207157294210451 © Meloda umetania 4 496039461279788 © Poboljsana metoda umets 5989 ( Meloda tamene suseda ™ Metoda podele @ Metoda izbora // Uredid.java - Uredivanje ‘/ nizova celih brojeva u // gqrafiékom okruienju. import java.awt.*; import java.awt.event.* prteeeceneee import uredjivaci.*; "me! Zadatak | import usluge.Uporediv; seme: 59 : Seen eects eens public class Uredi4d extends Frame | // Moguée duZine niza. private static int/] duzine = {100, 200, 500, 1000, 2000, 5000, 10000); private static Uredjivac() uredjivaci = | // Algoritmi uredivanja. new Metodalzbora {), new Metodalzbora2 (), new MetedaUmetanja (|), new MetodaUmetanja2 |), new MetodaZameneSuseda (), new MetodaPodele () Ve private Uporediv[] niz = new Ceo (100); // Niz za uredivanje. private Uredjivac uredjivac = uredjivaci[0); ff Trenutni uredivac. private TextArea prikaz = new TextArea (); // Polje za prikaz niza. private void puni () { ff Punjenje niza sluéajnim brojevima. for (dnt i=0; i

You might also like