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

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

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

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

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

а) Да ли је дозвољено да класа проширује (наслеђује) више класа и да ли је дозвољено да класа имплементира више интерфејса? Зашто?

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

в) У којој ситуацији наступа, како се мaнифестује и како се решава проблем неизвесности трке (race hazard)?

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

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

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

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


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

// Merljiv.java

package pljusak;

public interface Merljiv {
  int zapr();
}

// Kap.java package pljusak; public class Kap implements Merljiv { private int V = (int)(3 + Math.random()*7); public int zapr() { return V; } }
// Busen.java package pljusak; public class Busen implements Merljiv, Cloneable { private int kolVode; public int zapr() { return kolVode; } void palaKap(Kap k) { kolVode += k.zapr(); } public void ispari() { kolVode = 0; } public Busen clone() { try { return (Busen)super.clone(); } catch (CloneNotSupportedException g) { return null; } } public String toString(){return ""+kolVode;} }
// GIndeks.java package pljusak; public class GIndeks extends Exception { public String toString() { return "*** Nedozvoljen indeks!"; } }
// Livada.java package pljusak; public class Livada { private Busen[][] liv; public Livada(int m, int n, Busen b) { liv = new Busen[m][n]; for (int i=0; i<m; i++) for(int j=0; j<n; liv[i][j++]=b.clone()); } public int brVrs() { return liv.length; } public int brKol() { return liv[0].length; } public synchronized void palaKap (Kap k, int i, int j) throws GIndeks { if (i<0 || i>=brVrs() || j<0 || j>=brKol()) throw new GIndeks(); liv[i][j].palaKap(k); } public synchronized void ispari() { for (Busen[] vrs:liv) for (Busen b: vrs) b.ispari(); } public synchronized String toString() { String s = ""; for (Busen[] vrs:liv) { for (Busen b: vrs) s += String.format("%4s", b); s += "\n"; } return s; } }
// GPada.java package pljusak; public class GPada extends Exception { public String toString() { return "*** Kiša već pada!"; } }
// GNePada.java package pljusak; public class GNePada extends Exception { public String toString() { return "*** Kiša ne pada!"; } }
// Oblak.java package pljusak; public class Oblak extends Thread { private Livada liv; private boolean pada = false; public Oblak(Livada li) { liv=li; start(); } public void run() { try { while (!interrupted()) { synchronized (this) { while (!pada) wait(); } sleep((long)(10 + Math.random() * 41)); try { liv.palaKap(new Kap(), (int)(Math.random() * liv.brVrs()), (int)(Math.random() * liv.brKol())); } catch(GIndeks g) {} } } catch (InterruptedException g) {} } public synchronized void pada()throws GPada{ if (pada) throw new GPada(); pada = true; notify(); } public synchronized void nePada() throws GNePada { if (!pada) throw new GNePada(); pada = false; } public void unisti() { interrupt(); } }
// Program.java import pljusak.*; public class Program { public static void main(String[] varg) { Livada liv = new Livada(4,5,new Busen()); Oblak obl = new Oblak(liv); try { obl.pada(); Thread.sleep(5000); System.out.println(liv); Thread.sleep(3000); System.out.println(liv); obl.nePada(); liv.ispari(); System.out.println(liv); obl.nePada(); } catch (Exception g) { System.out.println(g); } obl.unisti(); } }
48 63 40 52 56 35 74 58 58 46 64 32 63 60 38 34 43 64 24 49 78 92 96 56 71 57 102 102 113 67 86 46 106 112 67 41 55 95 55 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 *** Kiša ne pada!
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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