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

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

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

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

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

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

б) (C#) Да ли .NET извршно окружење (CLR – Common Language Runtime) подржава интерпретацију међукода MSIL и коју алтернативну подржава?

в) (C#) Како и када се ослобађа меморија коју заузима неки примерак структуре (struct)?

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

У пакету merenje постоје следећи типови (ове типове није потребно реализовати):

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


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


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


///////////////// Не припада решењу колоквијума ///////////////////////
// Uporediv.java                                                     //
                                                                     //
package merenje;                                                     //
                                                                     //
public interface Uporediv {                                          //
  int uporedi(Uporediv u);                                           //
}                                                                    //
                                                                     //
// Ceo.java                                                          //
                                                                     //
package merenje;                                                     //
                                                                     //
public class Ceo implements Uporediv {                               //
  private int vr;                                                    //
                                                                     //
  public Ceo(int vrednost) { vr = vrednost; }                        //
                                                                     //
  public int uporedi (Uporediv u) { return vr - ((Ceo)u).vr; }       //
}                                                                    //
                                                                     //
package merenje;                                                     //
                                                                     //
public class GVrednost extends Exception{                            //
  public String toString() {return"*** Nedozvoljena vrednost!";}     //
}                                                                    //
                                                                     //
// Merac.java                                                        //
                                                                     //
package merenje;                                                     //
                                                                     //
public abstract class Merac {                                        //
  protected double vr = 0, max = 100;                                //
                                                                     //
  public void postaviMax(double max) throws GVrednost {              //
    if (max <= 0) throw new GVrednost();                             //
    this.max = max; vr = 0; prikazi();                               //
  }                                                                  //
                                                                     //
  public void postaviVr(double vr) throws GVrednost {                //
    if (vr<0 || vr>max) throw new GVrednost();                       //
    this.vr = vr; prikazi();                                         //
  }                                                                  //
                                                                     //
  abstract void prikazi();                                           //
                                                                     //
  public String toString() { return vr + "/" + max; }                //
}                                                                    //
///////////////// Не припада решењу колоквијума ///////////////////////

// TksMerac.java

package merenje;
import java.awt.TextField;

public class TksMerac extends Merac {
  private TextField tks;

  public TksMerac(TextField tks) { this.tks = tks; }

  public void prikazi() { tks.setText((int)(vr/max*100)+"%"); }
}

// GraMerac.java

package merenje;
import java.awt.*;

public class GraMerac extends Merac {
  private Platno platno;
  private Color boja;

  public GraMerac(Panel ploca, Color b1, Color b2) {
    ploca.setLayout (new BorderLayout());
    ploca.add(platno= new Platno ());
    platno.setBackground(b1);
    boja = b2;
  }

  public void postaviMax(double max) throws GVrednost {
    super.postaviMax(max);
    platno.repaint();
  }

  public void prikazi() {
    Graphics g = platno.getGraphics();
    g.setColor(boja);
    g.fillArc(0, 0, platno.getWidth(), platno.getHeight(),
              90, -(int)(vr/max*360));
  }

  private class Platno extends Canvas {
    public void paint(Graphics g) { prikazi(); }
  }

}

///////////////// Не припада решењу колоквијума ///////////////////////
// Punjac.java                                                       //
                                                                     //
package merenje;                                                     //
                                                                     //
public interface Punjac {                                            //
  void napuni(Object[] niz, Merac merac);                            //
}                                                                    //
                                                                     //
package merenje;                                                     //
                                                                     //
public class CeoPunjac implements Punjac{                            //
                                                                     //
  public void napuni(Object[] niz, Merac merac) {                    //
    try {                                                            //
      int n = niz.length;                                            //
      merac.postaviMax(n);                                           //
      for (int i=0; i<n; i++) {                                      //
        niz[i] = new Ceo((int)(Math.random()*1000));                 //
        merac.postaviVr(i+1);                                        //
      }                                                              //
    } catch (GVrednost g) {}                                         //
  }                                                                  //
}                                                                    //
                                                                     //
// Uredjivac.java                                                    //
                                                                     //
package merenje;                                                     //
                                                                     //
public interface Uredjivac {                                         //
  void uredi(Uporediv[] niz, Merac merac);                           //
                                                                     //
  void prekini();                                                    //
}                                                                    //
                                                                     //
// Izbor.java                                                        //
                                                                     //
package merenje;                                                     //
                                                                     //
public class Izbor implements Uredjivac {                            //
  private volatile boolean radi;                                     //
                                                                     //
  public void uredi(Uporediv[] niz, Merac merac) {                   //
    try {                                                            //
      radi = true;                                                   //
      int n = niz.length;                                            //
      merac.postaviMax(n*(n-1)/2);                                   //
      for (int i=0; radi && i<n-1; i++)                              //
        for(int j=i+1; radi && j<n; j++) {                           //
          if (niz[j].uporedi(niz[i])<0) {                            //
            Uporediv u = niz[i];                                     //
            niz[i] = niz[j]; niz[j] = u;                             //
          }                                                          //
          merac.postaviVr(n*i+j-i*(i+3)/2);                          //
        }                                                            //
    } catch (GVrednost g) {}                                         //
  }                                                                  //
                                                                     //
  public void prekini() { radi = false; }                            //
}                                                                    //
///////////////// Не припада решењу колоквијума ///////////////////////

// Program.java

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

public class Program extends Frame  {
  private Button dgmNapuni  = new Button("Napuni"),
                 dgmUredi   = new Button("Uredi"),
                 dgmPrekini = new Button("Prekini");
  private Panel ploMer = new Panel();
  private TextField tksMer = new TextField("0%", 3);
  private Merac graMerac = new GraMerac(ploMer,
                                        Color.WHITE, Color.BLUE),
                tksMerac = new TksMerac(tksMer);
  private Uredjivac uredjivac = new Izbor();
  private Punjac punjac=new CeoPunjac();
  private Ceo[] niz = new Ceo [1000];
  private TextField tksDuz = new TextField("1000", 3);

  private void popuniProzor() {
    setBackground(Color.LIGHT_GRAY);
    add(ploMer, "Center");
    Panel plo = new Panel();
    add(plo, "North");
    plo.add(new Label("n:",Label.RIGHT));
    plo.add(tksDuz);
    plo.add(dgmNapuni);
    plo.add(tksMer);
    add(plo = new Panel(), "South");
    plo.add(dgmUredi);
    plo.add(dgmPrekini);
    dgmNapuni.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent d) {
        uredjivac.prekini();
        niz = new Ceo [Integer.parseInt(tksDuz.getText())];
        punjac.napuni(niz, tksMerac);
      }
    });
    dgmUredi.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent d) {
        new Thread() {
          public void run() {
            uredjivac.uredi(niz, graMerac);
          }
        }.start();
      }
    });
    dgmPrekini.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent d) {
        uredjivac.prekini();
      }
    });
  }

  private Program() {
    super ("Uredjivanje");
    setSize(250, 250);
    setResizable(false);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent d)
      { uredjivac.prekini(); dispose(); }
    });
    popuniProzor();
    setVisible(true);
  }

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

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