# Hausaufgabe Berechnung quadratischer Funktion



## Buddy2010 (5. Jan 2011)

Hallo zusammen!

und zwar soll ich als Hausaufgabe ein Programm in Java (Console) schreiben, in das ich dann die Parameter a, b und c einer quadratischen Funktion einlesen soll. Ausgeben soll es mir die Anzahl der Nullstellen sowie deren Koordinaten, den Schnittpunkt der Parabel, den Scheitelpunkt und ob es sich um eine gestauchte/gestreckte Parabel handelt, die nach oben/unten geöffnet ist.

Soviel zur Theorie. Ein bisschen was hab ich schon zusammengebastelt:


```
import java.io.*;
import java.text.*;
import java.lang.*;

public class quadratische {

  public static void main(String[] args) throws IOException {
  String eingabe;
  BufferedReader daten=new BufferedReader (new InputStreamReader (System.in));

  DecimalFormat f = new DecimalFormat("#0.00"); //nur zwei Nachkommastellen, mindestens eine Vorkommastelle
  
  double a;
  double b;
  double c;
  double xq; //x²
  double x;
  double diskriminante;

  System.out.print("\nEigenschaften einer quadratischen Funktion f(x) = ax² + bx + c :");
  System.out.print("\n\nEingabe der Parameter a, b und c (a darf nicht 0 sein!):");
  
  System.out.print("\n\na:");
  eingabe=daten.readLine();
  a=Double.parseDouble(eingabe);
  
  System.out.print("b:");
  eingabe=daten.readLine();
  b=Double.parseDouble(eingabe);
  
  System.out.print("c:");
  eingabe=daten.readLine();
  c=Double.parseDouble(eingabe);
  
  
  //p-q Formel Nullstellenberechnung
  
  diskriminante = (((b/2)*(b/2))-c);
  if (diskriminante >= 0) {
	  double x1,x2;
	  x1 = -(b/2) + Math.sqrt (diskriminante);
	  x2 = -(b/2) - Math.sqrt (diskriminante);
	  if (x1==x2){
		System.out.println("Die Parabel hat eine Nullstelle bei:");
		System.out.println(f.format(x2));
	  }
	  else {
		System.out.print("Die Parabel hat zwei Nullstellen bei:");
		System.out.println(f.format(x1));
		System.out.println(f.format(x2));

	  }
	}
	else {
	  System.out.print("Keine Nullstelle, die Diskriminate ist "+diskriminante);
	}
  }
}
```

Die Nullstellenberechnung bzw. die P-Q Formel spuckt mir immer nur negative Ergebnisse aus, wenn ich sie per Hand nachrechne bekomme ich aber positive Ergebnisse. Außerdem hab ich keinen blassen Schimmer, wie ich den Rest umsetzen soll. 

Wäre nett, wenn mir jemand ein paar Ansätze nennen könnte, wie ich weiter machen kann.

Greetz


----------



## Andi_CH (5. Jan 2011)

1. gibt es einen Hausaufgabenthread -> das gehör eigentlich dorthin
2. hat das eher mit Mathe als mit Java zu tun.

Mit welchen Formeln findest du denn die gesuchten Werte?
Schreib die mal hin und wenn du es dann nicht schaffst die in Java zu implementieren helfen wir schon weiter ...

Ich habe nämlich keine Ahung woher du

```
diskriminante = (((b/2)*(b/2))-c);
```
hast und ob das stimmt ....


----------



## Andi_CH (5. Jan 2011)

ok, ich kanns vorwegnehmen - deine Formel stimmt nicht, also kümmere dich bitte erst um die Mathe (2 Minuten wikpediastudium helfen)


----------



## VfL_Freak (5. Jan 2011)

Moin,



Andi_CH hat gesagt.:


> Ich habe nämlich keine Ahung woher du
> 
> ```
> diskriminante = (((b/2)*(b/2))-c);
> ...



doch doch, das stimmt schon 
Quadratische Gleichungen > Diskriminanten und Anzahl der Lösungen

Aber ich glaube kaum, dass die genannte Implementierung für bswp. b=4 und c=2 einen negativen Wert liefert :noe:

Gruß
Klaus


----------



## Buddy2010 (5. Jan 2011)

Klar hat es eher mit Mathe zu tun. In Mathe weiß ich ja auch, wie es geht, ich muss es halt in Java programmieren. Das ist für mich die Schwierigkeit.

Die Nullstelle berechnet man mit der PQ-Formel:







Die Informationen dazu nimmt man sich aus der Quadratischen Funktion

f(x) = ax² + bx + c

wobei b = p und c = q sind.

Soweit erstmal.

Greetz


----------



## Andi_CH (5. Jan 2011)

NEIN!

p und q basieren auf der Grundform welche

x^2 + px + q ist

du hast aber

a*x^2 + b*x + c



Ergo ist

p = b / a
und
q = c / a


Steht beim Titel "p - q - Formel, Diskriminante und Lösungsmenge" auf Quadratische Funktion ? Wikipedia


----------



## Gast2 (5. Jan 2011)

```
diskriminante = (((b/2)*(b/2))-c);
  if (diskriminante == 0) {
        System.out.println("Die Parabel hat eine Nullstelle bei:");
  } else if diskriminante > 0) {
        System.out.print("Die Parabel hat zwei Nullstellen bei:");
  } else {
      System.out.print("Keine Nullstelle, die Diskriminate ist "+diskriminante);
  }
```


----------



## Andi_CH (5. Jan 2011)

So lange die Formel für die Diskrimante nicht stimmt, wird es auch keinen vernünftigen output geben ...


----------



## VfL_Freak (5. Jan 2011)

Moin,

ok, wo Du Recht hast, hast Du Recht 



Andi_CH hat gesagt.:


> NEIN!
> p und q basieren auf der Grundform welche
> x^2 + px + q ist
> du hast aber
> ...



also die vorliegende Form in die Normalform umgewandelt werden :
Quadratische Gleichungen - Reinquadratische Gleichungen und Gleichungen ohne Absolutglied (onlinekurs von www.mathematik.net)

und ergo_

```
double temp = (b/a) * (1/2);
diskriminante = (temp*temp) - c;
```

Gruß
Klaus


----------



## Buddy2010 (5. Jan 2011)

okay, das mit der pq-formel hab ich jetz auch gerafft, denkfehler von mir.

trotzdem werd ich nicht ganz schlau daraus, was ihr hier so als Lösungsansatz schreibt. 


```
//p-q Formel Nullstellenberechnung
  double temp = (b/a) * (1/2);
  diskriminante = ((temp*temp) - c);
    if (diskriminante >= 0) {
      double x1,x2;
      x1 = -(b/2) + Math.sqrt (diskriminante);
      x2 = -(b/2) - Math.sqrt (diskriminante);
      if (x1==x2){
        System.out.println("Die Parabel hat eine Nullstelle bei:");
        System.out.println(f.format(x2));
      }
      else {
        System.out.print("Die Parabel hat zwei Nullstellen bei:");
        System.out.println(f.format(x1));
        System.out.println(f.format(x2));

      }
    }
    else {
      System.out.print("Keine Nullstelle, die Diskriminate ist "+diskriminante);
    }
```

bekomme immer noch ein falsches Ergebnis raus...


----------



## VfL_Freak (5. Jan 2011)

Schau Dir mal den Post von _fassi _an ... und baue ihn bei Dir ein !

Gruß
Klaus


----------



## Landei (5. Jan 2011)

Schreib einfach:

```
double p = b / a;
double q = c / a
...
diskriminante = (p*p)/4 - q;
...
double root = Math.sqrt(diskriminante);
x1 = -(p/2) + root;
x1 = -(p/2) - root;
...
```


----------



## Buddy2010 (5. Jan 2011)

Habe es jetzt soweit:


```
double a;
  double b;
  double c;
  double x1;
  double x2;
  double p;
  double q;
  double root;
  double diskriminante;

...

//p-q Formel Nullstellenberechnung
  
  diskriminante=(((p*p)/4)-q);
  p=(b/a);
  q=(c/a);
  root=Math.sqrt(diskriminante);
  x1 = -(p/2) + root;
  x2 = -(p/2) - root;
  
  if (diskriminante == 0) {
        System.out.println("Die Parabel hat eine Nullstelle bei:");
        diskriminante = (p*p)/4 - q;
        
  } else if (diskriminante > 0) {
        System.out.print("Die Parabel hat zwei Nullstellen bei:");
  } else {
      System.out.print("Keine Nullstelle, die Diskriminate ist "+diskriminante);
  }
  }
```

Bekomme aber beim compilieren folgende Meldung:


```
Compile D:\Schule\Informatik\quadratische Funktionen Hausaufgabe\quadratische.java with Java-Compiler
quadratische.java:52:20: variable p might not have been initialized
  diskriminante=(((p*p)/4)-q);
                   ^
quadratische.java:52:28: variable q might not have been initialized
  diskriminante=(((p*p)/4)-q);
                           ^
2 errors
```

und werde nicht schlau daraus. Ne Idee?

greetz


----------



## Gast2 (5. Jan 2011)

Du hast p und q nicht zugeweisen bevor du sie verwendest, hast nen Zeilendreher drin:

```
p=(b/a);
q=(c/a);
diskriminante=(((p*p)/4)-q);
```


----------



## Buddy2010 (5. Jan 2011)

oh. danke  jetzt klappts


----------



## Andi_CH (5. Jan 2011)

EDIT : too late ;-)


----------



## Landei (5. Jan 2011)

Das Wurzelziehen  muss unbedingt im [c]if (diskriminante == 0) [/c]-Block kommen, und nicht davor. Sonst negativer Wert -> BUMM!


----------

