Ich habe einen Double-Array "mal" und ich will das er allgemein die Polynomfunktion mal.length-en Grades ausgibt:
Also: mal[0]*x^mal.length+mal[1]*x^mal.length-1+...+mal[mal.length-2]*x+mal[length-1].
Dabei soll er wenn mal=0 an dieser Stelle nichts hinschreiben, wenn mal<0 nicht +- sondern einfach nur - hinschreiben.
Mein Code funktioniert nicht:
Zum Beispiel habe ich eine Polynomfunktion dritten Grades, d.h. der Array hat eine Länge von 4 und die Werte sind:
mal[0]=-2
mal[1]=0
mal[2]=4
mal[3]=0
Gibt er mir sowas aus:
f(x)=-2.0*x^3+4.0*x+0.0
statt: f(x)=2.0*x^3+4.0*x
oder bei einer PF vierten grades mit
mal[0]=5
mal[1]=0
mal[2]=-3
mal[3]=2
mal[4]=-10
gibt er statt: f(x)=5.0*x^4-3*x^2+2*x-10
das f(x)=5.0*x^4-2.0*x+10.0
aus. Ich bin diesen Code x-mal durch gegangen ich finde den Fehler nicht.
Also: mal[0]*x^mal.length+mal[1]*x^mal.length-1+...+mal[mal.length-2]*x+mal[length-1].
Dabei soll er wenn mal=0 an dieser Stelle nichts hinschreiben, wenn mal<0 nicht +- sondern einfach nur - hinschreiben.
Mein Code funktioniert nicht:
Java:
int gradl2=mal.length
System.out.print("f(x)=");
if(mal[0]==1){
if(last(0)){
System.out.print("x^"+gradl2);
} else if(!nextIUngleich0Postiv(0)){
System.out.print("x^"+gradl2+"-");
}else{
System.out.print("x^"+gradl2+"+");
}
}else if(mal[0]==-1){
if(last(0)){
System.out.print("-x^"+gradl2);
} else if(!nextIUngleich0Postiv(0)){
System.out.print("-x^"+gradl2+"-");
} else{
System.out.print("-x^"+gradl2+"+");
}
} else{
if(last(0)){
System.out.print(mal[0]+"*x^"+gradl2);
} else if(!nextIUngleich0Postiv(0)){
System.out.print(mal[0]+"*x^"+gradl2+"-");
}else{
System.out.print(mal[0]+"*x^"+gradl2+"+");
}
}
gradl2--;
for(int i=1; i<mal.length-3;i++){
if(mal[i]==-1 || mal[i]==1){
if(last(i)){
System.out.print("x^"+gradl2);
} else if(!nextIUngleich0Postiv(i)){
System.out.print("x^"+gradl2+"-");
}else{
System.out.print("x^"+gradl2+"+");
}
} else if (mal[i]==0){
}else{
if(last(i)){
System.out.print(Math.abs(mal[i])+"*x^"+gradl2);
} else if(!nextIUngleich0Postiv(i)){
System.out.print(Math.abs(mal[i])+"*x^"+gradl2+"-");
}else{
System.out.print(Math.abs(mal[i])+"*x^"+gradl2+"+");
}
}
gradl2--;
}
if(mal[mal.length-2]==-1 || mal[mal.length-2]==1){
if(mal.length-1==0){
System.out.print("x");
} else if(mal.length-1<0){
System.out.print("x-");
}else{
System.out.print("x+");
}
} else if (mal[mal.length-2]==0){
}else{
if(mal.length-1==0){
System.out.print(Math.abs(mal[mal.length-2])+"*x");
} else if(mal.length-1<0){
System.out.print(Math.abs(mal[mal.length-2])+"*x-");
}else{
System.out.print(Math.abs(mal[mal.length-2])+"*x+");
}
}
if(mal.length-1!=0){
System.out.print(Math.abs(mal[mal.length-1]));
}
private boolean nextIUngleich0Postiv(int m){
for(int k=m+1; k<mal.length; k++){
if(mal[k]>0){
return true;
}
if(mal[k]<0){
return false;
}
}
return true;
}
private boolean last(int schl){
for(int k=schl+1; k<mal.length; k++){
if(mal[k]!=0){
return false;
}
}
return true;
}
mal[0]=-2
mal[1]=0
mal[2]=4
mal[3]=0
Gibt er mir sowas aus:
f(x)=-2.0*x^3+4.0*x+0.0
statt: f(x)=2.0*x^3+4.0*x
oder bei einer PF vierten grades mit
mal[0]=5
mal[1]=0
mal[2]=-3
mal[3]=2
mal[4]=-10
gibt er statt: f(x)=5.0*x^4-3*x^2+2*x-10
das f(x)=5.0*x^4-2.0*x+10.0
aus. Ich bin diesen Code x-mal durch gegangen ich finde den Fehler nicht.