Ласло Краус |
ИР2ОО2 Испит 7. 10. 2005. |
---|
Реализовати на језику Java следећи пакет класа:
(
x,
y,
z)
.
long
System.currentTimeMillis()
.
Реализовати на језику Java програм који направи једну збирку од неколико мерних тачака и потом је приказује у једном прозору.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Која је основна разлика између начина креирања објеката на језицима C++ и Java?
б) Да ли интерфејс може имати конструктор и зашто?
в) Зашто је понекад за реализацију програмских нити погоднија имплементација интерфејса Runable
од извођења из класе Thread
?
г) Шта је компонента (објекат класе Component
) на језику Java?
д) Упоредити JVM и .NET по појмовима платформске независности.
Реализовати на језику Java следећи пакет класа (класе изузетака опремити састављањем текста поруке):
K(
дужина,
ширина,
висина)
".
P(
дужина,
ширина,
висина)
".
Kuca:
", после у угластим заградама низ приказа саставних квадара од приземља навише, уз раздвајање зарезима, и на крају приказ пирамиде у заградама "<>
".
// Tacka.java package merenje; public class Tacka { private double x, y, z; public Tacka () {} public Tacka (double xx, double yy, double zz) { x = xx; y = yy; z = zz; } public double rast (Tacka t) { return Math.sqrt (Math.pow(x-t.x,2) + Math.pow(y-t.y,2) + Math.pow(z-t.z,2)); } public Tacka premesti (double xx, double yy, double zz) { x=xx; y=yy; z=zz; return this; } public String toString () { return "(" + x + "," + y + "," + z + ")"; } } // MernaTacka.java package merenje; import java.text.*; public class MernaTacka extends Tacka implements Runnable { private boolean kraj; private double T, suma_Tdt; private long t, suma_dt; private Thread nit; public MernaTacka (double x, double y, double z, double T0) { super (x, y, z); T = T0; (nit = new Thread (this)).start (); } public void run () { ispocetka (); while (! kraj) { try { Thread.sleep (3000 + (int)(Math.random()*5000)); } catch (InterruptedException g) {} long sad = System.currentTimeMillis (); long dt = sad - t; suma_Tdt += T * dt; suma_dt += dt; t = sad; T += Math.random() - 0.5; } } public double temp () { return T; } public synchronized double srTemp () { long dt = System.currentTimeMillis () - t; return (suma_Tdt + T * dt) / (suma_dt + dt); } public synchronized void ispocetka () { t = System.currentTimeMillis(); suma_Tdt = suma_dt = 0; } public void zavrsi () { kraj=true; nit.interrupt(); } public String toString () {return super.toString()+"\t"+T+"\t"+srTemp();} } // GZbirkaPuna.java package merenje; public class GZbirkaPuna extends Exception {} // GNemaTacaka.java package merenje; public class GNemaTacaka extends Exception {} // Zbirka.java package merenje; public class Zbirka { private MernaTacka[] niz; private int n; public Zbirka (int kap) { niz = new MernaTacka [kap]; } public Zbirka dodaj(MernaTacka m)throws GZbirkaPuna{ if (n == niz.length) throw new GZbirkaPuna (); niz[n++] = m; return this; } public void ispocetka () { for (int i=0; i<n; niz[i++].ispocetka()); } public void zavrsi () { for (int i=0; i<n; niz[i++].zavrsi()); } public double srTemp (Tacka C, double r) throws GNemaTacaka { double sr = 0; int k = 0; for (int i=0; i<n; i++) if (niz[i].rast(C) <= r) { sr += niz[i].srTemp(); k++; } if (k == 0) throw new GNemaTacaka (); return sr / k; } public String toString (Tacka C, double r) { StringBuffer s = new StringBuffer (); for (int i=0; i<n; i++) if (niz[i].rast(C) <= r) s.append (niz[i]).append ('\n'); return s.toString (); } } // Prozor.java package merenje; import java.awt.*; import java.awt.event.*; public class Prozor extends Frame implements Runnable { private Zbirka zbr; private boolean kraj; long t0; private Thread nit; private TextField tksX = new TextField ("0", 4), tksY = new TextField ("0", 4), tksZ = new TextField ("0", 4), tksR = new TextField ("9", 4); private Label oznVreme = new Label ("?"), oznSrTemp = new Label ("?"); private TextArea tksTacke = new TextArea (); public Prozor (Zbirka z) { super ("Merenje"); zbr = z; setBounds (100, 100, 500, 200); addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent d) { kraj = true; nit.interrupt (); dispose (); } }); Panel plo = new Panel (); plo.add (new Label("C:",Label.RIGHT)); plo.add (tksX); plo.add (tksY); plo.add (tksZ); plo.add (new Label (" r:", Label.RIGHT)); plo.add (tksR); add (plo, "South"); plo = new Panel (); plo.add (new Label ("t:", Label.RIGHT)); plo.add (oznVreme); plo.add (new Label (" Tsr:", Label.RIGHT)); plo.add (oznSrTemp); add (plo, "North"); add (tksTacke, "Center"); Button dgmIspocetka = new Button ("Ispocetka"); dgmIspocetka.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { zbr.ispocetka (); t0 = System.currentTimeMillis (); } }); add (dgmIspocetka, "West"); ( nit = new Thread (this)).start (); } public void run () { t0 = System.currentTimeMillis (); Tacka C = new Tacka (); while (! kraj) { try { Thread.sleep (1000); } catch (InterruptedException g) {} C.premesti (Double.parseDouble(tksX.getText()), Double.parseDouble(tksY.getText()), Double.parseDouble(tksZ.getText())); double r = Double.parseDouble (tksR.getText()); tksTacke.setText (zbr.toString(C, r)); oznVreme.setText (Long.toString ((System.currentTimeMillis() - t0)/1000)); try { oznSrTemp.setText (Double.toString (zbr.srTemp (C, r))); } catch (GNemaTacaka g) { oznSrTemp.setText ("???"); } validate (); } zbr.zavrsi (); } } // MerenjeT import merenje.*; public class MerenjeT { public static void main (String[] varg) { Zbirka zbr = new Zbirka (10); double[] x = { 1, 3, -2, 0, 3, 2, -4, -1}, y = { 0, -2, 2, 0, -1, 2, 1, 1}, z = { 2, 1, -3, 4, -1, 3, -1, 0}, T0 = {20, 15, 22, 0, 10, 8, 12, 7}; try { for (int i= 0; i<x.length; i++) zbr.dodaj (new MernaTacka (x[i], y[i], z[i], T0[i])); } catch (GZbirkaPuna g) {} new Prozor (zbr).setVisible (true); } }(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 31.8.2010.