Elektrotehnicki fakultet, Beograd  ����� ����� ��2��2
���� ���������
27. 3. 2009.

������: ���� ������������ �����

������: 1 2 | �������e | �����: 2

�������� ������� 1 (30 �����) ( ����� | �������)

���������� �������� (�� ����� ��� ��� ��������) � �������� �� ������ ���a��:

�) ������� ������� ���������� ������������� ������� ��������� ��� ������� ������: int, float, boolean, char, ������ ���.

�) �� �� ����� ������ � ��� ��������� ����� ������ ���� ���� ������� � �����?

�) ��� �� � �������� ����� �������� ��� �� ����� ������ ��� � �������, �� �� �� � ���� ��� ������� ����� �������� �� ������ �������� �����?

�������� ������� 2 (������ 70 �����) ( �������)

��������� �� ������ Java ������ ����� �����:

(10 �����) �������� �� ������ Java ������� (����� � ������� ��������) ��� ������� ����� ����� � ����� �����, ������ ����� �� ������ �������� ��������� n, ������ ����� �� ������� ������, ����� ������ �� ����� � ����� �� �� ����� ��� ��� ���� � ������ ������� ������ ����� �� ������� ������.

�������e ( �������)


����� ������� 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 + ")"; }
}

// Skup.java
package igra;
class Elem {
  Domina dom;
  Elem sled;
  Elem (Domina d, Elem s) { dom = d; sled = s; }
}

public abstract class Skup {
  protected  Elem prvi, posl;
  public boolean ima (Domina d) {
    for (Elem tek=prvi; tek!=null; tek=tek.sled) if (d.ista (tek.dom)) return true;
    return false;
  }
  public abstract boolean dodaj (Domina d) ;
  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 boolean dodaj (Domina d) {
    if (ima (d)) return false;
    Elem novi = new Elem (d, null);
    if (prvi == null) prvi = novi; else posl.sled = novi;
    posl = novi;
    return true;
  }
  public Kutija napuni (int n) {
    prvi = posl = null;
    int m = n * (n+1) / 2;
    for (int i=0; i<m;)
      if (dodaj (new Domina ((int)(Math.random()*n), (int)(Math.random()*n)))) i++;
    return this;
  }
  public Domina uzmi () {
    if (prvi == null) return null;
    Domina d = prvi.dom;
    if ((prvi = prvi.sled) == null) posl = null;
    return d;
  }
}

// Tabla.java
package igra;
public class Tabla extends Skup {
  public boolean dodaj (Domina d) {
    if (ima (d)) return false;
    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                                      return false;
    }
    return true;
  }
  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;
    while ((d = k.uzmi ()) != null && t.dodaj (d));
    System.out.println ("Tabla:  " + t);
  }
}

Kutija: (2,3)(2,1)(0,3)(0,2)(2,2)(3,1)(0,0)(1,0)(1,1)(3,3) Tabla: (3,1)(1,2)(2,3)(3,0)(0,2)(2,2)
( �������)
         
�����: ����� �����
�-�����: kraus@etf.rs

Copyright © 2010, Laslo Kraus
������� �������: 30.8.2010.