Elektrotehnicki fakultet, Beograd  Ласло Краус СИ2ОО2
Први колоквијум
20. 3. 2013.

Аутори: Игор Тартаља, Ласло Краус и Ненад Виторовић

Задаци: 1 2 | Напоменe | Решења: 2

Поставка задатка 1 (30 поена) ( решење | почетак)

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:

а) Како се методама прослеђују параметри примитивних, односно класних, типова: по вредности или референци?

б) Зашто класе на Јави немају деструкторе? Како и зашто се компензује њихов недостатак?

в) Да ли је могућа комбинација модификатора abstract final за (1) класу (2) метод и зашто?

Поставка задатка 2 (укупно 70 поена) ( почетак)

Саставити на језику Java следећи пакет класа:

(15 поена) Написати на језику Java програм (класу са главном функцијом) у којем се стварају један вук, једна коза и један купус, смештају у дружину на једној обали реке, а затим неколико пута чамцем пребацују из дружине на једној обали у дружину на другој обали (у оба смера), уз исписивање дружина на обе обале и чамца после сваке акције над дружином на обали. Није потребно водити рачуна о логичкој исправности редоследа пребацивања, односно избора бића, нити је потребно проверавати статус успеха после операција над дружинама.


Напоменe ( почетак)


Решење задатка 2 ( поставка | почетак)

// Bice.java

package bica;

public abstract class Bice {
  public static final char BILJ = 'B', ZIV = 'Z', NE = 'N';

  abstract public char carstvo();
  abstract public String vrsta();
  abstract public char hrana();

  public boolean jede(Bice b) { return hrana() == b.carstvo(); }

  public String toString()
    { return "[" + carstvo() + ":" + vrsta() + ":" + hrana() + "]"; }
}

// Vuk.java

package bica;

public class Vuk extends Bice {
  public char carstvo(){return ZIV;}
  public String vrsta(){return "Vu";}
  public char hrana(){return ZIV;}
}

// Koza.java

package bica;

public class Koza extends Bice {
  public char carstvo(){return ZIV;}
  public String vrsta(){return "Ko";}
  public char hrana(){return BILJ;}
}

// Kupus.java

package bica;

public class Kupus extends Bice {
  public char carstvo(){return BILJ;}
  public String vrsta(){return "Ku";}
  public char hrana(){return NE;}
}

// Druzina.java

package bica;

public class Druzina {
  private Bice[] bica = new Bice[3];
  private int brBica;

  public boolean dodaj(Bice b) {
    if (brBica==3) return false;
    for (int i=0; i<brBica; i++)
      if (b.vrsta().equals(bica[i].vrsta())) return false;
    if (brBica==1 && (b.jede(bica[0]) || bica[0].jede(b))) return false;
    bica[brBica++] = b; return true; 
  }

  public Bice uzmi(String vr) {
    int i = 0;
    while (i<brBica && !vr.equals(bica[i].vrsta())) i++;
    if (i == brBica) return null;
    if (brBica == 3) {
      Bice b1=bica[(i+1)%3], b2=bica[(i+2)%3];
      if (b1.jede(b2) || b2.jede(b2)) return null;
    }
    Bice b = bica[i];
    bica[i] = bica[brBica-1];
    bica[--brBica] = null;
    return b;
  }

  public Bice zameni(Bice b, String vr) {
    if (brBica == 3) return null;
    Bice bb = uzmi(vr);
    if (bb == null)  return null;
    if (dodaj(b))    return bb;
    dodaj(bb);       return null;
  }

  public String toString() {
    String rez = "{";
    for (int i = 0; i < brBica; i++) {
      if (i > 0) rez += ",";
      rez += bica[i];
    }
    return rez + "}";
  }
}

// Camac.java

package bica;

public class Camac {
  Bice b;

  public boolean smesti(Bice bb) {
    if (b != null) return false;
    b = bb; return true;
  }

  public Bice uzmi() { Bice bb = b; b = null;  return bb; }

  public String toString() { return "C{" + (b!=null ? b : "") + "}"; }
}

// Program.java

import bica.*;

public class Program {
  private static Druzina lObala=new Druzina();
  private static Druzina dObala=new Druzina();
  private static Camac camac = new Camac();

  private static void pisi()
    { System.out.println(lObala + " " + camac + " " + dObala); }

  public static void main(String[] argv) {
    lObala.dodaj(new Vuk());
    lObala.dodaj(new Kupus());
    lObala.dodaj(new Koza());                        pisi();
    camac.smesti(lObala.uzmi("Ko"));                 pisi();
    dObala.dodaj(camac.uzmi());                      pisi();
    camac.smesti(lObala.uzmi("Vu"));                 pisi();
    camac.smesti(dObala.zameni(camac.uzmi(), "Ko")); pisi();
    camac.smesti(lObala.zameni(camac.uzmi(), "Ku")); pisi();
    dObala.dodaj(camac.uzmi());                      pisi();
    camac.smesti(lObala.uzmi("Ko"));                 pisi();
    dObala.dodaj(camac.uzmi());                      pisi();
  }
}

{[Z:Vu:Z],[B:Ku:N],[Z:Ko:B]} C{} {} {[Z:Vu:Z],[B:Ku:N]} C{[Z:Ko:B]} {} {[Z:Vu:Z],[B:Ku:N]} C{} {[Z:Ko:B]} {[B:Ku:N]} C{[Z:Vu:Z]} {[Z:Ko:B]} {[B:Ku:N]} C{[Z:Ko:B]} {[Z:Vu:Z]} {[Z:Ko:B]} C{[B:Ku:N]} {[Z:Vu:Z]} {[Z:Ko:B]} C{} {[Z:Vu:Z],[B:Ku:N]} {} C{[Z:Ko:B]} {[Z:Vu:Z],[B:Ku:N]} {} C{} {[Z:Vu:Z],[B:Ku:N],[Z:Ko:B]}
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2013, Laslo Kraus
Последња ревизија: 23.4.2013.