Nadesłany przez Tomasz Lubiński, 08 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Show.java:
/** * Algorytm Show-Trauba * www.algorytm.org * Tomasz Lubinski (c)2005 * */ public class Show { private static int n,p,q,stopien; private static double a[]; private static double x,wynik; // funkcja pomocnicza s(j) private static double s(int j) { return (n-j)%q; } //funkcja pomocnicza r(j) private static double r(int j) { if (j%q==0) return q; else return 0; } //funkcja pomocnicza r(j) private static double T(int i, int j, double x) { if (x==0) //by mozna bylo obliczyc pochodna w punkcie x=0 return a[j]; else if (j==-1) return a[n-i-1]*Math.pow(x,s(i+1)); else if (i==j) return a[n]*Math.pow(x,s(0)); else return T(i-1, j-1, x)+T(i-1, j, x)*Math.pow(x,r(i-j)); } private static double pochodna(int stopien, double punkt) { if (punkt==0) return T(n,stopien,punkt); else return T(n,stopien,punkt)/Math.pow(punkt,stopien%q); } public static void main(String[] args) { int i; System.out.println("Algorytm Show-Trauba - obliczanie pochodnych znormalizowanych wielomianu\nPodaj stopien wielomianu"); n = Console.readInt("?"); a = new double[n+1]; System.out.println("Podaj teraz kolejne wspolczynniki wielomianu.\nZaczynij od tego z najwieksza potega.\n"); for(i=n; i>=0; i--) { a[i] = Console.readDouble("a" + i); } System.out.println("Podaj punkt x"); x = Console.readInt("?"); System.out.println("Podaj wartosc parametru p"); p = Console.readInt("?"); q=(n+1)/p; if (p*q!=n+1) { System.out.println("Zla wartosc parametru p (musi byc on dzielnikiem n+1)"); return; } System.out.println("Podaj stopien znormalizowanej pochodnej do obliczenia"); stopien = Console.readInt("?"); if (stopien>n) { System.out.println("Stopien pochodnej nie moze byc wiekszy od stopnia wielomianu"); return; } if (stopien<1) { System.out.println("Stopien pochodnej nie moze byc mniejszy od 1"); return; } wynik=pochodna(stopien,x); System.out.println("Znormalizowana pochodna " + stopien + " stopnia w punkcie " + x + " ma wartosc " + wynik); return; } }