Ласло Краус |
СИ2ОО2 Други колоквијум 9. 5. 2009. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Да ли класа може да имплементира више интерфејса и зашто?
б) Шта је "секундарни this
"?
в) Које је ограничење за методу из које се позивају wait()
или notify()
. Зашто?
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
"%6.2f"
.
(10 поена) Написати на језику Java програм који створи матрицу са 4 врсте и 6 колона, напуни је случајним једноцифреним децималним целобројним вредностима, испише матрицу на главном излазу, затражи обраду усредњавања елемената с њиховим суседима и испише измењену матрицу на главном излазу.
// GIndeks.java package matrice; public class GIndeks extends Exception { public String toString () { return "*** Nedozvoljen indeks!"; } } // Matrica.java package matrice; public class Matrica implements Cloneable { private double[][] matr; private String form = "%6.2f"; public Matrica( int vrs, int kol) { matr = new double [vrs][kol]; } public double vrs() { return matr.length; } public double kol() {return matr[0].length;} public Matrica postavi( int v, int k, double b) throws GIndeks { if (v<0 || v>=matr.length || k<0 || k>=matr[0].length) throw new GIndeks(); matr[v][k] = b; return this; } public double dohvati( int v, int k) throws GIndeks { if (v<0 || v>=matr.length || k<0 || k≶=matr[0].length) throw new GIndeks(); return matr[v][k]; } public Matrica clone() { try { Matrica m = (Matrica)super.clone(); m.matr = matr.clone(); for (int v=0; v<matr.length; v++) m.matr[v] = matr[v].clone(); return m; } catch (CloneNotSupportedException g) { return null; } } public String toString() { String s = ""; for (int v=0; v<matr.length; v++) { for (int k=0; k<matr[0].length; k++) s += String.format( form, matr[v][k]); s += '\n'; } return s; } } // Funkcija.java package matrice; public interface Funkcija { double fun( double[] niz) throws InterruptedException; } // SrVred.java package matrice; public class SrVred implements Funkcija { public double fun(double[] niz) throws InterruptedException { double s = 0; for (double b: niz) { s += b; if (Thread.interrupted()) throw new InterruptedException(); } return s / niz.length; } } // Obrada.java package matrice; public class Obrada { private Matrica matr; public Obrada( Matrica m) { matr = m; } public void obradi( Funkcija fun) { try { Radi[][] r = new Radi [matr.vrs()][matr.kol()]; for (int v=0; v<matr.vrs(); v++) for (int k=0; k<matr.kol(); k++) r[v][k] = new Radi(matr, v, k, fun); for (int v=0; v<matr.vrs(); v++) for (int k=0; k<matr.kol(); k++) try { r[v][k].join(); } catch (InterruptedException g) {} for (int v=0; v<matr.vrs(); v++) for (int k=0; k<matr.kol(); k++) matr.postavi(v, k, r[v][k].rez()); } catch (GIndeks g) {} } private class Radi extends Thread { Matrica matr; int vrs, kol; Funkcija fun; double rez; Radi( Matrica m, int v, int k, Funkcija f) { matr = m; vrs = v; kol = k; fun = f; start(); } public void run() { try { int n = 4; if (vrs==0 || vrs==matr.vrs()-1) n--; if (kol==0 || kol==matr.kol()-1) n--; double[] niz = new double [n+1]; int[] x = {0, 0, 0, 1, -1}; int[] y = {0, 1, -1, 0, 0}; int j = 0; for (int i=0; i<x.length; i++) { try { double b = matr.dohvati(vrs+x[i], kol+y[i]); niz[j++] = b; } catch (GIndeks g) {} } rez = fun.fun(niz); } catch (InterruptedException g) {} } public double rez() { return rez; } } } // Program.java import matrice.*; public class Program { public static void main( String[] vpar) { int vrs = 4, kol = 6; Matrica matr = new Matrica( vrs, kol); try { for (int v=0; v<vrs; v++) for (int k=0; k<kol; k++) matr.postavi( v, k, (int)(Math.random()*10)); } catch (GIndeks g) {}; System.out.println( matr); Obrada obr = new Obrada( matr); obr.obradi(new SrVred()); System.out.println( matr); } }(⇒ почетак)
5,00 0,00 4,00 5,00 8,00 5,00 0,00 2,00 9,00 5,00 8,00 9,00 8,00 2,00 0,00 6,00 0,00 9,00 0,00 1,00 3,00 1,00 8,00 5,00 1,67 2,75 4,50 5,50 6,50 7,33 3,75 2,60 4,00 6,60 6,00 7,75 2,50 2,60 4,00 2,40 6,20 5,75 3,00 1,50 1,25 4,50 3,50 7,33
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.