Wenn jemand Lust hat, meinen Code mal zu überfliegen:



  • Finde den Fehler nicht... 😞
    plzz help:

    auf pastebin.com:
    http://pastebin.com/f7b065d9d

    oder hier als code:

    #include<iostream>
    #include<windows.h>
    #include<math.h>
    using namespace std;
    
    int main()
    {
        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";
            float a;
            cin>>a;
            cout<<"Geben sie d ein!\n";
            float d;
            cin>>d;
            cout<<"Geben sie e ein!\n\n";
            float e;
            cin>>e;
            float b=(2*d)*a;
            float 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: Mein Name\n";
        cin.get();
        system("cls");
        }
    }
    

    ich danke schon einmal vorab,

    |<



  • if(answer=='s');
        {
            cout<<"Geben sie a ein! (Kein a gegeben == 1)\n";
            float a;
            cin>>a;
            cout<<"Geben sie d ein!\n";
            float d;
            cin>>d;
            cout<<"Geben sie e ein!\n\n";
            float e;
            cin>>e;
            float b=(2*d)*a;
            float c=e+((d*d)*2);
            char abfrage='h';
        }
    

    Ist das Absicht das du a,b,c,d redefinierst? Diese sind nämlich nur im scope des

    if(answer=='s'){ ... }
    

    gültig. Entferne mal den Typen.

    Grüssle DC!



  • Was für ein Fehler? - Syntax Fehler? Linker Fehler? Logischer Fehler?
    Hast du den Debugger mal benutzt? usw.

    Beschreib dein Problem genau!

    Ich denke ich weiss, wo der Fehler ist, aber bemüh dich zuerst einmal dein Problem zu konkretiesieren!



  • DeepCopy schrieb:

    if(answer=='s');
        {
            cout<<"Geben sie a ein! (Kein a gegeben == 1)\n";
            float a;
            cin>>a;
            cout<<"Geben sie d ein!\n";
            float d;
            cin>>d;
            cout<<"Geben sie e ein!\n\n";
            float e;
            cin>>e;
            float b=(2*d)*a;
            float c=e+((d*d)*2);
            char abfrage='h';
        }
    

    Ist das Absicht das du a,b,c,d redefinierst? Diese sind nämlich nur im scope des

    if(answer=='s'){ ... }
    

    gültig. Entferne mal den Typen.

    Grüssle DC!

    oh, klar!

    ja, mal schaun...



  • also:
    dann geht es immer noch nicht -.-

    naja,
    wenn ich das programm ausführe, dann soll ich a,b,c eingeben und wenn ich das getan habe, dann erscheint ungueltige eingabe und ich muss a.b.c werneut eingeben!

    dann erscheitn kurz N=....... und das fenster schließt sich 😣



  • 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


Anmelden zum Antworten