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

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

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

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

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

а) У чему је основна разлика на језицима Javа и C++ при стварању и уништавању објеката?

б) Да ли је следећи програм исправан? Образложити.

    class A{ protected int p=10;}
    class B{
      public static void main(String[] arg) {A a=new A(); System.out.println(a.p);}
    }

в) За сваку од група модификатора, навести да ли се на одговарајућу методу у језику Java примењује динамичко везивање: (а) public final, (б) private, (в) public static?

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

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

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


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


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

// Potrosac.java
package struja;
public abstract class Potrosac {
  public abstract double snaga ();
  public abstract String toString ();
}

// Uredjaj.java
package struja;
public class Uredjaj extends Potrosac {
  private String naziv;
  private double snaga;
  public Uredjaj (String n, double s) { naziv = n; snaga = s; }
  public double snaga () { return snaga; }
  public String toString () { return naziv + "(" + snaga + ")"; }
}

// Grupa.java
package struja;
class Elem {
  Potrosac potr; Elem sled;
  Elem (Potrosac p) { potr = p; }
}

public class Grupa extends Potrosac {
  private Elem prvi, posl;
  double snaga;
  public Grupa dodaj (Potrosac p) {
    Elem novi = new Elem (p);
    if (prvi == null) prvi = novi; else posl.sled = novi;
    posl = novi;
    snaga += p.snaga ();
    return this;
  }
  public double snaga () { return snaga; }
  public String toString () {
    String s = "[";
    for (Elem tek=prvi; tek!=null; tek=tek.sled) {
      s += tek.potr;
      if (tek.sled != null) s += ",";
    }
    return s + "]";
  }
}

// Izvor.java
package struja;
public class Izvor {
  private Potrosac[] niz;
  private double snaga, opter;
  public Izvor (double s, int k) {
    niz = new Potrosac [k];
    snaga = s;
  }
  public double snaga () { return snaga; }
  public double opterecenje () { return opter; }
  public int brMesta () { return niz.length; }
  public boolean prikljuci(Potrosac p, int i){
    if (i<0 || i>niz.length-1) return false;
    if (niz[i] != null) { opter -= niz[i].snaga (); niz[i] = null;
    }
    if (p == null) return true;
    double s = p.snaga ();
    if (opter+s > snaga) return false;
    niz[i] = p; opter += s;
    return true;
  }

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

// Struja.java
import struja.*;
import usluge.Citaj;
public class Struja {
  private static Potrosac citaj () {
    System.out.print ("Tip (U,G,.)? ");
    switch (Citaj.Char ()) {
      case 'u': case 'U': {
        System.out.print ("Vrsta? "); String v = Citaj.String ();
        System.out.print ("Snaga? "); double s = Citaj.Double ();
        return new Uredjaj (v, s);
      }
      case 'g': case 'G': {
        Grupa g = new Grupa ();
        Potrosac p = null;
        while ((p=citaj()) != null) g.dodaj (p);
        return g;
      }
      default: return null;
    }
  }
  public static void main (String[] varg) {
    System.out.print ("Snaga izvora? "); double s = Citaj.Double ();
    System.out.print ("Broj prikljucaka? "); int k = Citaj.Int ();
    Izvor izv = new Izvor (s, k);
    Potrosac p; int i;
    do {
      p = citaj ();
      System.out.print ("Prikljucak? ");
      i = Citaj.Int();
    } while (izv.prikljuci (p, i));
    System.out.print (izv);
  }
}

Snaga izvora? 1000 Broj prikljucaka? 5 Tip (U,G,.)? u Vrsta? sijalica Snaga? 100 Prikljucak? 3 Tip (U,G,.)? g Tip (U,G,.)? u Vrsta? tv Snaga? 300 Tip (U,G,.)? u Vrsta? radio Snaga? 150 Tip (U,G,.)? . Prikljucak? 1 Tip (U,G,.)? u Vrsta? reso Snaga? 1000 Prikljucak? 0 550.0/1000.0 0: << prazno >> 1: [tv(300.0),radio(150.0)] 2: << prazno >> 3: sijalica(100.0) 4: << prazno >>
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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