Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2
Други колоквијум
7. 7. 2006.

Аутори: Игор Тартаља и Ласло Краус

Задаци: 1 2 | Напоменe | Решења: 1

Поставка задатка 1 (укупно 70 поена) ( решење | почетак)

У пакету statistika постоје типови за рад са случајним бројевима који су приказани на слици. Ове типове није потребно реализовати.

Реализовати на језику Java следеће типове:

Поставка задатка 2 (30 поена) ( почетак)

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:

а) (Java) Шта представља контејнерска компонента у пакету java.awt? Навести примере контејнерских компонената.

б) (Java) Како се може синхронизовати нит А са N других нити тако да нит А чека да те друге нити заврше метод run()?

в) (C#) У чему су разлике између вредносних и указаних типова?


Напоменe ( почетак)


Решење задатка 1 ( поставка | почетак)


///////////////// Не припада решењу колоквијума ///////////////////////
                                                                    ///
// 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);
  }
}
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.