Elektrotehnicki fakultet, Beograd  Ласло Краус СИ2ОО2
Други колоквијум
16. 5. 2007.

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

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

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

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

а) Да ли је и зашто дозвољено написати:

  interface I1{int m(int i);}
  interface I2{float m(int i);}
  class X implements I1,I2{/*…*/}

б) Да ли је из методе спољашње класе дозвољен приступ приватним члановима унутрашње (inner) класе и да ли се може без квалификације приступити из методе спољашње класе методи унутрашње? Зашто?

в) Који начин синхронизације је најприроднији уколико се жели да N активних објеката конкурентно изврше неку операцију, а затим се резултати извршених операција прикупљају секвенцијално.

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

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

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


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


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

// Generator.java
package lutrija;
public interface Generator { public int slBroj (); }

// Tocak.java
package lutrija;
class Tocak extends Thread implements Generator {
  private int cifra;
  private int dt;
  private int korak;
  private boolean radi = false;
  Tocak (int ddt, boolean raste) {
    dt = ddt;
    korak = raste ? 1 : -1;
    start ();
  }
  public void run () {
    try {
      while (! interrupted ()) {
        if (! radi) synchronized (this) { wait (); }
        sleep (dt);
        cifra = (cifra + korak + 10) % 10;
      }
    } catch (InterruptedException g) {}
  }
  synchronized void kreni () { radi = true; notify (); }
  public int slBroj () { radi = false; return cifra; }
  void zavrsi () { interrupt (); }
}

// GRadi.java
package lutrija;
public class GRadi extends Exception {
  public String toString () { return "*** Vec radi!"; }
}

// GStoji.java
package lutrija;
public class GStoji extends Exception {
  public String toString () { return "*** Ne radi!"; }
}

// GDuz.java
package lutrija;
public class GDuz extends Exception {
  public String toString () { return "*** Neispravna duzina!"; }
}

// Masina.java
package lutrija;
public class Masina {
  private Tocak[] niz;
  private int n;
  private boolean radi = false;
  public Masina (int kap) {
    niz = new Tocak [kap];
    for (int i=0; i<kap; i++)
      niz[i] = new Tocak( (int)(10+Math.random()*10), i%2==0 );
  }
  public void kreni (int n) throws GRadi, GDuz {
    if (radi) throw new GRadi ();
    if (n<=0 || n>niz.length) throw new GDuz ();
    radi = true;
    this.n = n;
    for (int i=0; i<n; niz[i++].kreni());
  }
  public String stani () throws GStoji {
    if (! radi) throw new GStoji ();
    radi = false;
    String s = "";
    for (int i=0; i<n; s=niz[i++].slBroj()+s);
    return s;
  }
  public void unisti () { for (Tocak t: niz) t.zavrsi (); }
}

// Izvlacenje.java
import lutrija.*;
import usluge.Citaj;
public class Izvlacenje {
  public static void main (String[] varg) {
    Masina mas = new Masina (6);
    radi: while (true) {
      try {
        System.out.print
          ("Izbor (Kreni, Stani, Zavrsi)? ");
        switch (Citaj.Char ()) {
          case 'k':
            System.out.print ("Broj tockova? ");
            mas.kreni (Citaj.Int());
            break;
          case 's':
            System.out.println ("Dobitni broj: " + mas.stani());
            break;
          case 'z':
            break radi;
        }
      } catch (Exception g) { System.out.println (g); }
    }
    mas.unisti ();
  }
}

Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 5 Izbor (Kreni, Stani, Zavrsi)? s Dobitni broj: 15689 Izbor (Kreni, Stani, Zavrsi)? s *** Ne radi! Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 8 *** Neispravna duzina! Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 6 Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 3 *** Vec radi! Izbor (Kreni, Stani, Zavrsi)? s Dobitni broj: 724033 Izbor (Kreni, Stani, Zavrsi)? z
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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