Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање на језику Java - колоквијуми
Први колоквијум
29. 11. 2008

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

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

Грешке пријављивати изузецима са заједничком наткласом за све врсте грешака у вези са функцијама. У класама за изузетке предвидети састављање текста поруке.

Написати на језику Java програм који направи објекат за функцију sin x + (2 sin 4x+π/2) / (0,5 sin 2x), испише функцију на главном излазу и табелира вредност функције за свако 0≤x≤2π са кораком π/8.


Напомене (садржај)


Решење задатка (поставка | садржај)

// GFun.java

package funkcije;

public abstract class GFun extends Exception {
  private String por;

  public GFun( String por) { this.por = por; }

  public String toString() { return "GRESKA: " + por; }
}

// Funkcija.java

package funkcije;

public interface Funkcija {
  double fun( double x) throws GFun;
  String toString();
}

// Sinus.java

package funkcije;

public class Sinus implements Funkcija {
  private double a, b, c;

  public Sinus( double aa, double bb, double cc) { a = aa; b = bb; c = cc; }

  public double fun( double x) { return a * Math.sin( b * x + c); }

  public String toString() { return a + "*sin(" + b + "*x+" + c + ")"; }
}

// GFunNula.java

package funkcije;

public class GFunNula extends GFun {
  public GFunNula() { super( "Deljenje nulom!"); }
}

// Kolicnik.java

package funkcije;

public class Kolicnik implements Funkcija {
  private Funkcija f, g;

  public Kolicnik( Funkcija ff, Funkcija gg) { f = ff; g = gg; }

  public double fun( double x) throws GFun {
    double a = f.fun( x);
    double b = g.fun( x);
    if (b == 0) throw new GFunNula();
    return a / b;
  }

  public String toString() { return "(" + f + ")/(" + g + ")"; }
}

// GFunPun.java

package funkcije;

public class GFunPun extends GFun {
  public GFunPun() { super( "Zbir funkcija je pun!"); }
}

// Zbir.java

package funkcije;

public class Zbir implements Funkcija {
  private Funkcija[] niz;
  private int n;

  public Zbir( int k) { niz = new Funkcija [k]; }

  public Zbir dodaj( Funkcija f) throws GFunPun {
    if (n == niz.length) throw new GFunPun();
    niz[n++] = f;
    return this;
  }

  public double fun( double x) throws GFun {
    double z = 0;
    for (int i=0; i<n; i++) z += niz[i].fun( x);
    return z;
  }

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

// Test.java

import funkcije.*;

public class Test {
  public static void main( String[] varg) {
    Zbir z = new Zbir (2);
    try {
      z.dodaj( new Sinus(1,1,0))
       .dodaj( new Kolicnik ( new Sinus (2,4,Math.PI/2), new Sinus (0.5,2,0)));
    } catch (GFunPun g) {}
    System.out.println( z);
    for (int i=0; i<=16; i++) {
      double x = i * Math.PI / 8;
      System.out.printf( "%10.6f ", x);
      try {
        System.out.printf( "%15.5e\n", z.fun(x));
      } catch (GFun g) {
        System.out.printf( "%15s\n", "ne moze");
      }
    }
  }
}

(1.0*sin(1.0*x+0.0))+((2.0*sin(4.0*x+1.5707963267948966))/(0.5*sin(2.0*x+0.0))) 0.000000 ne moze 0.392699 3.82683e-01 0.785398 -3.29289e+00 1.178097 9.23880e-01 1.570796 3.26625e+16 1.963495 9.23880e-01 2.356194 4.70711e+00 2.748894 3.82683e-01 3.141593 -1.63312e+16 3.534292 -3.82683e-01 3.926991 -4.70711e+00 4.319690 -9.23880e-01 4.712389 1.08875e+16 5.105088 -9.23880e-01 5.497787 3.29289e+00 5.890486 -3.82683e-01 6.283185 -8.16562e+15
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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