Ocena użytkownikóww: ***** / 5
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.
Polowienie.java:
/**
* www.algorytm.org
* Tomasz Lubinski (c)2005
* metoda polowienia - obliczanie zer funkcji nieliniowyh
* na przykladzie wielomianow
*/
public class Polowienie {
private static int n,m;
private static double a[];
// algorytm Hornera do obliczania wartosci wielomianu
private static double w(int k, double x) {
if (k==n)
return a[n];
else
return w(k+1,x)*x+a[k];
}
public static void main(String[] args) {
int i;
double p,k,s;
s = 0;
System.out.println("Metoda polowienia - obliczanie miejsc zerowych funkcji nie liniowych \nna przykladzie wielomianow\n\nPodaj stopien wielomianu\n");
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 poczatek przedzialu");
p = Console.readInt("?");
System.out.println("Podaj koniec przedzialu");
k = Console.readInt("?");
System.out.println("Podaj liczbe iteracji");
m = Console.readInt("?");
for(i=1; i<m; i++) {
s=(p+k)/2;
if ((w(0,p)*w(0,s)<0)&&(w(0,s)*w(0,k)>0)) {
k=s;
}
else if ((w(0,p)*w(0,s)>0)&&(w(0,s)*w(0,k)<0)) {
p=s;
}
else if (w(0,s)==0) {
break;
}
else {
System.out.println("Przedzial nie spelnia zalozen");
return;
}
}
if (w(0,s)==0) {
System.out.println("Dokladny pierwiastek wynosi " + s);
}
else {
System.out.println("Przyblizony pierwiastek wynosi " + s);
}
return;
}
}