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

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

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

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

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

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

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

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

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

б)Да ли protected члановима класе могу да приступају методе других класа из истог пакета, ако те друге класе нису изведене из дате класе? Зашто?

в)Чему је намењен оператор instanceof? Навести пример коришћења.


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


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

// Tacka.java
package krive;
public class Tacka {
  private double x, y;
  public Tacka (double xx, double yy) { x = xx; y = yy; }
  public Tacka (double xx) { x = xx; }
  public Tacka () {}
  public double x () { return x; }
  public double y () { return y; }
  public String toString () { return "(" + x + "," + y + ")"; }
}

// Kriva.java
package krive;
public abstract class Kriva {
  public abstract Tacka tacka (double p);
}

// Spirala.java
package krive;
public class Spirala extends Kriva {
  private double a, b;
  public Spirala (double aa, double bb) { a = aa; b = bb; }
  public Spirala () { a= 1; }
  public Tacka tacka (double p) { return new Tacka (a*p*Math.cos(b+p), a*p*Math.sin(b+p)); }
}

// Oscil.java
package krive;
public class Oscil extends Kriva {
  private double a, b, c;
  public Oscil (double aa, double bb, double cc) { a = aa; b = bb; c = cc; }
  public Oscil () { a = b = 1; }
  public Tacka tacka (double p) { return new Tacka (p, a*Math.sin(b*p+c)); }
}

// Prikazivac.java
package krive;
public abstract class Prikazivac {
  public void prikazi (Kriva k, double pmin, double pmax, double dp)
    { for (double p=pmin; p<=pmax; p+=dp) prikaziTacku (k, p); }
  protected abstract void prikaziTacku (Kriva k, double p);
}

// Konzola.java
package krive;
public class Konzola extends Prikazivac {
  protected void prikaziTacku (Kriva k, double p)
    { System.out.println (p + "\t" + k.tacka (p)); }
}


// KriveT.java
import krive.*;
import usluge.Citaj;
public class KriveT {
  public static void main (String[] varg) {
    radi: while (true) {
      Kriva k = null;
      System.out.print ("Kriva (S, O, .)? ");
      switch (Citaj.Char ()) {
        case 's': case 'S':
          System.out.print ("a,b? ");
          k = new Spirala (Citaj.Double(), Citaj.Double());
          break;
        case 'o': case 'O':
          System.out.print ("a,b,c? ");
          k = new Oscil (Citaj.Double(), Citaj.Double(), Citaj.Double());
          break;
        case '.': break radi;
      }
      if (k != null) {
        System.out.print ("pmin,pmax,dp? ");
        double pmin = Citaj.Double (), pmax = Citaj.Double (), dp = Citaj.Double ();
        System.out.println ("\np\t(x(p),y(p))\n==================");
        new Konzola ().prikazi (k, pmin, pmax, dp);
      }
    }
  }
}

Kriva (S, O, .)? s a,b? 2 1 pmin,pmax,dp? 0 6.28 0.628 p (x(p),y(p)) ================== 0.0 (0.0,0.0) 0.628 (-0.0718086,1.2539455) 1.256 (-1.5896707,1.9450169) 1.884 (-3.6436788,0.9599107) 2.512 (-4.6832721,-1.8186637) 3.14 (-3.4015104,-5.2790270) 3.768 (0.4188686,-7.5243501) 4.396 (5.5529986,-6.8164118) 5.024 (9.7123877,-2.5752336) 5.652 (10.5438660,4.0752059) 6.28 (6.8198275,10.5472058) Kriva (S, O, .)? o a,b,c? 2 .5 3.14 pmin,pmax,dp? -3.14 3.14 .628 p (x(p),y(p)) ================== -3.14 (-3.14,1.9999993) -2.512 (-2.512,1.9027027) -1.884 (-1.884,1.6193435) -1.2559999 (-1.2559999,1.1776311) -0.6279999 (-0.6279999,0.6207598) 2.2204460E-16 (2.2204460E-16,0.0031853) 0.628 (0.628,-0.6147006) 1.256 (1.256,-1.1724759) 1.884 (1.884,-1.6155965) 2.512 (2.512,-1.9007302) Kriva (S, O, .)? .

         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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