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;
}
}

