Ласло Краус |
ИР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.