Was läuft hier falsch? Programm macht, was es nicht soll...


  • Mod

    icarus2 schrieb:

    Lustigerweise kompiliert die erste Version einwandfrei. Kann das jemand erklären 😕

    Warum nicht? Da wird halt punkte mit 79 verglichen.



  • SeppJ schrieb:

    icarus2 schrieb:

    Lustigerweise kompiliert die erste Version einwandfrei. Kann das jemand erklären 😕

    Warum nicht? Da wird halt punkte mit 79 verglichen.

    Ah, jetzt verstehe ich was da passiert. Ich war gerade wirklich verwirrt. Schon lustig was man so alles schreiben kann... 🙂



  • Okay, das mit dem Punkt hat mir jetzt schon einmal indirekt weitergeholfen:
    Zwar war nicht das Komma das Problem(Punkt oder Komma: Es kommt das gleiche raus), sondern das Leerzeichen, das sich irgendwie zwischen Komma und 79 eingeschlichen hatte. 🤡
    Aber irgendwie macht das Programm mir jetzt viel zu viele Punkte, statt nur insgesamt 80. 😮


  • Mod

    irreal++ schrieb:

    Okay, das mit dem Punkt hat mir jetzt schon einmal indirekt weitergeholfen:
    Zwar war nicht das Komma das Problem(Punkt oder Komma: Es kommt das gleiche raus), sondern das Leerzeichen, das sich irgendwie zwischen Komma und 79 eingeschlichen hatte. 🤡
    Aber irgendwie macht das Programm mir jetzt viel zu viele Punkte, statt nur insgesamt 80. 😮

    Heißt das, du hast immer noch das Komma drin? Dann ist doch kein Wunder, dass das Programm nicht das tut, was es soll. Mit Punkt und Komma kommen hier jeweils ganz unterschiedliche Ergebnisse heraus!



  • Wie gesagt, Punkt oder Komma machen, zumindest hier, keinen Unterschied.
    Jedenfalls macht das Programm jedesmal das gleiche...



  • irreal+++ schrieb:

    Wie gesagt, Punkt oder Komma machen, zumindest hier, keinen Unterschied.

    DOCH.

    Obwohl ich wenig Hoffnung habe, wenn das Gleiche schon vier (!) Leute gesagt haben und du es aus irgendeinem Grund nicht glauben willst.

    Und räum mal mit deinen Variablen auf. Benutze nur die, die du wirklich brauchst, und deklariere sie unmittelbar vor Benutzung -- sicher nicht global.



  • SeppJ schrieb:

    irreal++ schrieb:

    Okay, das mit dem Punkt hat mir jetzt schon einmal indirekt weitergeholfen:
    Zwar war nicht das Komma das Problem(Punkt oder Komma: Es kommt das gleiche raus), sondern das Leerzeichen, das sich irgendwie zwischen Komma und 79 eingeschlichen hatte. 🤡
    Aber irgendwie macht das Programm mir jetzt viel zu viele Punkte, statt nur insgesamt 80. 😮

    Heißt das, du hast immer noch das Komma drin? Dann ist doch kein Wunder, dass das Programm nicht das tut, was es soll. Mit Punkt und Komma kommen hier jeweils ganz unterschiedliche Ergebnisse heraus!

    Ich habe benutze den Punkt statt dem Komma, dennoch macht es viel zu viele Punkte.
    Theoretisch müsste es doch jedes mal (egal, welche int konforme Zahl eingegeben wird) genau 80 Punkte machen, oder irre ich mich da?
    EDIT: Es scheint so, als würde punkte bei jedem Aufruf der Schleife erneut auf 0 zurückgesetzt werden?! 😕

    DOCH.

    Obwohl ich wenig Hoffnung habe, wenn das Gleiche schon vier (!) Leute gesagt haben und du es aus irgendeinem Grund nicht glauben willst.

    Und räum mal mit deinen Variablen auf. Benutze nur die, die du wirklich brauchst, und deklariere sie unmittelbar vor Benutzung -- sicher nicht global.

    Ja Sie haben Recht, aus unerfindlichen Gründen wurde das Programm nach einer erneuten Änderung zum Komma nicht neu erstellt.
    Nochmal: Ich habe jetzt 0.79 eingetragen. Dennoch werden zu viele Punkte ausgegeben, nämlich nach jedem Doppelpunkt mehr statt immer etwa gleich viele Punkte. Deshalb schließe ich darauf, dass punkte immer zurückgesetzt wird.



  • Der Code sähe nun so aus:

    #include <iostream>
    int main()
    {	
    	int durchgaenge1;
    	std::cin >> durchgaenge1;
    	double prozent{ 0 }; 
    	int teil{ 1 }, punkte{ 0 };
    	while (teil<=durchgaenge1)
    	{
    		std::cout << teil << ": ";
    		prozent = prozent + (100 * teil / durchgaenge1);
    		while (punkte <= (prozent * 0.79))
    		{
    			std::cout << ".";
    			punkte = punkte + 1;
    		}
    		teil++;
    	}
    	system("Pause");
    }
    

    Macht aber trotzdem nicht das, was ich möchte...



  • prozent = prozent + (100.0 * teil / durchgaenge1);
    //                      ^^
    


  • hmm, ändert nichts, inwiefern soll dies helfen?


  • Mod

    irreal++ schrieb:

    hmm, ändert nichts, inwiefern soll dies helfen?

    Weil dann teil/durchgaenge das ergibt, was du denkst, was es ergibt, statt dem, was wirklich raus kommt. Stichwort: Integerdivision.

    Es wäre übrigens sehr hilfreich, wenn du mal beschreiben würdest, was du möchtest. Dass da viele Punkte ausgegeben werden, sehen wir auch. Ob das zu viele sind, können wir nicht sagen, da wir nicht wissen, was du willst. Wir kennen ja nur dein Programm und dein Programm gibt genau so viele Punkte aus wie wir vom Code her auch annehmen würden.



  • Ich möchte, dass immer, egal welche Zahl ich angebe, 80 Punkte ausgegeben werden.
    Eigentlich sollten deshalb zwischen jeden : immer ETWA gleich viele Punkte enthalten sein. Der : ist dabei nur da, um zu sehen, dass das eigentlich nicht passiert.

    EDIT: Natürlich sollten diese Schrittweise ausgegeben werden 😉



  • Da du 'teil' in jedem Schleifendurchgang erhöhst, wird dann 'prozent' immer größer (weil du dazuaddierst).
    Du willst wohl einfach

    prozent = 100.0 * teil / durchgaenge1;
    

    ???

    Aber benutze am besten einen Debugger - oder laß dir die beiden Variablen einfach mal ausgeben...



  • Th69 schrieb:

    Da du 'teil' in jedem Schleifendurchgang erhöhst, wird dann 'prozent' immer größer (weil du dazuaddierst).
    Du willst wohl einfach

    prozent = 100.0 * teil / durchgaenge1;
    

    ???

    Aber benutze am besten einen Debugger - oder laß dir die beiden Variablen einfach mal ausgeben...

    Ouh man 😃

    Genau das wars, ich habe prozent praktisch zweimal größer werden lassen: Durch das erhöhen von teil und dazuaddieren von prozent!
    Wie konnte ich das übersehen?! 🤡 🤡
    Danke für die Mühe! Ich würde wahrscheinlich immer noch rätseln!
    Vielen vielen Dank!



  • Nimm dir die Tipps zu Herzen und nimm ab sofort zur Fehlersuche einen Debugger.


Anmelden zum Antworten