Hallo an alle,
ich bin neu, studiere seit kurzem Informatik und habe ein Problem mit einer Aufgabe die wir lösen sollen.
Und ja, ich hab auch schon die sufu benutzt,
hab auch 2 ähnliche Threads gefunden, nur leider hat es mir nicht zu einer Lösung geholfen.
Vielleicht fehlt mir auch nur die richtige Vokabel um was passendes zu finden :/
Also folgendes:
Es geht im Prinzip um eine simple p-q berechnung.
Die Zahlen a, b und c sollen in der Form ax²+bx+c=0 eingegeben werden.
Weiterhin soll das Programm ausgeben ob es nur eine, zwei oder keine Lösungen gibt.
Daher überprüfe ich anschließend das Ergebniss nach der Form oben. Bei einfachen Werten funktioniert das auch perfekt.
Allerdings scheint die Prüfung bei folgenden Werten für a, b und c nicht zu funktionieren:
a=1, b=-4,2, c=4,21
Meine Vermutung ist ja, dass da schon intern irgendwo gerundet wird, und er daher bei der Prüfung nicht auf ==0 bzw !=0 kommt.
Kann mir jemand ein Tipp geben woran das liegt?
Achja, für Tips zum Programmierstil wäre ich auch dankbar
Und bitte nehmt mich nicht direkt auseinander,
studiere erst seit ein paar wochen ^^
[Java]
import java.util.Scanner;
public class Quadratic {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
double a, b, c;
System.out.println("Bitte geben sie Ihre Werte ein: ");
System.out.print("a = ");
a = console.nextDouble();
System.out.print("b = ");
b = console.nextDouble();
System.out.print("c = ");
c = console.nextDouble();
quadratic(a, b, c);
console.close();
}
public static void quadratic(double a, double b, double c) {
double x1=0, x2=0;
//Ist a != 0 ?
if (a!=0) {
x1 = ((-b+Math.sqrt((b*b-4*a*c)))/2*a); // Lösen nach p-q-Formel
System.out.println(x1); // <-- Später noch entfernen!!!
x2 = ((-b-Math.sqrt((b*b-4*a*c)))/2*a); // Lösen nach p-q-Formel
System.out.println(x2); // <-- Später noch entfernen!!!
//Zwei Lösungen
if (a*x1*x1+b*x1+c==0 && (a*x2*x2+b*x2+c==0) ) {
System.out.println("Erste Lösung = "+round1(x1));
System.out.println("Zweite Lösung = "+round1(x2));
}
else {
//Keine Lösung
if (a*x1*x1+b*x1+c!=0 && (a*x2*x2+b*x2+c!=0) ) {
System.out.println("Keine reele Lösung");
}
//Nur eine Lösung
else {
if (a*x1*x1+b*x1+c==0) {
System.out.println("Lösung: "+round1(x1));
}
else {
if (a*x2*x2+b*x2+c==0) {
System.out.println("Lösung: "+round1(x2));
}
}
}
}
}
else {
System.out.println("a muss ungleich 0 sein");
}
}
public static double round1(double value) {
if (Double.isNaN(value)) return value;
if (Double.isInfinite(value)) return value;
return Math.round(value * 10) / 10.0;
}
}
[/Java]
btw,
für den fall dass ich mich nicht eindeutig ausgedrückt habe,
hier nen bild von der aufgabenstellung:
http://www.abload.de/img/pqtnud0.jpg
ich bin neu, studiere seit kurzem Informatik und habe ein Problem mit einer Aufgabe die wir lösen sollen.
Und ja, ich hab auch schon die sufu benutzt,
hab auch 2 ähnliche Threads gefunden, nur leider hat es mir nicht zu einer Lösung geholfen.
Vielleicht fehlt mir auch nur die richtige Vokabel um was passendes zu finden :/
Also folgendes:
Es geht im Prinzip um eine simple p-q berechnung.
Die Zahlen a, b und c sollen in der Form ax²+bx+c=0 eingegeben werden.
Weiterhin soll das Programm ausgeben ob es nur eine, zwei oder keine Lösungen gibt.
Daher überprüfe ich anschließend das Ergebniss nach der Form oben. Bei einfachen Werten funktioniert das auch perfekt.
Allerdings scheint die Prüfung bei folgenden Werten für a, b und c nicht zu funktionieren:
a=1, b=-4,2, c=4,21
Meine Vermutung ist ja, dass da schon intern irgendwo gerundet wird, und er daher bei der Prüfung nicht auf ==0 bzw !=0 kommt.
Kann mir jemand ein Tipp geben woran das liegt?
Achja, für Tips zum Programmierstil wäre ich auch dankbar
Und bitte nehmt mich nicht direkt auseinander,
studiere erst seit ein paar wochen ^^
[Java]
import java.util.Scanner;
public class Quadratic {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
double a, b, c;
System.out.println("Bitte geben sie Ihre Werte ein: ");
System.out.print("a = ");
a = console.nextDouble();
System.out.print("b = ");
b = console.nextDouble();
System.out.print("c = ");
c = console.nextDouble();
quadratic(a, b, c);
console.close();
}
public static void quadratic(double a, double b, double c) {
double x1=0, x2=0;
//Ist a != 0 ?
if (a!=0) {
x1 = ((-b+Math.sqrt((b*b-4*a*c)))/2*a); // Lösen nach p-q-Formel
System.out.println(x1); // <-- Später noch entfernen!!!
x2 = ((-b-Math.sqrt((b*b-4*a*c)))/2*a); // Lösen nach p-q-Formel
System.out.println(x2); // <-- Später noch entfernen!!!
//Zwei Lösungen
if (a*x1*x1+b*x1+c==0 && (a*x2*x2+b*x2+c==0) ) {
System.out.println("Erste Lösung = "+round1(x1));
System.out.println("Zweite Lösung = "+round1(x2));
}
else {
//Keine Lösung
if (a*x1*x1+b*x1+c!=0 && (a*x2*x2+b*x2+c!=0) ) {
System.out.println("Keine reele Lösung");
}
//Nur eine Lösung
else {
if (a*x1*x1+b*x1+c==0) {
System.out.println("Lösung: "+round1(x1));
}
else {
if (a*x2*x2+b*x2+c==0) {
System.out.println("Lösung: "+round1(x2));
}
}
}
}
}
else {
System.out.println("a muss ungleich 0 sein");
}
}
public static double round1(double value) {
if (Double.isNaN(value)) return value;
if (Double.isInfinite(value)) return value;
return Math.round(value * 10) / 10.0;
}
}
[/Java]
btw,
für den fall dass ich mich nicht eindeutig ausgedrückt habe,
hier nen bild von der aufgabenstellung:
http://www.abload.de/img/pqtnud0.jpg
Zuletzt bearbeitet: