Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2
Први колоквијум
9. 5. 2008.

Аутори: Игор Тартаља, Ђорђе Ђурђевић и Ласло Краус

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

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

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

а) На којој идеји се заснива добра преносивост програма писаних на језику Java?

б) Да ли се у два имплементирана интерфејса могу налазити методе са истим именима и:
        (1) истим листама аргумената и бацаних изузетака, а различитим повратним типовима;
        (2) различитим листама аргумената и бацаних изузетака и различитим повратним типовима;
        (3) истим листама аргумената и бацаних изузетака и истим повратним типовима

в) Да ли се из анонимне класе може приступати формалним аргументима и локалним променљивама окружујуће функције?

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

Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

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


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


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

// Vektor.java

package figure;

public class Vektor {
  private double x, y, z;

  public Vektor( double a, double b, double c) { x = a; y = b; z = c; }

  public Vektor( Vektor v) { x = v.x; y = v.y; z = v.z; }

  public Vektor dodaj( Vektor v) { x += v.x; y += v.y; z += v.z; return this; }

  public Vektor pomnozi( double s) { x *= s; y *= s; z *= s; return this; }

  public double intenzitet() { return Math.sqrt (x*x + y*y + z*z); }

  public String toString() { return "(" + x + "," + y + "," + z + ")"; }
}

// Imenovan.java

package figure;

public interface Imenovan { String dohvatiIme(); }

// Figura.java

package figure;

public abstract class Figura implements Imenovan, Cloneable {
  private String ime;

  protected Figura( String i) { ime = i; }

  public String dohvatiIme() { return ime; }

  public Figura clone() {
    try { return (Figura)super.clone(); }
      catch (CloneNotSupportedException g) { return null; }
  }

  public String toString() { return ime; }
}

// Pokretljiv.java

package figure;

public interface Pokretljiv {
  void pomeri( Vektor pomak);
  Vektor polozaj();
}

// Tacka.java

package figure;

public class Tacka implements Pokretljiv, Imenovan, Cloneable {
  private char ime;
  private Vektor polozaj;

  public Tacka( char i, Vektor p) { ime = i; polozaj = p; }

  public String dohvatiIme() { return Character.toString( ime); }

  public void pomeri( Vektor pomak) { polozaj.dodaj( pomak); }

  public Vektor polozaj() { return polozaj; }

  public Tacka clone() {
    try {
      Tacka t = (Tacka)super.clone( );
      t.polozaj = new Vektor( polozaj);
      return t;
    } catch (CloneNotSupportedException g) {
      return null;
    }
  }

  public String toString() { return dohvatiIme() + polozaj; }
}

// GGotov.java

package figure;

public class GGotov extends Exception {
  public String toString( ) { return "*** Mnogougao je vec gotov!"; }
}

// Mnogougao.java

package figure;

public class Mnogougao extends Figura implements Pokretljiv {
  private Tacka[] tem;
  private int n;

  public Mnogougao ( String ime, int brTem) { super( ime); tem = new Tacka [brTem]; }

  public Mnogougao dodaj(Tacka teme)throws GGotov {
    if (n == tem.length) throw new GGotov( );
    tem[n++] = teme;
    return this;
  }

  public void pomeri( Vektor pomak) {
    for (int i=0; i<n; tem[i++].pomeri(pomak));
  }

  public Vektor polozaj( ) {
    Vektor tez = new Vektor( 0, 0, 0);
    for (int i=0; i<n; tez.dodaj(tem[i++].polozaj()));
    return tez.pomnozi( 1./n);
  }

  public Mnogougao clone() {
    Mnogougao m = (Mnogougao)super.clone( );
    m.tem = tem.clone();
    for (int i=0; i<n; i++) m.tem[i] = (Tacka)tem[i].clone();
    return m;
  }

  public String toString() {
    StringBuffer s = new StringBuffer ( super.toString());
    s.append( '[');
    for (int i=0; i<n; i++) {
      if (i>0) s.append( ',');
      s.append( tem[i]);
    }
    return s.append( ']').toString( );
  }
}

// Program.java

import figure.*;

public class Program {
  public static void main (String[] varg) {
    try {
      Mnogougao m1 = new Mnogougao( "abc", 3);
      m1.dodaj( new Tacka('A', new Vektor(0,0,0)))
        .dodaj( new Tacka('B', new Vektor(1,1,1)))
        .dodaj( new Tacka('C', new Vektor(3,2,1)));
      Mnogougao m2 = m1.clone();
      m2.pomeri (new Vektor(1,2,3));
      System.out.println( m1 + " - " + m1.polozaj().intenzitet());
      System.out.println( m2 + " - " + m2.polozaj().intenzitet());
    } catch (GGotov g) {
      System.out.println( g);
    }
  }
}

abc[A(0.0,0.0,0.0),B(1.0,1.0,1.0),C(3.0,2.0,1.0)] - 1.7950549357115013 abc[A(1.0,2.0,3.0),B(2.0,3.0,4.0),C(4.0,4.0,4.0)] - 5.280993172584953
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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