quadratische Gleichung

Romolus

Mitglied
Aufgabe:
Implementiere einen Algorithmus zur Lösung einer quadratischen Gleichung ax^2 + bx + c=0 in einer Funktion static void solve(double a, double b, double c) und gib in dieser das Ergebnis aus.
Für die quadratische Gleichung genügt es die reellen Lösungen zu behandeln, aber vergiss keine Sonderfälle (z.B "Komplexe Lösung" oder "Leere Menge" als Rückmeldung zu geben)- NaN als "Lösung" ist nicht erlaubt.

Nachdem ich HalloWelt "programmierte" und mich in mein Skriptum vertieft habe soll ich die Aufgabe lösen und bin maßlos überfordert. Ich habe wirklich kein Plan, wie ich da oben ausführen kann in Java, ich verwende übrigens Netbeans. Hat vielleicht wer Zeit mir die Aufgabe schritt für schritt zu erklären, weil wenn ich die Aufgabe verstehe, wäre ich schon einen großen Schritt weiter.
z.B.Wie soll ich den Programm sagen, dass sie Lösung nicht reell sondern komplex ist?

Die Syntax von einer Funktion:
Java:
RueckgabeTyp funktionsname(Typ1 param1, Typ2 param2, ...) {
anweisung 1;
...
anweisungN;
}
 

njans

Top Contributor
Na, wie würdest du das denn von Hand machen, wenn dir jemand sagt, du hast die Funktion ax^2 + bx + c = 0 und du bekommst die Werte a,b und c ?
 

Romolus

Mitglied
DIe große quadratische Lösungsformel.

Aber ich weiß nicht wie ich beginnen soll, wie das alle rundherum aussehen soll..?
MuSS ich a,b,c al erstes mal deklarieren mit double a =..;
Kann ich beliebige Anfangswerte wälen?
 

njans

Top Contributor
Nun du würdest eine Methode so aufbauen:
Java:
public void solve(double a, double b, double c)
{
  // Solve it here
}

Und dann würdest du in der Methode auf a,b und c zugreifen können.
Du kannst natürlich in der main-Methode deines Programms einmal das ganze starten und mit eigenen Werten testen, das mag dir dann sicherlich etwas helfen.

Java:
public static void main (String[] args)
{
  solve(4,2,0); // Ein Beispiel
}

Dir ist aber generell schon klar, wie du die Nullstellen der Quadratischen Funktion berechnest?
 
Zuletzt bearbeitet:

AquaBall

Top Contributor
DIe große quadratische Lösungsformel.

Aber ich weiß nicht wie ich beginnen soll, wie das alle rundherum aussehen soll..?
MuSS ich a,b,c al erstes mal deklarieren mit double a =..;
Kann ich beliebige Anfangswerte wälen?

Wenn eine Lösung für die nicht offensichtlich ist, dann beginn immer mit einem Pseudocode.
Das kann auch einfach ganz normaler deutscher Text sein.
Den verfeinerst du dann immer weiter bis dir jeder einzelne Schritt klar ist. Der Programmcode ergibt sich dann meist trivial.
Am Ende kannst du diesen Pseudocode sogar als Programmkommentierung drinlassen.

Java:
// Ich brauch 3 Variablen (Will ich die eingeben, oder in den  Programmcode tippen?)
// die sollen laut Aufgabe an eine Methode übergeben werden.
// Die Methode muss sich nur um Ausgabe kümmern.
// Zuerst muss ich prüfen, wann die Wurzel Null wird.
// ok: Wie wird der Radikant (Wert unter der Wurzel berechnet)
// Wenn der Radikant 0 ist habe ich einen Sonderfall
// Wenn der Radikant ...
Daraus wird dann langsam:
Java:
main() {
// Ich brauch 3 Variablen (Will ich die eingeben, oder in den  Programmcode tippen?)
  a = 123
  b = 234
  c = 345
// die sollen laut Aufgabe an eine Methode übergeben werden.
  solve(a,b,c)
// fertig, weil ja alles in der Methode passiert.
}

// Die Methode muss sich nur um Ausgabe kümmern.
public void solve(double a, double b, double c) {
// Zuerst muss ich prüfen, wann die Wurzel Null wird.
// ok: Wie wird der Radikant (Wert unter der Wurzel berechnet)
  double radikant= ...
// Wenn der Radikant 0 ist habe ich einen Sonderfall
  if (radikant == 0) {
// melde SOnderfall
    ...
  }
// Wenn der Radikant ...
  if (radikant ... {
// melde ...
  ...
  }
Die exakte Grammatik und Schreibweise machst du dann völlig losgelöst von der inhaltlichen Problemlösung, dehalb hab ich sie hier auch absichtlich nicht korrekt eingehalten.

Nach dem der Computer auch alles nur schrittweise macht, musst du nur selbst EXAKT wissen was schittweise zu tun ist.
 

Romolus

Mitglied
Hallo schonmal danke, ich zeig euch mal was ich versucht habe.

Java:
       public void solve(double a, double b, double c)
           double a = 1;
           double b = 8;
           double c = 10;
           double d = b*b-4*a*c;
      switch (d) {
        case d<0: System.out.println("Komplexe Lösung"); break;
        case d==0: System.out.println(-b/(2a)); break;
        default: {
       System.out.println("Lösung:");
       System.out.println("x1=" + ((-b+(d)) / (2*a))); break;
       System.out.println("x2=" + ((-b-(d)) / (2*a))); break;
        }
    }

Ich hab gedacht hier ist eine Mehrfachauswahl mit Switch einfacherer.
und break wegen den "fallthrough".
Mir fehlt aber unten natürlich noch die Wurzel. d^(1/2) Aber wie kann ich das eintippen?
 
Zuletzt bearbeitet:

AquaBall

Top Contributor
double a; wird dir einen Compilerfehler bringen, weil "dieselbe" Variable doppelt definiert wird. Diese Zuweisungen gehören in den Aufruf im main() { solve (1,8,10);}

Eine Variable, die du als Parameter übergibst kannst du (so) nicht zuweisen, zumindest ist es nicht sinnvoll, denn wozu übergibst du dann Werte?

Die switch-Anweisung kann auch nur exakte Werte verwenden, kein '>' oder '<'. Deshalb gibt man ja den untersuchten Wert in Klammern an, und nicht beim case nochmal. Ja, ich weiß, andere Sprachen können das, aber Java wird dir einen Compilerfehler bringen. (Hast du's schon mal getestet?)

Und deine Klammern sind auch noch nicht vollständig, default-Zweig falsch, ...
Aber grundsätzlich bist du auf einem guten Weg.
 

Romolus

Mitglied
ich dachte man muss eine Wurzel selbst programmieren?oder doch nicht?
Ich verwende ungern was aus dem Internet, was wir nicht gelernt haben!

Okay also switch nur für exakte Wert, werde ich mir merken.
Also soll man es mit if machen? Wie kann ich bei if drei verschiedene Fälle unterscheiden?

Wenn ich a,b,c nicht definiere, wie weiß er dann welche Werte a,b,c hat? SOll man das mit dem Scanner machen, dass einer was eingeben kann?

Java:
  public void solve(double a,double b, double c)
    double d = b*b-4*a*c:
    if (d < 0) 
      System.out.println("Komplexe Lösung");
           if(d==0)
               System.out.println(-b/(2a));
    else {
      System.out.println("Lösung:");
      System.out.println("x1=" + ((-b+Math.sqrt(d) / (2*a)));
      System.out.println("x2=" + ((-b-Math.sqrt(d) / (2*a)));
    }
 
N

nillehammer

Gast
Romolus hat gesagt.:
ich dachte man muss eine Wurzel selbst programmieren?oder doch nicht?
Ich verwende ungern was aus dem Internet, was wir nicht gelernt haben!
Die Klasse Math ist Bestandteil von Standard-Java. Es ist keine externe Bibliothek oder "was aus dem Internet".
 
Zuletzt bearbeitet von einem Moderator:

langhaar!

Bekanntes Mitglied

Romolus

Mitglied
Nein, ich will es schon so wie oben versucht machen.

Wie gesagt meine Fragen sind:
> Also soll man es mit if machen? Wie kann ich bei if drei verschiedene Fälle unterscheiden?
d<0
d==0
else

Wenn ich a,b,c nicht definiere, wie weiß er dann welche Werte a,b,c hat? SOll man das mit dem Scanner machen, dass einer was eingeben kann?
public void solve(double a,double b, double c)
und wie soll ich dann wie werte für a,b,c definieren?
 

njans

Top Contributor
So macht man das mit if :)

Java:
if (bedingung)
{

}
else if (andere bedingung)
{

}
else if (noch mal was anderes)
{

}
else
{

}

Wenn ich a,b,c nicht definiere, wie weiß er dann welche Werte a,b,c hat? SOll man das mit dem Scanner machen, dass einer was eingeben kann?
public void solve(double a,double b, double c)
und wie soll ich dann wie werte für a,b,c definieren?

Die Methode arbeitet nur mit den Variablen, nicht mit den Werten. Du brauchst doch keine speziellen Werte um den Lösungsweg zu formulieren. Nur bei dem Methodenaufruf von Solve werden Werte übergeben.
Eingaben vom Nutzer entweder über start-parameter oder durch Scanner, als Eingabe des Nutzers. Was deine Aufgabe dazu sagt, weiß ich nicht.
 

Romolus

Mitglied
Dan sagt er mir aber es ist ein Fehler, weil er die Werte nicht findet.
Was ist daran noch alles falsch?

Java:
static void solve( double a,double b, double c)
    double d = b*b-4*a*c:
if (d<0)
{ System.out.println("Komplexe Lösung");
 
}
else if (d==0)
{System.out.println("Lösung:");
 System.out.println(x=(-b)/(2a));
}
else
{     System.out.println("Lösung:");
      System.out.println("x1=" + ((-b+Math.sqrt(d) / (2*a)));
      System.out.println("x2=" + ((-b-Math.sqrt(d) / (2*a)));
 }
 

njans

Top Contributor
Java:
	static void solve(double a, double b, double c)
	{
		double d = b * b - 4 * a * c;
		if (d < 0)
		{
			System.out.println("Komplexe Lösung");

		}
		else if (d == 0)
		{
			System.out.println("Lösung:");
			System.out.println((-b) / (2 * a));
		}
		else
		{
			System.out.println("Lösung:");
			System.out.println("x1=" + ((-b + Math.sqrt(d) / (2 * a))));
			System.out.println("x2=" + ((-b - Math.sqrt(d) / (2 * a))));
		}
	}

Wenn du da plötzlich x = schreibst, natürlich. X wird nirgends definiert und findet auch sonst keine Anwendung.
Da fehlte auch noch ein * zwischen 2 und a. und du hast die {} der Methode vergessen. Zudem hast du ein : anstelle von ; verwendet.
 

Romolus

Mitglied
Ich danke dir.
Trotzdem schreibt der PC, dass bei static void solve(double a, double b, double c)
illegal start of expression.

Und wie kann ich solch eine Funktion aufrufen?
Dabei werden die formalen Paramter durch konkrete Parameter ersetzt.
Java:
double Lösung = solve(a=2,b=3,c=1);
Weil so ist ist ein Fehler.
 

njans

Top Contributor
Java:
double Lösung = solve(a=2,b=3,c=1);

Das ist auch falsch. Du musst da keine Variablen und Werte binden, das macht Java.

Java:
double Lösung = solve(2,3,1);

Das wäre! der richtige Aufruf. Aber du hast als Rückgabewert void genommen. Daher kannst du das nicht machen, denn du gibts nichts zurück. Deine Ausgaben machst du alle über System.out.println, diese werden direkt auf der Konsole ausgegeben.

Java:
solve(2,3,1);

Das reicht aus, dann kriegst du deine Ausgaben.
 

Romolus

Mitglied
Hei, wenn ich deinen Post 15 probiere.
Kommt raus:
java.lang.NoSuchMethodError: main
Exception in thread "main" Java Result: 1

und wenn ich dann noch das mit solve reinschreibe:
quadratischegleichung.QuadratischeGleichung class wasn't found in QUadratischeGleichung project

Weißt du was ich da falsch habe?
 

njans

Top Contributor
Okay, java Grundlagen: Um eine Java Programm starten zu können, muss es eine Methode "main" haben, die folgende Signatur hat:
Java:
public static void main (String[] args)
Diese hast du in deinem Code nicht.
In dieser Methode musst du die Methode solve aufrufen^^
 

Romolus

Mitglied
Du denkst sicher ich bin stroh dumm aber

Java:
public static void main(String[] args) {
 static void solve(double a, double b, double c)
    {
        double d = b * b - 4 * a * c;
        if (d < 0)
        {
            System.out.println("Komplexe Lösung");
 
        }
        else if (d == 0)
        {
            System.out.println("Lösung:");
            System.out.println((-b) / (2 * a));
        }
        else
        {
            System.out.println("Lösung:");
            System.out.println("x1=" + ((-b + Math.sqrt(d) / (2 * a))));
            System.out.println("x2=" + ((-b - Math.sqrt(d) / (2 * a))));
        }
    }
solve(2,3,1);
    }
steht noch immer Fehler
 

njans

Top Contributor
*hust* Methoden in Methoden kann man nicht machen ;)
pack die mal hintereinander und dann rufst du solve von der Main methode auf:
Java:
public static void main(String[] args) {
 
    solve(2,3,1);
    }

static void solve(double a, double b, double c)
    {
        double d = b * b - 4 * a * c;
        if (d < 0)
        {
            System.out.println("Komplexe Lösung");
 
        }
        else if (d == 0)
        {
            System.out.println("Lösung:");
            System.out.println((-b) / (2 * a));
        }
        else
        {
            System.out.println("Lösung:");
            System.out.println("x1=" + ((-b + Math.sqrt(d) / (2 * a))));
            System.out.println("x2=" + ((-b - Math.sqrt(d) / (2 * a))));
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Quadratische Gleichung Java Basics - Anfänger-Themen 6
B Quadratische Gleichung mit JAVA lösen Java Basics - Anfänger-Themen 5
S Quadratische Gleichung Java Basics - Anfänger-Themen 5
V Quadratische Gleichung Java Basics - Anfänger-Themen 20
O Quadratische Gleichung Problem?! Java Basics - Anfänger-Themen 7
G Frage wegen Quadratische Gleichung Java Basics - Anfänger-Themen 9
G quadratische Gleichung lösen Java Basics - Anfänger-Themen 2
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
F Quadratische Gleichungen Java Basics - Anfänger-Themen 6
Screen Kurvendiskussion Quadratische Gleichungen Java Basics - Anfänger-Themen 15
K Datentypen Quadratische Spirale Java Basics - Anfänger-Themen 6
J HILFE! Quadratische funktion programmieren Java Basics - Anfänger-Themen 3
S Quadratische Funktion mit Java primitiv zeichnen. Java Basics - Anfänger-Themen 6
H Quadratische Matrix Java Basics - Anfänger-Themen 8
C Gleichung String Split Java Basics - Anfänger-Themen 6
S Eingabe in einer Gleichung. Java Basics - Anfänger-Themen 14
S Lineare Gleichung lösen Java Basics - Anfänger-Themen 1
C Gleichung mit Potenz mit einer Unbekannten lösen Java Basics - Anfänger-Themen 5
B lineare Gleichung programmieren Java Basics - Anfänger-Themen 2
H Gleichung parsen Java Basics - Anfänger-Themen 10
calzone Problem einer Gleichung mit Modulo Java Basics - Anfänger-Themen 5
F Problem mit quadratischer Gleichung Java Basics - Anfänger-Themen 4
K Lösen einer Gleichung Java Basics - Anfänger-Themen 12
G Zahlen aus Gleichung Java Basics - Anfänger-Themen 4
B Gleichung auslesen und dann damit Rechnen? Java Basics - Anfänger-Themen 4
I gleichung lösen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben