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

Аутори: Игор Тартаља и Ласло Краус

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

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

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

а) Када и којим редоследом се извршавају (1) статички (2) нестатички иницијализациони блокови?

б) На које начине се могу користити јавна имена из неког пакета у другом пакету? Навести примере за приступ имену X, које је дефинисно у пакету P, из неког другог пакета?

в) Да ли класа на језику Javа може бити апстрактна, ако ни једна њена метода није апстрактна и зашто?

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

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

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


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


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

// Sadrzaj.java

package galerija;

public abstract class Sadrzaj {
  private static int posid = 0;
  private int id = ++posid;
  private String naziv;

  public Sadrzaj(String n) { naziv = n; }

  public int id() { return id; }

  public abstract char tip();

  public int vel() { return naziv.length() + 8; }

  public String toString() {
    return naziv + "(" + tip() + "/" + id + "/" + vel() + ")";
  }
}

// Slika.java

package galerija;

public class Slika extends Sadrzaj {
  private int sir, vis;

  public Slika(String n, int s, int v) { super(n); sir = s; vis = v; }

  public char tip() { return 'S'; }

  public int sir() { return sir; }

  public int vis() { return vis; }

  public int vel() { return super.vel() + 4*sir*vis + 32; }
}

// Film.java

package galerija;

public class Film extends Sadrzaj {
  private Slika[] niz;
  private int duz = 0;

  public Film(String n, int kap) { super(n); niz = new Slika [kap]; }

  public char tip() { return 'F'; }

  public boolean dodaj(Slika s) {
    if (duz==niz.length ||
        duz!=0 && (niz[0].sir()!=s.sir() || niz[0].vis()!=s.vis())) return false;
    niz[duz++] = s; return true;
  }

  public int vel() {
    int v = super.vel() + 1024;
    for (int i = 0; i<duz; i++) v += niz[i].vel();
    return v;
  }

  public String toString() {
    String s = super.toString() + "[";
    for (int i=0; i<duz; i++) {
      if (i>0) s += ",";
      s += niz[i];
    }
    return s + "]";
  }
}

// Galerija.java

package galerija;

public class Galerija {
  private Sadrzaj[] niz;

  public Galerija(int kap) { niz = new Sadrzaj [kap]; }

  public boolean stavi(Sadrzaj s, int i) {
    if (i<0 || i>=niz.length || niz[i]!=null) return false;
    niz[i] = s; return true;
  }

  public Sadrzaj uzmi(int i) {
    if (i<0 || i>=niz.length) return null;
    Sadrzaj s = niz[i]; niz[i] = null;
    return s;
  }

  public int vel() {
    int v = 0;
    for (int i=0; i<niz.length; i++)
      if (niz[i] != null) v += niz[i].vel();
    return v;
  }

  public String toString() {
    String s = "";
    for (int i=0; i<niz.length; i++)
      if (niz[i] != null) s += i + ": " + niz[i] + "\n";
    return s;
  }
}

// Program.java

import galerija.*;

public class Program {

  public static void main(String[] args) {
    Galerija g = new Galerija(10);
    g.stavi(new Slika("Alfa",400,300), 6);
    Film f = new Film("Beta", 5);
    f.dodaj(new Slika("B1", 200, 150));
    f.dodaj(new Slika("B2", 300, 150));
    f.dodaj(new Slika("B3", 200, 150));
    g.stavi(f, 3);
    g.stavi(new Slika("Gama",400,300), 6);
    g.stavi(new Slika("Delta",300,250), 8);
    System.out.println(g + "\n" + g.vel());
  }
}

3: Beta(F/2/241120)[B1(S/3/120042),B3(S/5/120042)] 6: Alfa(S/1/480044) 8: Delta(S/7/300045) 1021209
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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