# Programm um funktion zuberechnen



## Hünker (2. Dez 2011)

Hallo,
ich soll dieses programm programmieren:

Ein Programm soll für Funktionen Berechnungen durchführen.
Gegeben sind die Funktionen f1(x) := x^2 + 7^x + 3 und f2(x) := 1/
3x^3 + 12x^2 - 3^x + 16.
Erst soll eine Variable x vom Typ float erstellt werden. Diese Variable erhält den
Wert, der beim Programmstart als Argument in der Konsole übergeben wird.
Dann soll eine double-Variable f1 erstellt werden. In diese Variable wird die Lösung
von f1(x) mit der Variablen x gespeichert.
Analog für eine double-Variable f2.
Runden Sie nun die Werte f1 und f2 auf 4 Nachkommastellen genau. Nutzen Sie
kaufmännisches Runden.
Geben Sie die Werte von f1 und f2 aus.
Die Ausgaben sollen mit dem System.out.println Befehl erfolgen.
Das Programm soll MathFunction heissen.

bisher habe ich das:


```
ackage grundlagenuebungen;

/**
 *
 * 
 */
public class MathFunction {
    

public static void main(String[] args) {

    


float x = Float.parseFloat (args[0]);

double f1 ;

double f2 ;

double Resultf1 = (x*x)+(7*x)+3;

double Resultf2 = (1/3*x*x*x) + (12*x*x)- (3*x)+16;


System.out.println (Math.round(Resultf1));
System.out.println (Math.round(Resultf2));

     }
   }
```

das problem ist ich hab keine Ahnung wie man 1. potenzen in java berechnet 2. muss ich ja von string auf float am anfang umwandeln aber irgendwie klappts nich..

hoffe könntet mir helfen bzw tipps geben


----------



## Gast2 (2. Dez 2011)

> 1. potenzen in java berechnet


Schau dir mal die Klasse Math an, speziell Math#pow



> 2. muss ich ja von string auf float am anfang umwandeln aber irgendwie klappts nich..


"irgendwie klappts nich" ist keine besonders hilfreiche Fehlermeldung  Startest du dein Programm mit Parametern? Du erwartest in deinem Quellcode ja einen.


----------



## Hünker (2. Dez 2011)

ok math.pow guck ich mir gleich an 

also ich mach das mit netbeans halt und mach das über run file...als parameter hab ich 


```
float x = Float.parseFloat (args[23]);
```

genommen. Hoffe das meinst du mit Parameter, weil in der Aufgabe ist ja nichts mit Eingabefenster oder ähnlichem gemeint habe es dann so verstanden...hoffe ist richtig...ist den die konvertierung richtig also von string in float? und muss ich auch die beiden doubles konvertieren vorher?


----------



## Gast2 (2. Dez 2011)

> Hoffe das meinst du mit Parameter, weil in der Aufgabe ist ja nichts mit Eingabefenster oder ähnlichem gemeint habe es dann so verstanden


Nein, ich meine Programm Argumente die du beim start übergibst. Wenn du schreibst args[0], dann sprichst du den ersten übergabeparameter an:
java MathFunction *1.23*
Das kannst du sicherlich auch irgendwo in Netbeans konfigurieren.



> ist den die konvertierung richtig also von string in float? und muss ich auch die beiden doubles konvertieren vorher?


Die beiden doubles benutzt du doch in deinem Programm gar nicht?


----------



## Final_Striker (2. Dez 2011)

Hünker hat gesagt.:


> muss ich ja von string auf float am anfang umwandeln aber irgendwie klappts nich..



Dein Ergebnis ist doch vom Typ double, warum willst du es dann in float umwandeln?


----------



## Hünker (2. Dez 2011)

muss ich es nicht in umwandeln? weil die variable ist ja in float aber das ergebnis in double ?


----------



## Fab1 (2. Dez 2011)

kleinere Datentypen passen in größere rein.

double passt in float

und int passt in long rein 

In Java von Kopf bis Fuß hat man das mit Elefanten gelernt :toll::toll:


----------



## Hünker (2. Dez 2011)

also ich hab das jetzt überarbeitet: nur verstehe ich noch das mit dem übergabe parameter nicht wo ich das hineinschreiben soll und/oder ob irgend noch was fehlt? :S


```
/*
 * 
 */
package grundlagenuebungen;

/**
 *
 * 
 */
public class MathFunction {
    

public static void main(String[] args) {

    


float x ;

double f1 ;

double f2 ;

double Resultf1 = Math.pow(x.,2.) + 7 * x + 3;
double Resultf2 = 1/3 * Math.pow(x.,2.)+ 12 * Math.pow(x.,2) - 3 * x + 16; 




System.out.println (Math.round(Resultf1));
System.out.println (Math.round(Resultf2));

     }
   }
```


----------



## Hünker (4. Dez 2011)

Hallo,
habe es nochmal überarbeitet
das problem ist nur bei f1 kommt das richtige ergebnis raus nur bei f2 noch nicht! könnte einer mir den fehler finden? und ich weiß das es unschön aussieht mit (x*x*x) wäre besser mit Math.pow aber habs irgendwie damit nich hinbekommen -.-


```
/*
 * 
 */
package grundlagenuebungen;

/**
 *
 * @author 
 */
public class MathFunction {
    

public static void main(String[] args) {

  float x = Float.parseFloat (args [0]); 

  

double f1 ;

f1 = x*x + 7*x + 3;

double f2 ;

f2 = 1/3*(x*x*x) + 12*(x*x) - 3*x + 16;

       




System.out.println (Math.round(f1 * 10000.0)/ 10000.0);
System.out.println (Math.round(f2 * 10000.0)/ 10000.0);


     }
   }
```

und ansonsten fehlt mir irgendwas noch was inder Aufgabenstellung steht oder habe ich alles drinne was sein sollte? 

danke im vorraus!


----------



## Gast2 (4. Dez 2011)

1/3 ergibt 0. Du musst eine zahl auf Double casten


----------



## Hünker (4. Dez 2011)

ehmm was ist den double casten?


----------



## Marcinek (4. Dez 2011)

double casten - Google-Suche


----------



## Final_Striker (4. Dez 2011)

[c]f2 = 1/3.0*(x*x*x) + 12*(x*x) - 3*x + 16;[/c]

reicht auch schon aus.


----------



## Hünker (4. Dez 2011)

so ich hoffe hab es gechastet, komme zumindest aufs richtige ergebnis 


```
public static void main(String[] args) {

  float x = Float.parseFloat (args [0]); 

  

double f1 ;

f1 = Math.pow(x,2) + 7*x + 3;

double f2 ;

f2 = (1/3f)*Math.pow(x,3) + 12*Math.pow(x,2) - 3*x + 16;

       




System.out.println (Math.round(f1 * 10000.0)/ 10000.0);
System.out.println (Math.round(f2 * 10000.0)/ 10000.0);


     }
   }
```


----------



## Hünker (4. Dez 2011)

die aufgabe war ja so:
Erst soll eine Variable x vom Typ float erstellt werden. Diese Variable erhält den
Wert, der beim Programmstart als Argument in der Konsole übergeben wird.
Dann soll eine double-Variable f1 erstellt werden. In diese Variable wird die Lösung
von f1(x) mit der Variablen x gespeichert.
Analog für eine double-Variable f2.
Runden Sie nun die Werte f1 und f2 auf 4 Nachkommastellen genau. Nutzen Sie
kaufmännisches Runden.
Geben Sie die Werte von f1 und f2 aus.
Die Ausgaben sollen mit dem System.out.println Befehl erfolgen.

kann mir einer von euch sagen ob ich jetzt alle punkte erfülle? vorallem weiß ich nicht ob ich die double variablen f1 und f2 gespeichert habe?


----------



## Fahoz (6. Dez 2011)

Hallo, 

was bedeutet in diesem Zusammenhang die Fehlermeldung

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
	at grundlagenuebung.MathFunction.main(MathFunction.java:9)

betrifft im NetBean-Programm Zeile 9 bzw diesem Part -> float x = Float.parseFloat (args []);

lieben gruß


----------



## Gast2 (6. Dez 2011)

http://docs.oracle.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html hat gesagt.:
			
		

> Thrown to indicate that an index of some sort (such as to an array, to a string, or to a vector) is out of range.


Auf gut Deutsch: Den Index 2 gibt es in deinem Array nicht.


----------



## Fahoz (6. Dez 2011)

in wie fern kann man diesen Fehler beheben, bzw den Array erweitern / passend machen?
Liegt der Fehler in dieser Zeile?   float x = Float.parseFloat (args []); ?
Lieben Gruß


----------



## Gast2 (6. Dez 2011)

```
float x = Float.parseFloat (args []);
```
Da fehlt schonmal nen index bei dem args Array. Vermutlich meinst du da args[0]. args enthält die Argumente die du bei deinem Programmstart übergibst.

```
java MathFunction 5.7
```
In diesem Fall wäre args[0] 5.7, dass du dann auf Float casten kannst. Wo du die Argumente die beim Start übergeben bei Netbeans angibst musst du mal schauen, das weiß ich nicht.


----------



## Javafreak192 (6. Dez 2011)

Hünker hat gesagt.:


> so ich hoffe hab es gechastet, komme zumindest aufs richtige ergebnis
> 
> 
> ```
> ...



Kann mir mal jemand sagen warum man System.out.println (Math.round(f1 * 10000.0)/ 10000.0) rechnet und damit auf 4 Nachkommastellen kommt? Außerdem verstehe ich nicht warum man bei f2 (1/3f) schreibt. Warum f?


----------



## Fahoz (6. Dez 2011)

okay das hat soweit geklappt dankeschön. ja ist args 0

er spuckt mir die richtigen Ergebnisse aus. Ist das casten auf float nötig bzw gemäß der Aufgabe wichtig?


----------



## SlaterB (6. Dez 2011)

@Javafreak192
Multiplikation, Runden, Division rundet auf bestimmte Nachkommastellen,

f steht für float, sonst wird nur int/int ganzzahlig gerechnet


----------



## Tobias Stephan (7. Dez 2011)

danke,hat mir auch geholfen


----------

