![]() Ласло Краус |
Објекнто програмирање 2 - колоквијуми Први колоквијум 28. 11. 2009 |
|---|
Написати на језику Java следећи пакет типова:
(a,b).
Написати на језику Java програм који направи једну кутију и једну таблу, напуни кутију за фиксно одабрани параметар n (не треба га учитавати с главног улаза), испише кутију на главном излазу, узима домине из кутије и ставља их на таблу све док може и испише на главном излазу завршни садржај табле, узету домину која није могла да се стави на таблу и завршни садржај кутије.
ispitx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.I: (Nastava on \\Xs200-2).
// Domina.java
package igra;
public class Domina {
private int a, b;
public Domina( int p, int q) { a = p; b = q; }
public int a () { return a; }
public int b () { return b; }
public boolean ista( Domina d) { return a==d.a && b==d.b || b==d.a && a==d.b; }
public Domina okreni() { int c = a; a = b; b = c; return this; }
public String toString() { return "(" + a + "," + b + ")"; }
}
// GNeMoze.java
package igra;
public class GNeMoze extends Exception {
public String toString() { return "*** Ne moze da se doda!"; }
}
// Skup.java
package igra;
public abstract class Skup {
protected Elem prvi, posl;
protected static class Elem {
Domina dom;
Elem sled;
Elem (Domina d, Elem s) { dom = d; sled = s; }
}
public abstract Skup dodaj (Domina d) throws GNeMoze;
public boolean ima( Domina d) {
for (Elem tek=prvi; tek!=null; tek=tek.sled)
if (d.ista (tek.dom)) return true;
return false;
}
public String toString() {
String s = "";
for (Elem tek=prvi; tek!=null; tek=tek.sled) s += tek.dom;
return s;
}
}
// Kutija.java
package igra;
public class Kutija extends Skup {
public Kutija dodaj( Domina d) throws GNeMoze {
if (ima (d)) throw new GNeMoze();
Elem novi = new Elem( d, null);
if (prvi == null) prvi = novi; else posl.sled = novi;
posl = novi;
return this;
}
public Kutija napuni( int n) {
prvi = posl = null;
int m = n * (n+1) / 2;
for (int i=0; i<m;)
try {
dodaj( new Domina((int)(Math.random()*n), (int)(Math.random()*n)));
i++;
} catch (GNeMoze g) {}
return this;
}
public Domina uzmi() throws GNeMoze {
if (prvi == null) throw new GNeMoze();;
Domina d = prvi.dom;
if ((prvi = prvi.sled) == null) posl = null;
return d;
}
}
// Tabla.java
package igra;
public class Tabla extends Skup {
public Tabla dodaj( Domina d) throws GNeMoze {
if (ima (d)) throw new GNeMoze();
if (prvi==null || d.b()==prvi.dom.a()) naPocetak (d);
else if (d.a() == posl.dom.b()) naKraj (d);
else {
d.okreni ();
if (d.b() == prvi.dom.a()) naPocetak (d);
else if (d.a() == posl.dom.b()) naKraj (d);
else throw new GNeMoze();
}
return this;
}
private void naPocetak (Domina d) {
prvi = new Elem (d, prvi);
if (posl == null) posl = prvi;
}
private void naKraj (Domina d) {
Elem novi = new Elem (d, null);
if (prvi == null) prvi = novi; else posl.sled = novi;
posl = novi;
}
}
// Test.java
import igra.*;
public class Test {
public static void main (String[] varg) {
int n = 4;
Kutija k = new Kutija ();
k.napuni (n);
System.out.println ("Kutija: " + k);
Tabla t = new Tabla ();
Domina d = null;
try {
while (true) t.dodaj( d=k.uzmi());
} catch (GNeMoze g) {}
System.out.println ("Tabla: " + t);
System.out.println ("Domina: " + d);
System.out.println ("Kutija: " + k);
}
}
Kutija: (2,3)(2,1)(0,3)(2,0)(1,1)(1,3)(3,3)(1,0)(2,2)(0,0)
Tabla: (3,3)(3,1)(1,1)(1,2)(2,3)(3,0)(0,2)
Domina: (0,1)
Kutija: (2,2)(0,0)
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 8.9.2010.