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

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

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

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

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

(25 поена) Саставити на језику Java програм с графичком корисничком површи, према приложеној слици, који уређује низове случајних једноцифрених децималних целих бројева задатих дужина применом одабраног уређивача и приказујући кораке уређивања помоћу одабраног приказивача. На главном излазу приказивати 30 елемената по реду. Претпоставити да на графичкој површи сваки елемент низа, заједно са размаком, заузима по 11 тачака екрана.

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

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

а) У чему је разлика између типoва података byte и Byte на језику Јава?

а) Да ли референца на језику Јава може да буде типа неког интерфејса и зашто?

а) Објаснити механизам wait-notify у језику Јава.

а) Шта је ослушкивач (listener), а шта адаптер у терминологији пакета AWT?

а) Шта су својства (properties) и како се реализују у зрнима (beans) Јаве и језику C#?


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


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

// Prikazivac.java

package uredjivanje;

public interface Prikazivac {
  public abstract void prikazi (int[] niz);
}

// Konzola.java

package uredjivanje;

public class Konzola implements Prikazivac {
  private int k;

  public Konzola (int k) { this.k = k; }

  public void prikazi (int[] niz) {
    StringBuffer s = new StringBuffer ();
    int n = niz.length;
    for (int i=0; i<n; i++) { s.append (niz[i]).
      append (i%k==k-1 || i==n-1 ? '\n' : ' ');
    }
    System.out.println (s);
  }

  public String toString () { return "konzola"; }
}

// Prozor.java

package uredjivanje;
import java.awt.*;
import java.awt.event.*;

public class Prozor extends Frame implements Prikazivac
{ private TextArea tks = new TextArea ();
  private int t;

  public Prozor (String naslov, int sir, int vis, int t) {
    super (naslov); this.t = t;
    setBounds (0, 0, sir, vis);
    addWindowListener (new WindowAdapter () {
      public void windowClosing (WindowEvent d) { dispose (); }
    });
    add (tks);
  }

  public void prikazi (int[] niz) {
    setVisible (true);
    StringBuffer s = new StringBuffer ();
    int n = niz.length;
    int k = tks.getWidth () / t;
    for (int i=0; i<n; i++)
      { s.append (niz[i]).append (i%k==k-1 || i==n-1 ? '\n' : ' '); }
    tks.setText (s.toString ());
  }

  public String toString () { return "prozor"; }
}

// Uredjivac.java

package uredjivanje;

public abstract class Uredjivac implements Runnable {
  protected Prikazivac prik = null;
  protected int[] niz;
  protected boolean prekini = false;

  public void uredi (int[] niz, Prikazivac prik) {
    this.prik = prik;  this.niz  = niz;
    prekini = false;   new Thread (this). start ();
  }

  public void uredi (int[] niz) { uredi (niz, null); }

  protected abstract void uredi ();

  public void prekini () { prekini = true; }

  public void run () { uredi (); }
}

// Izbor.java

package uredjivanje;

public class Izbor extends Uredjivac {
  public void uredi () {
    int n = niz.length;
    radi: for (int i=0; i<n-1; i++)
      for (int j=i+1; j<n; j++) {
        if (niz[j] < niz[i]) {
          int p = niz[i]; niz[i] = niz[j]; niz[j] = p;
          if (prik != null) prik.prikazi (niz);
        }
        if (prekini) break radi;
      }
  }

  public String toString () { return "metoda izbora"; }
}

// Umetanje.java

package uredjivanje;

public class Umetanje extends Uredjivac {
  public void uredi () {
    int n = niz.length;
    radi: for (int i=1; i<n; i++)
      for (int j=i; j>0 && niz[j]<niz[j-1]; j--) {
        int p=niz[j]; niz[j]=niz[j-1]; niz[j-1]=p;
        if (prik != null) prik.prikazi (niz);
        if (prekini) break radi;
      }
  }

  public String toString () {return "metoda umetanja";}
}

// Program.java

import uredjivanje.*;
import java.awt.*;
import java.awt.event.*;

public class Program extends Frame {
  int[] niz;
  Prikazivac[] prik = { new Konzola (30), new Prozor  ("Niz", 200, 150, 11) };
  Uredjivac[]  ured = { new Izbor(), new Umetanje() };
  Uredjivac uredjivac = ured[0];
  Prikazivac prikazivac = prik[0];
  List lstPrik = new List(), lstUred = new List();
  TextField tksDuz = new TextField ("100");

  private Program () {
    super ("Uredjivanje");
    setBounds (200, 100, 300, 150);
    setResizable (false);
    addWindowListener (new WindowAdapter () {
      public void windowClosing (WindowEvent d) {
        uredjivac.prekini ();
        for (int i=0; i<prik.length; i++)
          if (prik[i] instanceof Frame) ((Frame)prik[i]).dispose ();
        dispose ();
      }
    });

    Panel plo = new Panel (); add (plo, "North");
    for (int i=0; i<prik.length; i++) lstPrik.add (prik[i].toString());
    lstPrik.select (0);
    plo.add (lstPrik);

    for (int i=0; i<ured.length; i++) lstUred.add (ured[i].toString());
    lstUred.select (0);
    plo.add (lstUred);

    plo = new Panel (); add (plo, "South");
    plo.add (new Label ("duz:", Label.RIGHT));
    plo.add (tksDuz);

    Button dgm = new Button ("Kreni"); plo.add (dgm);
    dgm.addActionListener (new DugmeAkcija());

    dgm = new Button ("Prekini"); plo.add (dgm);
    dgm.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent d) { uredjivac.prekini (); }
    });
  }

  private class DugmeAkcija implements ActionListener {
    public void actionPerformed (ActionEvent d) {
      if (prikazivac instanceof Frame) ((Frame)prikazivac).setVisible (false);
      uredjivac.prekini ();
      uredjivac = ured[lstUred.getSelectedIndex()];
      prikazivac = prik[lstPrik.getSelectedIndex()];
      niz = new int [Integer.parseInt(tksDuz.getText())];
      for (int i=0; i<niz.length; i++) niz[i] = (int)(Math.random() * 10);
      uredjivac.uredi (niz, prikazivac);
    }
  }

  public static void main (String[] varg) { new Program ().setVisible (true); }
}
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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