![]() Ласло Краус |
Објекнто програмирање 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.