Ласло Краус |
ИР2ОО2 Други колоквијум 7. 7. 2006. |
|---|
У пакету statistika постоје типови за рад са случајним бројевима који су приказани на слици. Ове типове није потребно реализовати.
Реализовати на језику Java следеће типове:
TextField) на коме приказује сваку промену стања придруженог посматрача.

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) (Java) Шта представља контејнерска компонента у пакету java.awt? Навести примере контејнерских компонената.
б) (Java) Како се може синхронизовати нит А са N других нити тако да нит А чека да те друге нити заврше метод run()?
в) (C#) У чему су разлике између вредносних и указаних типова?
///////////////// Не припада решењу колоквијума ///////////////////////
///
// Generator.java ///
package statistika; ///
public class Generator { ///
int klica; double min, max; ///
public Generator (int kl, double mi, double ma) ///
{ klica = kl; min = mi; max = ma; } ///
public int slBrojCeo () ///
{ return klica = 314159621 * klica + 907633385; } ///
public double slBroj () { ///
return min + ///
(max - min) * (slBrojCeo() + 2147483648.) / 4294967296.; ///
} ///
} ///
///
// Posmatrac.java ///
package statistika; ///
public interface Posmatrac { ///
void ispocetka (); ///
void azuriraj (double b); ///
double rezultat (); ///
String toString (); ///
} ///
///
// Srednja.java ///
package statistika; ///
public class Srednja implements Posmatrac { ///
private double s = 0; ///
private int n = 0; ///
public void ispocetka () { s = n = 0; } ///
public void azuriraj (double b) { s += b; n++; } ///
public double rezultat () { return s / n; } ///
public String toString () { return "srednja"; } ///
} ///
///
///////////////// Не припада решењу испита ////////////////////// ///
/// ///
// Minimum.java /// ///
package statistika; /// ///
public class Minimum implements Posmatrac { /// ///
private double min = Double.MAX_VALUE; /// ///
public void ispocetka () { min = Double.MAX_VALUE; } /// ///
public void azuriraj (double b) { if (b < min) min = b; } /// ///
public double rezultat () { return min; } /// ///
public String toString () { return "minimum"; } /// ///
} /// ///
/// ///
// Maximum.java /// ///
package statistika; /// ///
public class Maximum implements Posmatrac { /// ///
private double max = Double.MIN_VALUE; /// ///
public void ispocetka () { max = Double.MIN_VALUE; } /// ///
public void azuriraj (double b) { if (b > max) max = b; } /// ///
public double rezultat () { return max; } /// ///
public String toString () { return "maximum"; } /// ///
} /// ///
/// ///
///////////////// Не припада решењу испита ////////////////////// ///
///
// Subjekat.java ///
package statistika; ///
public abstract class Subjekat { ///
private Elem prvi, posl; ///
private class Elem { ///
Posmatrac posm; Elem sled; ///
Elem (Posmatrac p) { ///
posm = p; ///
if (prvi == null) prvi = this; ///
else posl.sled = this; ///
posl = this; ///
} ///
} ///
public Subjekat prijavi (Posmatrac p) ///
{ new Elem (p); return this; } ///
public Subjekat odjavi (Posmatrac p) { ///
Elem tek = prvi, pret = null; ///
while (tek!=null && tek.posm!=p) ///
{ pret = tek; tek = tek.sled; } ///
if (tek != null) { ///
if (pret == null) prvi = tek.sled; ///
else pret.sled = tek.sled; ///
if (tek == posl) posl = pret; ///
} ///
return this; ///
} ///
public void dostavi (double b) { ///
for (Elem tek=prvi; tek!=null; tek=tek.sled) ///
tek.posm.azuriraj (b); ///
} ///
} ///
///
///////////////// Не припада решењу колоквијума ///////////////////////
// Analizator.java
package statistika;
public class Analizator extends Subjekat implements Runnable {
private Thread nit;
private Generator gen;
private int n;
public void radi (Generator gen, int n) {
this.gen = gen; this.n = n;
(nit = new Thread (this)).start ();
}
public void run () {
for (int i=0; i<n; i++) dostavi (gen.slBroj());
}
}
// GrafPosmtrac.java
package statistika;
import java.awt.TextField;
public class GrafPosmatrac implements Posmatrac {
private Posmatrac posm;
private TextField tks;
public GrafPosmatrac (Posmatrac p, TextField t)
{ posm = p; tks = t; }
public void ispocetka ()
{ posm.ispocetka (); tks.setText (""); }
public void azuriraj (double b) {
posm.azuriraj (b);
tks.setText(Double.toString (rezultat()));
}
public double rezultat () { return posm.rezultat (); }
public String toString () { return posm.toString (); }
}
// Statistika.java
package statistika;
import java.awt.*;
import java.awt.event.*;
public class Statistika extends Frame implements ActionListener {
private TextField
tksKli = new TextField ("152763"),
tksMin = new TextField ("0"),
tksMax = new TextField ("1"),
tksN = new TextField ("1000");
private TextField[] prikazi = {
new TextField (10),
new TextField (10),
new TextField (10)
};
private Posmatrac[] posmatraci = {
new GrafPosmatrac (new Minimum(), prikazi[0]),
new GrafPosmatrac (new Maximum(), prikazi[1]),
new GrafPosmatrac (new Srednja(), prikazi[2])
};
private Analizator analizator = new Analizator();
public Statistika () {
super ("Statistika");
setBounds (100, 100, 380, 200);
setResizable (false);
addWindowListener (new WindowAdapter () {
public void windowClosing (WindowEvent d) { dispose (); }
});
Button dgm = new Button ("Radi");
dgm.addActionListener (this);
add (ploUnosParametara (), "North");
add (ploPrikazStatistike (), "Center");
add (dgm, "South");
}
private Panel ploUnosParametara () {
Panel plo = new Panel ();
plo.add(new Label ("klica:", Label.RIGHT)); plo.add (tksKli);
plo.add (new Label ("min:", Label.RIGHT)); plo.add (tksMin);
plo.add (new Label ("max:", Label.RIGHT)); plo.add (tksMax);
plo.add (new Label ("n:", Label.RIGHT)); plo.add (tksN);
return plo;
}
private Panel ploPrikazStatistike () {
Panel plo = new Panel (new GridLayout (0,1));
for (int i=0; i<posmatraci.length; i++) {
Panel pl = new Panel (); plo.add (pl);
pl.add (new Label (posmatraci[i] + ":"));
pl.add (prikazi[i]);
analizator.prijavi (posmatraci[i]);
}
return plo;
}
public void actionPerformed (ActionEvent d){
for (int i=0; i<posmatraci.length; i++)
posmatraci[i].ispocetka ();
analizator.radi (
new Generator (
Integer.parseInt (tksKli.getText()),
Double.parseDouble (tksMin.getText()),
Double.parseDouble (tksMax.getText())
),
Integer.parseInt (tksN.getText ())
);
}
public static void main (String[] varg) {
new Statistika ().setVisible (true);
}
}
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.