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

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

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

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

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

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

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

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

а) Које су разлике између интерфејса и апстрактне класе?

б) Да ли се грана finally извршава у случајевима: (1) није се десио изузетак у try блоку; (2) десио се изузетак и обрада је настављена у грани catch која завршава наредбом return; (3) десио се изузетак и обрада је настављена у грани catch која завршава наредбом throw.

в) Који модификатор мора да стоји за метод из којег се позивају методи wait() и notify()?


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


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

// Uporediv.java
package uredjivanje;
public interface Uporediv {
  boolean manji (Uporediv u);
  boolean isti (Uporediv u);
}

// Znak.java
package uredjivanje;
public class Znak implements Uporediv {
  private char zn;
  public Znak (char zn) { this.zn = zn; }
  public char znak () { return zn; }
  public boolean manji (Uporediv u) { return zn <  ((Znak)u).zn; }
  public boolean isti  (Uporediv u) { return zn == ((Znak)u).zn; }
  public String toStrng () { return Character.toString (zn); }
}

// Casovnik.java
package uredjivanje;
public class Casovnik extends Thread {
  private int dt;
  private char zn;
  private boolean radi = false;
  public Casovnik (int dt, char zn) { this.dt = dt; this.zn = zn; start (); }
  public void run () {
    try {
      while (! interrupted ()) {
        if (! radi) synchronized (this) { while (! radi) wait (); }
        sleep (dt);
        System.out.print (zn);
      }
    } catch (InterruptedException g) {}
  }
  public synchronized void kreni () { radi = true; notify (); }
  public synchronized void stani () { radi = false; }
  public void zavrsi () { interrupt (); }
}

// Uredjivac.java
package uredjivanje;
public abstract class Uredjivac {
  private Casovnik cas;
  public Uredjivac (Casovnik cas) { this.cas = cas; }
  public void uredi (Uporediv[] u) { cas.kreni (); radi (u); cas.stani (); }
  protected abstract void radi (Uporediv[] u);
}

// Izbor.java
package uredjivanje;
public class Izbor extends Uredjivac {
  public Izbor (Casovnik cas) { super (cas); }
  protected void radi (Uporediv[] niz) {
    for (int i=0; i<niz.length-1; i++)
      for (int j=i+1; j<niz.length; j++) {
        if (niz[j].manji(niz[i])) {
          Uporediv u = niz[i]; niz[i] = niz[j]; niz[j] = u;
        }
        try { Thread.sleep (1); } catch (InterruptedException g) {}
      }
  }
}

// GOpseg.java
package uredjivanje;
public class GOpseg extends Exception {
  public String toString () { return "*** Neispravan opseg vrednosti!"; }
}

// NizZnakova.java
package uredjivanje;
public class NizZnakova {
  private Znak[] niz;
  public NizZnakova (int n) { niz = new Znak [n]; puni (); }
  public void puni (Znak p, Znak q) throws GOpseg {
    if (q.manji (p)) throw new GOpseg ();
    for (int i=0; i<niz.length; i++)
      niz[i] = new Znak ((char)(p.znak()+Math.random()*(q.znak()-p.znak()+1)));
  }
  public void puni () {
    try { puni (new Znak('a'), new Znak ('z')); } catch (GOpseg g) {}
  }
  public void uredi (Uredjivac u) { u.uredi (niz); }
  public String toString () {
    StringBuffer s = new StringBuffer ();
    for (int i=0; i<niz.length; i++) {
      s.append (niz[i].znak());
      if (i%50==49 || i==niz.length-1)
        s.append ('\n');
    }
    return s.toString ();
  }
}

// Test.java
import uredjivanje.*;
import usluge.Citaj;
public class Test {
  public static void main (String[] varg) {
    Casovnik cas = new Casovnik (200, '*');
    Uredjivac izbor = new Izbor (cas);
    NizZnakova niz = new NizZnakova (75);
    System.out.print (niz + "\n");
    niz.uredi (izbor);
    System.out.print ("\n\n" + niz);
    cas.zavrsi ();
  }
}

plrsircnblhndbvjhsyslskhtsebylniunathmkfqvntknangg scgggnssmmvjckmwybbrnjexf *************************** aabbbbbcccdeeffggggghhhhiijjjkkkkllllmmmmnnnnnnnnn pqrrrsssssssstttuvvvwxyyy
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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