Wenn jemand Lust hat, meinen Code mal zu überfliegen:
-
EDIT: War blödsinn

-
DeepCopy schrieb:
EDIT: War blödsinn

naja, n versuch isses immer wert

andere lösung?

-
Bist du sicher, dass die geschweiften Klammern im unteren Teil so sind, wie du willst? - Rück die mal so ein, wie sie sein sollen.
-
Beschäftige dich mit Sichtbarkeitsbereichen von Variablen.
Da gibt es nämlich noch nen Kandidaten neben den floats...
Und DeepCopy, wenn du es siehst nicht gleich die Antwort rausposaunen, das sol lder schon selber finden
-
#include<iostream> #include<windows.h> #include<math.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); char 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: TS\n"; cin.get(); system("cls"); } }so, hab ich gändert!
er macht aber immer noch mucken...

-
if( answer!='s' && answer!='n' ); { cout << "Ungueltige Eingabe!\n"; }Sieh dir mal ALLE if - Abfrage genauer an! Und achte besonders auf ';'
EDIT: Oh, mann heute hat's mich - ist Freitagabend!
-
|< schrieb:
er macht aber immer noch mucken...

Du sagst nicht was muckt...
Beschreibe (am besten erst für dich) die Mucken. Versuche die Mucken im Code zu finden. Dann schau dir an der Stelle die Variablen an, wo sie definiert wurden, wo Werte verändert wurden.
Am besten mit nem Debugger + Breakpoint an der Stelle.
-
mann eyo!
ich finde an den if's nichst falsches -.-
*gähn*

und an den ; ???
-
mach die ";" nach dem if weg.
-
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.
-