einfaches Bruch Programm - was is hier falsch??



  • spit schrieb:

    oder findet ihr den fehler nicht???

    Warum schmeißt du nicht selbst deinen Debugger an?



  • Hab ich schon längst,.... das Proggi läuft drotzdem falsch und ich weiß nicht worans liegt!! (keine errors keine warnings!!!!)

    -.-



  • spit schrieb:

    will mir keiner helfen??? oder wisst ihr nicht was ich meine??? oder findet ihr den fehler nicht???

    geduld. sind echt coole freaks hier. die finden den fehler schon. eventuell ist es für einige zu viel code zum ausprobieren. vielleicht könntest du schon mal mit'm debugger durchsteppen und den fehler etwas eingrenzen. das steigert die chance, dass jemand sich das ansieht, ungemein. ich bin leider nicht so der c++ checker (mehr c ohne ++)



  • mhhh naja das Programm funktioniert eigentlich, nur am ende soll dann das ergebniss ausgegeben werden von z.b. einer addition zweier Brüche.... und danach auf Tastendruck warten (system("pause"); ) doch nachdem ich den bruch den ich dazu addieren subtrahieren usw,,, will eingegeben habe kommt das "Bitte Tastendruck für Weiter" und dann glaub ich zeigts gnz kurz was an...

    Ist eigentlich ein simples Programm mit einer Klasse!!
    Naja ich hoffe einer der sich damit auskennt sieht sich das mal an.

    mfg spit



  • spit schrieb:

    mhhh naja das Programm funktioniert eigentlich, nur am ende soll dann das ergebniss ausgegeben werden von z.b. einer addition zweier Brüche.... und danach auf Tastendruck warten (system("pause"); ) doch nachdem ich den bruch den ich dazu addieren subtrahieren usw,,, will eingegeben habe kommt das "Bitte Tastendruck für Weiter" und dann glaub ich zeigts gnz kurz was an...

    Ist eigentlich ein simples Programm mit einer Klasse!!
    Naja ich hoffe einer der sich damit auskennt sieht sich das mal an.

    mfg spit

    Mit dem Debugger hättest du rauskriegen können, dass deine kurz() Funktion nicht richtig ist.
    Am besten du machst diese so, dann gibts auch beim Addieren und Subtrahieren keinen Fehler:

    void Bruch::kurz() {
        if(nenner > zaehler)
            int zahl = ggT(nenner, zaehler);
        else
            int zahl = ggT(zaehler, nenner);
        nenner /= zahl;
        zaehler /= zahl;
    }
    

    Bei deinem Code crasht es in dieser Zeile:

    nenner=nenner/zahl;
    

    . Zahl bekommt nämlich von kgV() den Wert 0 und eine Division durch 0 geht bekanntlich nicht. 😉



  • spit schrieb:

    doch nachdem ich den bruch den ich dazu addieren subtrahieren usw,,, will eingegeben habe kommt das "Bitte Tastendruck für Weiter" und dann glaub ich zeigts gnz kurz was an...

    Mach mal ein cout.flush() vor dem system("PAUSE") oder lass das blöde system("PAUSE") am besten ganz weg. Alternativen findest du in der FAQ.



  • kk danke, ich hab das kurz jetzt ersetzt, und cout.flush davor geschrieben ... jetzt wird zwar das ergebniss ausgegeben aber es ist imm 0/0 - woran kann das liegen??

    mfg spit



  • Hast du mein Post gelesen? Wenn nicht, hätt ich mir die Bugsuche auch sparen können..



  • hallo

    du hast diese wunderbare entwicklungsumgebung visual studio 6.

    integriert ist ein debugger.

    man setzt einen haltepunkt (rechte maustaste auf der grauen leiste) an der stelle, an der man anfangen möchte und geht mit F10 schritt für schritt durch.
    mit F11 springst du übrigens in die funktionen rein. und von da ab wieder F10, F10, F10...

    dabei beobachtest du deine variablen. es wird dir dann sicher die stelle auffallen, an der dein programm nicht richtig arbeitet.

    am besten dann die stelle posten.



  • elise: Ich habe ihm doch schon den Bug gepostet. 🤡 Aber die Mini-Einleitung in seinen Debugger schadet ja auch nix. 😉



  • sorry, net gesehen.. weil er danach ja immernoch suchte.

    ok 🙂



  • mhh ich hab ja schon gesagt das ich

    kurz();

    jetzt ausgebessert habe wie du gesagt hast,... und danach habe ich geschrieben das, dass Ergebniss jetzt zwar ausgegeben wird aber egal was ich mache 0/0 rauskommt,... ja ich hab immer nur F11 gedrückt da is es nicht richtig durchgegangen...

    ich poste wenn ich genaueres gefunden habe!!
    mfg und thx spit



  • Bei mir funktioniert es einwandfrei. Poste vielleicht mal nochmal den kompletten Code, wie du ihn zzt verwendest. Vielleicht hat sich ja noch irgendwo nen neuer Fehler eingeschlichen. 🕶 Oder halt wie gesagt dir die aktuellen Werte vom Debugger ausgeben lassen.



  • Also bin jetzt alles mim Debugger durchgegangen... ab den operatoren funktioniert es nicht mehr gescheit, also ab der zeile DORT WO DER PFEIL IS:

    }else if(eingabe==2){
    		cout<<endl<<"   Welchen Bruch moechten Sie subtrahieren?";
    		cout<<endl<<"   Zaehler: ";
    		 cin>>a;
    		cout<<"   Nenner: ";
    		 cin>>b;
    		 Bruch bruch_two(a,b);
    		cout<<endl<<endl<<"   Ergebniss: "<<bruch_one-bruch_two; <-------------
    
    habs auch so versucht:
    
    	if(eingabe==1){
    		cout<<endl<<"   Welchen Bruch moechten Sie addieren?";
    		cout<<endl<<"   Zaehler: ";
    		 cin>>a;
    		cout<<"   Nenner: ";
    		 cin>>b;
    		 Bruch bruch_two(a,b);
    		 Bruch bruch_new;
    		 bruch_new=bruch_one+bruch_two;
    		 cout<<bruch_new;
    		//cout<<endl<<endl<<"   Ergebniss: "<<bruch_one+bruch_two;
    

    Kann mir jetzt vl. jemand helfen?? plzz



  • OK hab jetzt mal die funktion kurz(); rausgenommen und plötzlich funktioniert alles... mhh.... d.h. es leigt an dem kürzen!!!!



  • Klar liegts daran. 😉 Habe ich ja schon gesagt, aber meine Variante sollte das Entsprechende normalerweise tun. Hast du es 1 zu 1 kopiert? Hmm..



  • Es funktioniert jetzt, ja ich hab mir die jetzt 5mal angeschaut und bin auch darauf gekommen das die kurz funktion die du geschrieben hast funktionieren sollte....

    der Fehler war das du 2 mal int zahl= ... geschrieben hast. Ich glaube man nennt das scope fehler!!!

    Wenn ich davor int zahl; definiere und dann nur zahl=ggT... schreibe dann funktionierts.

    Danke für eure Hilfe!!
    mfg spit



  • Hm.. Komisch. 😕 Davon wusste ich nichts, kann das wirklich sein?? Weiß das einer hier? 🕶


Anmelden zum Antworten