Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2/СИ2ОО2
Испит
11. 6. 2012.

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

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

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

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

а) (Java) Коју апстракцију представља и коју методу декларише интерфејс Runnable?

б) (C#) Шта означава тип decimal? На којој ширини речи и са колико тачних цифара се представља?

в) (C#) Да ли се догађај дефинише у класи извора догађаја или класи која обрађује догађај и да ли се догађај може изазвати у изведеној класи из класе у којој је дефинисан?

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

Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

Написати на језику Java програм који на графичкој корисничкој површи према слици приказује рад улице са три траке и раскрснице с евиденцијом. Евиденција се прикупља само између покретања и заустављања саобраћаја. Прикупљена евиденција се приказује кумулативно, надовезивањем садржаја на компоненти типа TextArea, приликом заустављања саобраћаја. Спречити покретање већ покренутог и заустављање већ заустављеног рада.

<< слика биће накнадно додата >>


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


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

// 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(); } }
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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