Ласло Краус |
ИР2ОО2 Други колоквијум 11. 7. 2008. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) (Java) Како се може сачекати на завршетак неке нити и да ли се након завршетка дате нити може приступити стању објекта те нити?
б) (C#) Да ли .NET извршно окружење (CLR – Common Language Runtime) подржава интерпретацију међукода MSIL и коју алтернативну подржава?
в) (C#) Како и када се ослобађа меморија коју заузима неки примерак структуре (struct)?
У пакету merenje постоје следећи типови (ове типове није потребно реализовати):
Реализовати на језику Java следеће типове:
TextField.
Panel користећи задате боје за подлогу и за кружни исечак. Исечак од 360° представља потпуно урађен посао.

///////////////// Не припада решењу колоквијума ///////////////////////
// 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(); }
}
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.