![]() Ласло Краус |
Објекнто програмирање 2 - колоквијуми Први колоквијум 26. 11. 2010 |
---|
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(
снага)
.
[
потрошач,…,
потрошач]
, где је потрошач текстуални опис једног садржаног потрошача.
Написати на језику Java класу са функцијом за читање с главног улаза једног потрошача произвољног типа и главном функцијом која читајући податке с главног улаза направи један извор, додаје потрошаче док се не прочита "празан" потрошач и испише на главном излазу завршно стање извора. На располагању стоји класа Citaj
у пакету usluge
која садржи заједничке методе за читање свих стандардних типова података.
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z:
.
// Potrosac.java package potrosaci; public abstract class Potrosac implements Cloneable { public abstract double snaga(); public Potrosac clone() { try { return (Potrosac)super.clone(); } catch (CloneNotSupportedException g) { return null; } } public abstract String toString(); } // Uredjaj.java package potrosaci; public class Uredjaj extends Potrosac { private String naz; private double sna; public Uredjaj( String n, double s) { naz = n; sna = s; } public double snaga() { return sna; } public String toString() { return naz + "(" + sna + ")"; } } // Grupa.java package potrosaci; public class Grupa extends Potrosac { private Potrosac[] niz = new Potrosac [5]; private int n = 0; private double sna = 0; public Grupa dodaj( Potrosac p) { if (n == niz.length) { Potrosac[] pom = new Potrosac [n + 5]; for (int i=0; i<n; pom[i]=niz[i++]); niz = pom; } niz[n++] = p; sna += p.snaga(); return this; } public double snaga() { return sna; } public Grupa clone() { Grupa g = (Grupa)super.clone(); g.niz = niz.clone(); for (int i=0; i<n; g.niz[i]=niz[i++].clone()); return g; } public String toString() { StringBuffer s = new StringBuffer( '['); for (int i=0; i<n; i++) { if (i>0) s.append(','); s.append(niz[i]); } return s.append( ']').toString(); } } // GIndeks.java package potrosaci; public class GIndeks extends Exception { public String toString() { return "*** Nedozvoljen indeks!"; } } // GPreopt.java package potrosaci; public class GPreopt extends Exception { public String toString() {return "*** Preopterecen izvor!"; } } // Izvor.java package potrosaci; public class Izvor { private Potrosac[] niz; private double sna, opt; public Izvor( double s, int k) { niz = new Potrosac [k]; sna = s; } public double snaga() { return sna; } public double opterecenje() { return opt; } public int brMesta() { return niz.length; } public Izvor prikljuci( Potrosac p, int i) throws GIndeks, GPreopt { if (i<0 || i>=niz.length) throw new GIndeks(); if (niz[i] != null) { opt -= niz[i].snaga(); niz[i] = null; } if (p != null) { double s = p.snaga(); if (opt+s > sna) throw new GPreopt(); niz[i] = p; opt += s; } return this; } public String toString() { StringBuffer s = new StringBuffer(); s.append( opt).append( '/').append( sna).append( '\n'); for (int i=0; i<niz.length; i++) { s.append( i).append( ": "); if (niz[i] != null) s.append( niz[i]); else s.append( "<< prazan >>"); s.append( '\n'); } return s.toString(); } } // Program.java import potrosaci.*; import usluge.Citaj; public class Program { private static Potrosac citaj() { System.out.print( "Tip (U,G,.)? "); switch (Citaj.Char()) { case 'u': case 'U': { System.out.print( "Vrsta? "); String v = Citaj.String(); System.out.print( "Snaga? "); double s = Citaj.Double(); return new Uredjaj( v, s); } case 'g': case 'G': { Grupa g = new Grupa(); Potrosac p; while ((p = citaj()) != null) g.dodaj( p); return g; } default: return null; } } public static void main(String[] args) { System.out.print( "Snaga izvora? "); double s = Citaj.Double(); System.out.print( "Broj prikljucaka? "); int k = Citaj.Int(); Izvor izv = new Izvor(s,k); while (true) { try { Potrosac p = citaj(); if (p == null) break; System.out.print( "Prikljucak? "); izv.prikljuci( p, Citaj.Int()); } catch (Exception g) { System.out.println( g); } } System.out.print( izv); } }(садржај)
Snaga izvora? 1000 Broj prikljucaka? 5 Tip (U,G,.)? u Vrsta? sijalica Snaga? 100 Prikljucak? 3 Tip (U,G,.)? g Tip (U,G,.)? u Vrsta? tv Snaga? 300 Tip (U,G,.)? u Vrsta? radio Snaga? 150 Tip (U,G,.)? . Prikljucak? 1 Tip (U,G,.)? u Vrsta? reso Snaga? 1000 Prikljucak? 7 *** Nedozvoljen indeks! Tip (U,G,.)? u Vrsta? reso Snaga? 1000 Prikljucak? 0 *** Preopterecen izvor! Tip (U,G,.)? . 550.0/1000.0 0: << prazan >> 1: tv(300.0),radio(150.0)] 2: << prazan >> 3: sijalica(100.0) 4: << prazan >>
Copyright © 2011, Laslo Kraus
Последња ревизија: 11.1.2011.