Wenn jemand Lust hat, meinen Code mal zu überfliegen:
-
Lies im Buch oder schau im Internet nach dem exakten if-Prototyp, dir wird was auffallen, bestimmt!

-
*selbstohrfeigbiswehtut*

naja, thx für eure hilfe!!!
-
und es will immer noch nicht klappen

also wenn ich es führe, dann lässt er bei s nur a,d,e eingeben und schreibt dann brought to you...
wenn man n eingibt, kommt nur brouht to you...
das einzige was funktioniert ist ungueltige eingabe -.-
#include<iostream> #include<windows.h> #include<math.h> #include<conio.h> using namespace std; int main() { for(;;) { cout<<"Nullstellenberechnungsprogramm Zer0 V. 1.0\n"; cout<<"\nLiegt eine Scheitelpunktform oder \neine Normalform vor? (s/n)\n"; char answer; cin>>answer; float a,b,c,d,e; char abfrage; if(answer=='s') { cout<<"Geben sie a ein! (Kein a gegeben == 1)\n"; cin>>a; cout<<"Geben sie d ein!\n"; cin>>d; cout<<"Geben sie e ein!\n\n"; cin>>e; b=(2*d)*a; c=e+((d*d)*2); abfrage='h'; } if(answer!='s' && answer!='n') { cout<<"Ungueltige Eingabe!\n"; } if(answer=='s' || answer=='n') { if(abfrage!='h') { cout<<"Geben sie a ein! (Kein a gegeben == 1)\n"; cin>>a; cout<<"Geben sie b ein!\n"; cin>>b; cout<<"Geben sie c ein!\n"; cin>>c; } float wurzel=sqrt((((b/2)/a)*((b/a)/a))-(c/a)); float erg=wurzel-(b/2)/a; if(erg<=0) { cout<<"N={ } (Leere Menge)\n"; } if(erg>0) { cout<<"N={-"<<erg<<"; "<<erg<<"}\n"; } } cout<<"Brought to you by:\n"; getch(); system("cls"); } }
-
Das mit dem Einrücken/Formatieren muss noch besser werden - ein Blick - Zeile 53 + 54 und die Folgen daraus.
Dann kann man schneller/leichter erfassen was deine if's machen.
-
wollts eigtl nur ordentlich einrücken... ^^
#include <iostream> #include <cmath> #include <conio.h> #include <windows.h> using namespace std; float square(float value) { return value*value; } int main() { for(bool exit=false; !exit; _getch()) { system("cls"); float a, b, c, d, e; cout << "Nullstellenberechnungsprogramm Zer0 V. 1.0" << endl << "e = exit" << endl << "Liegt eine Scheitelpunktform oder \neine Normalform vor? (s/n)" << endl; char answer; cin >> answer; switch(answer) { case 's': case 'S': cout << "Geben sie a ein! (Kein a gegeben == 1)\n"; cin >> a; cout << "Geben sie d ein!\n"; cin >> d; cout << "Geben sie e ein!\n"; cin >> e; b = 2*d*a; c = e + 2*square(d); break; case 'n': case 'N': cout << "Geben sie a ein! (Kein a gegeben == 1)\n"; cin >> a; cout << "Geben sie b ein!\n"; cin >> b; cout << "Geben sie c ein!\n"; cin >> c; break; case 'e': case 'E': cout << "bye..." << endl; exit = true; continue; default: cout << "Ungueltige Eingabe!" << endl; continue; } // (((b/2)/a)*((b/a)/a))-(c/a) //float radikant = b/(2*a) * b/square(a) - c/a; //float radikant = square(b) / 2*a*square(a) - c/a; float radikant = (square(b) - 2*square(a)*c) / 2*square(a)*a; if(radikant < 0) { cout << "Ungueltige Eingabe" << endl; continue; } float wurzel = sqrt(radikant); float erg = wurzel - b / (2*a); if(erg <= 0) cout << "N = { } (leere Menge)" << endl; else cout << "N = { -" << erg << "; " << erg << '}' << endl; } }radikant nennt sich das teil unter der wurzel^^
der rechenweg sollte offensichtlich sein
allerdings weiß ich nicht genau, ob die letzte auskommentierte variante vll hübscher ist, als die, die ich genommen habe^^ sollten aber beide gleichschnell sein
falls es dir so auch besser gefällt, kannste es ja so machen - falls du fragen hast(die nicht mit 2sekunden googlen beantwortbar sind), dann stell sie ruhig.
getch()existiert nur noch aus kompatibilitätsgründen - eigtl sollte man_getch()nehmen...bb
-
Und eure Mathekenntnisse sollte ihr auch mal auffrischen, denn die Berechnung der Ergebnisse der quadratischen Gleichung sind falsch, s.a. http://de.wikipedia.org/wiki/Quadratische_Gleichung
Die beiden Nullstellen sind nicht einfach + und - erg !!!
-
Th69 schrieb:
Und eure Mathekenntnisse sollte ihr auch mal auffrischen, denn die Berechnung der Ergebnisse der quadratischen Gleichung sind falsch, s.a. http://de.wikipedia.org/wiki/Quadratische_Gleichung
Die beiden Nullstellen sind nicht einfach + und - erg !!!
an der rechnung hab ich nix geändert^^ hab einfach mal angenommen, dass er schon wissen wird, was er rechnet : D
-
|< schrieb:
und es will immer noch nicht klappen
also wenn ich es führe, dann lässt er bei s nur a,d,e eingeben und schreibt dann brought to you...
wenn man n eingibt, kommt nur brouht to you...
das einzige was funktioniert ist ungueltige eingabe -.-
#include<iostream> #include<windows.h> #include<math.h> #include<conio.h> using namespace std; int main() { for(;;) { cout<<"Nullstellenberechnungsprogramm Zer0 V. 1.0\n"; cout<<"\nLiegt eine Scheitelpunktform oder \neine Normalform vor? (s/n)\n"; char answer; cin>>answer; float a,b,c,d,e; char abfrage; if(answer=='s') { cout<<"Geben sie a ein! (Kein a gegeben == 1)\n"; cin>>a; cout<<"Geben sie d ein!\n"; cin>>d; cout<<"Geben sie e ein!\n\n"; cin>>e; b=(2*d)*a; c=e+((d*d)*2); abfrage='h'; } if(answer!='s' && answer!='n') { cout<<"Ungueltige Eingabe!\n"; } if(answer=='s' || answer=='n') { if(abfrage!='h') { cout<<"Geben sie a ein! (Kein a gegeben == 1)\n"; cin>>a; cout<<"Geben sie b ein!\n"; cin>>b; cout<<"Geben sie c ein!\n"; cin>>c; } float wurzel=sqrt((((b/2)/a)*((b/a)/a))-(c/a)); float erg=wurzel-(b/2)/a; if(erg<=0) { cout<<"N={ } (Leere Menge)\n"; } if(erg>0) { cout<<"N={-"<<erg<<"; "<<erg<<"}\n"; } } cout<<"Brought to you by:\n"; getch(); system("cls"); } }der compiler muss doch unmengen an warnungen ausspucken. mach die mal weg
-
@99744e34a
ich würde sagen, er gibt nur eine aus und das erst auf W4...
Die eine ist, dass _getch() deprecated ist
-
nein, er gibt keine warnung aus!
und zur pq-formel:
x1 = + [Wurzel](p/2)2 - q[/Wurzel] - p/2
x2 = - [Wurzel](p/2)2 - q[/Wurzel] - p/2
-
Nur falls Du den Code von unskilled nicht einfach nur übernehmen willst:
-
Deine Variable abfrage wird uninitialisiert benutzt (darauf haben Dich aber schon mehrere hingewiesen, mir ist nur nicht klar, ob Du das mitgekriegt hast)
-
zur Formel:
-a +/- b hat zwei Lösungen, wie Du schon richtig gepostet hast:
+b-a
und
-b-aWas Du in Deinem Programm allerdings berechnest ist
+(b-a)
und
-(b-a),
d.h. Du kannst nicht einfach erg und -erg nehmen, wie das Th69 schon völlig richtig angemerkt hat.- Es kommt vielleicht manchmal keine Ausgabe, weil erg weder <=0, noch >0 ist, sondern schlicht und ergreifend NAN.
-
-
unausgeschlafen schrieb:
- Es kommt vielleicht manchmal keine Ausgabe, weil erg weder <=0, noch >0 ist, sondern schlicht und ergreifend NAN.
ja, das hatte ich shcion vorher bemerkt...
also könnte man dass dan mittels if(erg=NaN) machen???
wie erreiche ich, dass, wenn der wert "NaN" ist, "Keine Nullstellen" ausgegeben wird???
-
eigtl musst du nur nach a gucken:
if(a == 0) //ungültige eingabewenn
a != 0ist, dann kann nix mehr mit NaN rauskommen^^bb
-
unskilled schrieb:
eigtl musst du nur nach a gucken:
if(a == 0) //ungültige eingabewenn
a != 0ist, dann kann nix mehr mit NaN rauskommen^^bb
das habe ich jetzt nich ganz verstanden

-
*flieg*
-
@>|<:
naja - NaN kann doch nur rauskommen, wenn eine ungültige operation ausgeführt wird - und da fällt mir hier nur eine Division durch 0 ein^^
und eben ne wurzel aus irgendwas negativem - aber das hab ich dir ja schon gezeigt, dass du das abfangen musst...@hubschrauber: ab und an muss ich direkt lachen, wenn ich so was les : D
bb
-
pushen? :D:D:D ne xD
joa,klar -.-
aber wurzel aus etwas negativem muss ich nicht ziehen, ich kann auch einfach zweimal das normale erg ausgeben und bei einem halt ein minus-zeichen vorsetzen

thx, >|<
-
Okay, habs nochmal überdacht *lach*
jo, muss ich wohl schauen, dass, wenn das programm aus ner negativen zahl ne wurzel ziehen will, die meldung ausgibt, dass es keine nullstelle(n) gibt!!!
und eben, dass es nicht weiterrechnet, bis zum ende,

thx schonmal für eure hilfe,
|<
(noch nichzt closed
:D)