Ласло Краус |
ИР2ОО2/СИ2ОО2 Испит 11. 6. 2012. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) (Java) Коју апстракцију представља и коју методу декларише интерфејс Runnable?
б) (C#) Шта означава тип decimal? На којој ширини речи и са колико тачних цифара се представља?
в) (C#) Да ли се догађај дефинише у класи извора догађаја или класи која обрађује догађај и да ли се догађај може изазвати у изведеној класи из класе у којој је дефинисан?
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
[идКам:време]регОзн. Камера памти само последњи снимак који начини. Време се прати у милисекундама од почетка извршавања програма.
null ако је трака празна.
null) у евиденцију.
List.
Написати на језику Java програм који на графичкој корисничкој површи према слици приказује рад улице са три траке и раскрснице с евиденцијом. Евиденција се прикупља само између покретања и заустављања саобраћаја. Прикупљена евиденција се приказује кумулативно, надовезивањем садржаја на компоненти типа TextArea, приликом заустављања саобраћаја. Спречити покретање већ покренутог и заустављање већ заустављеног рада.

// Vozilo.java
package saobracaj;
class Vozilo {
private static final String[] mesta = {"BG", "NS", "NI"};
private String reg;
Vozilo() {
reg = mesta[(int)(Math.random()*mesta.length)]+
(int)(Math.random()*10) +
(int)(Math.random()*10) +
(int)(Math.random()*10);
}
public String toString() { return reg; }
}
// Kamera.java
package saobracaj;
class Kamera {
private static int posId = 0;
private int id = ++ posId;
private String regOzn;
private static long t0 = System.currentTimeMillis();
private long t;
String snimi(Vozilo v) {
regOzn = v.toString();
t = System.currentTimeMillis() - t0;
return toString();
}
public String toString() { return "[" + id + ":" + t + "]"+regOzn;}
}
// Evidencija.java
package saobracaj;
public class Evidencija {
private String evid = "";
public void dodaj(String zapis) { evid += zapis + "\n"; }
public void brisi() { evid = ""; }
public String toString() { return evid; }
}
// Prikaz.java
package saobracaj;
public interface Prikaz {
void dodaj(String s);
void izbaci();
}
// Traka.java
package saobracaj;
class Traka {
private Prikaz prik;
private Kamera kam;
private String snimak;
private Elem prvi = null, posl = null;
private class Elem {
Vozilo voz; Elem sled = null;
Elem(Vozilo v) {
voz = v;
if (prvi == null) prvi = this; else posl.sled = this;
posl = this;
}
}
Traka(Prikaz p) { kam=new Kamera(); prik=p;}
public synchronized void stavi(Vozilo v)
{ new Elem(v); prik.dodaj(v.toString()); }
public synchronized Vozilo uzmi() {
snimak = null;
if (prvi == null) return null;
Vozilo v = prvi.voz;
if ((prvi = prvi.sled) == null) posl=null;
snimak = kam.snimi(v);
prik.izbaci();
return v;
}
public String snimak() { return snimak; }
}
// Saobracajnica.java
package saobracaj;
abstract class Saobracajnica extends Thread {
protected Traka[] trake;
private long tmin = 100, tmax = 200;
private boolean radi = false;
public Saobracajnica(Prikaz[] prik) {
if (prik != null) {
trake = new Traka [prik.length];
for (int i=0; i<prik.length; i++)
trake[i] = new Traka(prik[i]);
}
}
public void postVreme(int mint, int maxt)
{ tmin = mint; tmax = maxt; }
protected abstract void radnja();
public void run() {
try {
while (!interrupted()) {
synchronized (this)
{ while (!radi) wait(); radnja(); }
sleep((long)(tmin+Math.random()*(tmax-tmin)));
}
} catch (InterruptedException g) {}
}
public synchronized void kreni() { radi = true; notifyAll(); }
public synchronized void stani() { radi = false; }
public void zavrsi() { interrupt(); }
}
// Ulica.java
package saobracaj;
public class Ulica extends Saobracajnica {
public Ulica(Prikaz[] prik) { super(prik); start(); }
protected void radnja() {
trake[(int)(Math.random()*trake.length)].stavi(new Vozilo());
}
public String izaslo(){
Traka traka = trake[(int)(Math.random()*trake.length)];
traka.uzmi();
return traka.snimak();
}
}
// Raskrsnica
package saobracaj;
public class Raskrsnica extends Saobracajnica{
private Ulica ulica;
private Evidencija evid;
public Raskrsnica( Ulica u, Evidencija e) {
super(null);
ulica = u; evid = e; start();
}
protected void radnja() {
String zapis = ulica.izaslo();
if (zapis != null) evid.dodaj(zapis);
}
}
// GraPrik.java
package saobracaj;
import java.awt.List;
public class GraPrik extends List implements Prikaz {
public void dodaj(String s) { add(s); }
public void izbaci() { remove(0); }
}
// Program.java
import saobracaj.*;
import java.awt.*;
import java.awt.event.*;
public class Program extends Frame{
private GraPrik [] prik = new GraPrik[3];
{
for(int i=0; i<prik.length; i++)
prik[i] = new GraPrik();
}
private Ulica ulica=new Ulica(prik);
{ ulica.postVreme(100, 800); }
private TextArea tksEvid=new TextArea(1,15);
{ tksEvid.setEditable(false); }
private Evidencija evid = new Evidencija();
private Raskrsnica raskrsnica = new Raskrsnica(ulica, evid);
Button dgmKreni = new Button ("Kreni");
Button dgmStani = new Button ("Stani");
public Program(){
super("Saobracaj");
setSize(350,200);
sastaviProzor();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent d)
{ ulica.zavrsi(); raskrsnica.zavrsi(); dispose(); }
});
setVisible(true);
}
private void sastaviProzor(){
Panel plo = new Panel();
add( plo, "South");
plo.add(dgmKreni);
dgmKreni.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent d) {
evid.brisi();
ulica.kreni(); raskrsnica.kreni();
dgmKreni.setEnabled(false);
dgmStani.setEnabled(true);
}
});
plo.add(dgmStani);
dgmStani.setEnabled(false);
dgmStani.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent d) {
ulica.stani(); raskrsnica.stani();
tksEvid.append(evid.toString());
dgmKreni.setEnabled(true);
dgmStani.setEnabled(false);
}
});
add(plo = new Panel(new GridLayout(1,3)), "Center");
for(int i=0; i<prik.length; i++) plo.add(prik[i]);
add(tksEvid, "East");
}
public static void main(String[] varg) { new Program(); }
}
(⇒ почетак)
Copyright © 2012, Laslo Kraus
Последња ревизија: 5.7.2012.