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

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

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

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

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

а) Која је основнa разлика између низова у језицима Java и C++?

б) Ако су у следећим фајловима дефинисане класе A и B:

Fajl А.java:   package p;
               public class A { private int x1; int x2; protected int x3; public int x4;}
Fajl B.java:   package p.pp;
               public class B{ int m() { p.A a=new p.A(); return ◊; } }
да ли је дозвољено да уместо стоји: (1) a.x1 (2) a.x2 (3) a.x3 (4) a.x4 ?

в) Када класу треба писати као final?

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

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

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

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


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

// Numera.java

package kartoteka;

public class Numera {
  private String naziv, izvodj;
  private int traje;

  public Numera(String naz, String izv, int t)
    { naziv = naz; izvodj = izv; traje = t; }

  public String naziv() { return naziv; }
  public String izvodj() { return izvodj; }
  public int traje() { return traje; }

  public String toString()
    { return naziv + "-" + izvodj + ":" + traje; }
}

// Stavka.java

package kartoteka;

public abstract class Stavka {
  private static int posId = 0;
  private int id = ++posId;
  private String naslov, izdavac;

  public Stavka(String nasl, String izdav)
    { naslov = nasl; izdavac = izdav; }

  public int id() { return id; }
  public String naslov() { return naslov; }
  public String izdavac() { return izdavac; }

  public abstract char vrsta();

  public String toString()
    { return vrsta() + "." + id + "/" + naslov + "/" + izdavac; }
}

// Knjiga.java

package kartoteka;

public class Knjiga extends Stavka {
  private String[] autori;

  public Knjiga(String nasl, String izdav, String[] auti)
   { super(nasl, izdav); autori = auti; }

  public char vrsta() { return 'K'; }

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

// Disk.java

package kartoteka;

public class Disk extends Stavka {
  private Numera[] numere;
  private int n = 0;

  public Disk(String nasl, String izdav, int kap) {
    super(nasl, izdav);
    numere = new Numera [kap];
  }

  public char vrsta() { return 'D';  }

  public boolean dodaj(Numera num) {
    if (n == numere.length) return false;
    numere[n++] = num; return true;
  }

  public int trajanje() {
    int t = 0;
    for (int i=0; i<numere.length; i++) t += numere[i].traje();
    return t;
  }

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

// Kartoteka.java

package kartoteka;

public class Kartoteka {
  private static class Elem {
    Stavka stavka;
    Elem sled = null;
    Elem(Stavka s) { stavka = s; }
  }

  private Elem prvi = null, posl = null;

  public Kartoteka dodaj(Stavka s) {
    Elem novi = new Elem(s);
    if (prvi == null) prvi = novi; else posl.sled = novi;
    posl = novi;
    return this;
  }

  public int broj(char vrs) {
    int b = 0;
    for (Elem tek=prvi; tek!=null; tek=tek.sled)
      if (tek.stavka.vrsta() == vrs) b++;
    return b;
  }

  public Stavka[] stavke(char vrs) {
    Stavka[] niz = new Stavka [broj(vrs)];
    int i = 0;
    for (Elem tek=prvi; tek!=null; tek=tek.sled)
      if (tek.stavka.vrsta() == vrs) niz[i++] = tek.stavka;
    return niz;
  }

  public String toString() {
    String s = "";
    for (Elem tek=prvi; tek!=null; tek=tek.sled)
      s += tek.stavka + "\n";
    return s;
  }
}

// Program.java

import kartoteka.*;

public class Program {
  public static void main(String[] vpar) {
    String[] autori = {"a1", "a2"};
    Knjiga k = new Knjiga("Nasl1", "Izdav2", autori);
    Disk d = new Disk("NaslD", "IzdavD", 2);
    d.dodaj(new Numera("N1", "I1", 150));
    d.dodaj(new Numera("N2", "I2", 180));
    Kartoteka kart = new Kartoteka();
    kart.dodaj(k).dodaj(d);
    System.out.print(kart);
  }
}


K.1/Nasl1/Izdav2[a1,a2] D.2/NaslD/IzdavD[N1-I1:150,N2-I2:180]:330
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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