Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање на језику Java - колоквијуми
Други колоквијум
Друга група
29. 1. 2006

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

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


Напомене (садржај)


Решење задатка (поставка | садржај)

// Prikazivac.java

package histogram;

public interface Prikazivac {
  boolean prikazi (double[] niz);
}

// Uredjivac.java

package histogram;

public abstract class Uredjivac {
  protected Prikazivac prik;

  public Uredjivac (Prikazivac prik) { this.prik = prik; }

  public abstract void uredi (double[] niz);
}

// Izbor.java

package histogram;

public class Izbor extends Uredjivac {
  public Izbor (Prikazivac prik) { super (prik); }

  public void uredi (double[] niz) {
    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]) {
          double p = niz[i]; niz[i] = niz[j]; niz[j] = p;
          if (prik != null)
            if (!prik.prikazi (niz)) break radi;
        }
      }
  }
}

// Umetanje.java

package histogram;

public class Umetanje extends Uredjivac {
  public Umetanje (Prikazivac prik) {super(prik);}

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

// Histogram.java

package histogram;

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

public class Histogram extends Frame implements Prikazivac, Runnable {

  private Uredjivac uredjivac = new Izbor (this);
  private Thread nit = null;
  private boolean dalje = false;
  private double[] niz = null;

  private TextField tksDuz = new TextField ("20",  4),
                    tksMax = new TextField ("10",  4),
                    tksDt  = new TextField ("500", 4);
  private Checkbox rdgIzbor, rdgUmet;
  public boolean prikazi (double[] niz) {
    platno.repaint ();
    try { Thread.sleep (Integer.parseInt(tksDt.getText())); }
      catch (InterruptedException g) {}
    return dalje;
  }

  private class Platno extends Canvas {
    public void paint (Graphics g) {
      if (niz != null) {
        g.setColor (Color.BLACK);
        double max = niz[0];
        int sir = getWidth (), vis = getHeight ();
        int n = niz.length;
        for (int i=1; i<n; i++)
          if (niz[i] > max) max = niz[i];
        double ds = (double) sir / n, dv = (double)vis / max;
        for (int i=0; i<n; i++) {
          int x = (int) (i * ds); int v = (int) (niz[i] * dv);
          g.fillRect (x, vis-v, (int)ds-1, v);
        }
      }
    }
  }

  private Platno platno = new Platno ();

  public Histogram () {
    super ("Histogram");
    setBounds (100, 100, 400, 300);
    addWindowListener (new WindowAdapter () {
      public void windowClosing (WindowEvent d)
        { dalje = false; dispose (); }
    });

    add (platno, "Center");
    platno.setBackground (new Color(240,240,240));

    Panel ploca = new Panel (new GridLayout (0,1));
    add (ploca, "South");
    Panel plo = new Panel ();
    ploca.add (plo);
    plo.add (new Label ("duz:", Label.RIGHT)); plo.add (tksDuz);
    plo.add (new Label ("max:", Label.RIGHT)); plo.add (tksMax);
    plo.add (new Label ("dt:",  Label.RIGHT)); plo.add (tksDt);

    ploca.add (plo = new Panel());
    CheckboxGroup grp = new CheckboxGroup ();
    plo.add (rdgIzbor = new Checkbox ("Izbor", grp, true));
    plo.add (rdgUmet  = new Checkbox ("Umetanje", grp, false));
    rdgIzbor.addItemListener (new ItemListener () {
      public void itemStateChanged (ItemEvent d) {
        uredjivac = new Izbor (Histogram.this);
      }
    });
    rdgUmet.addItemListener (new ItemListener () {
      public void itemStateChanged (ItemEvent d) {
        uredjivac = new Umetanje (Histogram.this);
      }
    });

    ploca.add (plo = new Panel());
    Button dgm = new Button ("Radi"); plo.add (dgm);
    dgm.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent d) {
        if (nit != null) {
          dalje = false;
          try { nit.join (); } catch (InterruptedException g) {}
        }
        (nit = new Thread (Histogram.this)). start ();
      }
    });

    plo.add(dgm = new Button ("Prekini"));
    dgm.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent d) { dalje = false; }
    });
    setVisible (true);
  }

  public void run () {
    int duz = Integer.parseInt (tksDuz.getText ());
    double max = Double.parseDouble (tksMax.getText ());
    niz = new double [duz];
    for (int i=0; i<duz; niz[i++]=Math.random()*max);
    dalje = true;
    prikazi (niz);
    uredjivac.uredi (niz);
  }

  public static void main (String[] varg) { new Histogram (); }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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