Elektrotehnicki fakultet, Beograd  Ласло Краус СИ2ОО2
Други колоквијум
28. 4. 2012.

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

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

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

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

а) Навести могуће декларације метода m() класе class X implements I1, I2 {…}, ако су: interface I1 { void m() throws E1,E2,E3; } и interface I2 { void m() throws E2,E3,E4; }?

б) Да ли је из методе спољашње класе дозвољен приступ приватним члановима унутрашње (inner) класе и да ли се може без квалификације (директним именовањем) приступити из методе спољашње класе методи унутрашње? Зашто?

в) Да ли метод нити start() позива метод run()? Образложити.

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

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

(5 поена) Написати на језику Java програм који направи једну наплатну рампу коју отвори, после извесног времена испише на главном излазу, после још нешто времена затвори, испише на главном излазу и уништи. Користити константне параметре (не треба ништа учитавати с главног улаза).


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


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

// Kategor.java

package putarina;

public interface Kategor {
  int kategor();
}

// Vozilo.java package putarina; public class Vozilo implements Kategor { private int kat; public Vozilo(int k) { kat = k; } public int kategor() { return kat; } }
// GKat.java package putarina; public class GKat extends Exception { public String toString() { return "*** Nepostojeca kategorija!"; } }
// Cenovnik.java package putarina; public class Cenovnik { private int[] putarine; public Cenovnik(int[] put) { putarine = put; } public int brKat() {return putarine.length;} public int putarina(int kat) throws GKat { if (kat<=0 || kat>putarine.length) throw new GKat(); return putarine[kat-1]; } }
// Stanica.java package putarina; public class Stanica implements Cloneable { private static int posId = 0; private int id = ++posId; private Cenovnik cen; private int naplaceno = 0; public Stanica novCen(Cenovnik c) { cen = c; naplaceno = 0; return this;} public Stanica clone() { try { Stanica s = (Stanica) super.clone(); s.id = ++posId; s.naplaceno = 0; return s; } catch (CloneNotSupportedException g) { return null; } } public Stanica naplati(Vozilo v) throws GKat { naplaceno += cen.putarina(v.kategor()); return this; } public int naplaceno() { return naplaceno; } public String toString() { return id + "(" + naplaceno + ")"; } }
// Rampa.java package putarina; public class Rampa extends Thread { private String naziv; private Stanica[] stanice; private long tSr; private Cenovnik cen; private boolean radi = false; public Rampa(String naz, Stanica stan, int brStan, long tsr) { naziv = naz; tSr = tsr; stanice = new Stanica [brStan]; for (int i=0; i<brStan; i++) stanice[i] = stan.clone(); start(); } public void run() { try { while (!interrupted()) { synchronized (this) { if (!radi) wait(); } sleep((long)(tSr*(0.7+0.6*Math.random()))); Vozilo v = new Vozilo ((int)(Math.random()*cen.brKat()+1)); try { stanice[(int)(Math.random()*stanice.length)].naplati(v); } catch (GKat g) {} } } catch (InterruptedException g) {} } public synchronized void otvori(Cenovnik c) { cen = c; for (Stanica s: stanice) s.novCen(c); radi = true; notify(); } public void zatvori() { radi = false; } public void unisti() { interrupt(); } public int naplaceno() { int uk = 0; for(Stanica s: stanice) uk += s.naplaceno(); return uk; } public String toString() { String s = naziv + "(" + naplaceno()+"):"; for (int i=0; i<stanice.length; i++) { if (i > 0) s += ","; s += stanice[i]; } return s; } }
// Program.java import putarina.*; public class Program { public static void main(String[] varg) { try { Rampa rampa = new Rampa("Jagodina", new Stanica(), 3, 300); rampa.otvori(new Cenovnik(new int[] {100, 200, 500})); Thread.sleep(10000); System.out.println(rampa); Thread.sleep(5000); rampa.zatvori(); System.out.println(rampa); rampa.unisti(); } catch (InterruptedException g) {} } }
Jagodina(8400):2(3000),3(2300),4(3100) Jagodina(12700):2(3900),3(5100),4(3700)
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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