Forum Programowanie c++, delphi Ostatnio aktywny: Nigdy
Nie zalogowany [Zaloguj ]
Pokaż koniec
Wersja do druku | Zapisz | Dodaj do Ulubionych   Wyślij nową wiadomość Sonda:
Autor: Temat: [JAVA] Działania na wielomianach
anusiak
Newbie
*




Postów: 3
Zarejestrowano: 14-3-2009
Offline


[*] wysłano w 14-3-2009 o godz. 10:32 Odpowiedz cytując
[JAVA] Działania na wielomianach



napisałem sobie programik w Javie, ma on za zadanie wykonywać obliczenia na wielomianach - niestety, z nie wyszystkim sobie poradziłem. Chodzi o standaryzacją wielomianu - na ona ucinać zera na początku (lub koncu) tablicy, w ktorej przechowuję współczynniki wielomianu ( zeby nie bylo systuacji np. 0*x^3+5*x^2), oczywiście, może być (nawet powinno być: 5*x^2+0*x+7). Mam też problem ze schematem Hornera, dzieleniem wielomianu przez dwumian i wyliczeniem wartości wielomianudla liczby zespolonej ... Mógłby ktoś pomoc? Z góry wielkie dzięki !


Kod:


import javax.swing.JOptionPane;

class Wielomian{
double tab[]; //pole do przechowywania współczynników wielomianu

public Wielomian(double[]tablica){ // konstruktor kopiujÄ…cy
this.tab=new double[tablica.length];
for(int i=0;i<tab.length;i++){
this.tab=tablica;
}
Standaryzuj();
}

private void Standaryzuj(){ // metoda
int i = 0;
boolean jestZero=true;
while(jestZero&&(i<tab.length)){
jestZero=(tab==0);
i++;
if(jestZero){
tab = new double[1];
tab[0]=0;
}else{
i--;
double []nowa = new double[tab.length-i];
for(int k=0;k<nowa.length;k++){
nowa[k]=tab;
i++;
}
tab=nowa;
}
}
}

public void Wyswietl(){ // wyświetlenie wielomianu
for(int i=tab.length-1;i>=0;i--){
System.out.print("("+tab+")");
if(i>1){
System.out.print("x^"+i+"+");
}else if(i==1){
System.out.print("x + ");
}
}
}

public Wielomian wielomianPrzeciwny(){ // tworzy wielomian przeciwny do danego
for(int i=0;i<tab.length;i++){
if(tab<0){
tab=-tab;
}else if(tab==0){
tab=0;
}else{
tab=-tab;
}
}
return new Wielomian(tab);
}

public Wielomian Sumuj(Wielomian w1, Wielomian w2){ // dodawanie wielomianĂłw
int dl1=w1.tab.length;
int dl2=w2.tab.length;
double []tabWyniku = new double[Math.max(dl1,dl2)];
for(int i=0;i<Math.min(dl1,dl2);i++)
{
tabWyniku=w1.tab+w2.tab;
}
if(dl1<dl2)
{
for(int i=dl1;i<dl2;i++)
tabWyniku=w2.tab;
}
if(dl2<dl1)
{
for(int i=dl2;i<dl1;i++)
tabWyniku=w1.tab;
}
return new Wielomian(tabWyniku);
}
public Wielomian Odejmuj(Wielomian w1, Wielomian w2){ // odejmowanie wielomianĂłw
w2=w2.wielomianPrzeciwny();
int dl1=w1.tab.length;
int dl2=w2.tab.length;
double []tabWyniku = new double[Math.max(dl1,dl2)];
for(int i=0;i<Math.min(dl1,dl2);i++)
{
tabWyniku=w1.tab+w2.tab;
}
if(dl1<dl2)
{
for(int i=dl1;i<dl2;i++)
tabWyniku=w2.tab;
}
if(dl2<dl1)
{
for(int i=dl2;i<dl1;i++)
tabWyniku=w1.tab;
}
return new Wielomian(tabWyniku);
}

public Wielomian pochodna(){ // metoda obliczajaca pochodna wielomianu
double[] t=new double[tab.length-1];
for(int i=0;i<t.length;i++)
t=tab[i+1]*(i+1);
return new Wielomian(t);
}

public double wartoscWielomianu(double d){ // obliczanie wartości wielomianu dla zadanej rzeczywistej wartości d
double wart = tab[0];
for(int i=1;i<tab.length;i++){
wart=wart*d+tab;
}
return wart;
}

public double pochodnaDlaWart(double x){ //obliczanie wartości pierwszej pochodnej wielomianu dla zadanej rzeczywistej wartości d;
double wartosc=0;
double[] t=new double[tab.length-1];
for(int i=0;i<t.length;i++){
t=tab[i+1]*(i+1);
}
Wielomian w = new Wielomian(t);
wartosc=t[0];
for(int i=1;i<tab.length;i++){
wartosc=wartosc*x+tab;
}
return wartosc;
}

public Wielomian schematHornera(int a){
int st=tab.length-1;
double[]wsp = new double[st];
wsp[0]=tab[0];
for(int i=1;i<st;i++){
wsp=wsp[i-1]*a+tab;
}
return new Wielomian(wsp);
}

public Wielomian dzieleniePrzezTrojmian(double p, double q){ // dzielenie wielomianu przez dwumian
double[] u = new double [tab.length-2];
double []tablica = {q,p,1};
for(int i=0;i<tab.length-2;i++){
u=tab/tablica;
}
return new Wielomian(u);
}
} //koniec klasy wielomian

public class Main {
public static void main(String[] args) {

int [] tablica6 = {9,6,1};
int [] tablica5 = {1,2,2,1};

Wielomian w2 = new Wielomian(tablica6);
Wielomian w3 = new Wielomian(tablica5);


}
}


[Wyedytowany dnia 14-3-2009 >anusiak]
Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U
anusiak
Newbie
*




Postów: 3
Zarejestrowano: 14-3-2009
Offline


[*] wysłano w 14-3-2009 o godz. 12:23 Odpowiedz cytując


Ok, ze standaryzacją już sobie jakoś poradziłem - czekam na pomysły, co do innych rzeczy, lub chociaż jakieś wskazówki ;)



Kod:
private void Standaryzuj(){ // standaryzacja wielomianu
int i=tab.length-1;
int ile=0;
while(tab==0&&i>=0){
ile++;
i--;
}
double [] nowa = new double[tab.length-ile];
for(int j=0;j<nowa.length;j++){
nowa[j]=tab[j];
}
tab=nowa;
}


[Wyedytowany dnia 14-3-2009 > anusiak]
Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U
anusiak
Newbie
*




Postów: 3
Zarejestrowano: 14-3-2009
Offline


[*] wysłano w 15-3-2009 o godz. 14:42 Odpowiedz cytując


Zrobiłem schemat Hornera, jednak dalej nie działa mi chyab tak jak powinien ... Dla wieloamianow stopnia 2 jest ok, dla wiekszych, chyba jednak nie Co mam tutaj zle ??

Kod:

Kod:
public Wielomian schematHornera(double a){
double[]wsp = new double[tab.length-1];
wsp[0]=tab[tab.length-1];
for(int i=tab.length-2;i>-0;i--){
wsp=wsp[i-1]*a+tab;
}
double[]nowa=new double[wsp.length];
int k=0;
Standaryzuj();
for(int j=wsp.length-1;j>=0;j--){
nowa[k]=wsp[j];
k++;
}
return new Wielomian(nowa);
}
Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U
Wyślij nową wiadomość Sonda:


Pokaż początek

Sitemap
Copyright © 2005-2007 by coding-portal.com
Programowaniedla każdego. Programowanie w c++, java, delphi, pascal, perl oraz innych językach. Tworzenie stron w html, xhtml, php z użyciem mysql, css oraz ich pozycjonowanie. Zapraszamy do udziału w życiu naszego forum!
[zapytań: 15]
[PHP: 87.4% - SQL: 12.6%]