Elektrotehnicki fakultet, Beograd  Ласло Краус СИ2ОО2
Испит
7. 7. 2006.

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

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

I део (први колоквијум)

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

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

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

а) Које је подразумевано право приступа за чланове класа и шта оно подразумева?

б) Која је улога статичких иницијализационих блокова и када се они извршавају?


II део (други колоквијум)

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

Коришћењем типова из првог дела, написати на језику Java следећи пакет типова:

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

а) У којим контекстима се користи кључна реч super и шта означава у сваком од случајева?

б) Шта се догађа ако два имплементирана интерфејса садрже методе који се разликују само по типу резултата?


III део (трећи колоквијум)

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

Коришћењем класа из првог и другог дела, написати на језику Java следећи пакет типова:

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

а) Како се на језику 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"; }                   ///
}                                                                   ///
                                                                    ///
///////////////// Не припада решењу ///////////////////////////////////

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

// 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());
  }
}

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

// 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
Последња ревизија: 1.9.2010.