Wurm in einer for-Schleife



  • Hallo,
    ich schreibe an einem kleinen C++ Programm. Es soll eine ganz Zahl z einlesen und wenn z>=0 ist soll es alle Teiler, durch die z ohne Rest geteilt werden kann wieder ausspucken.Wenn z=<0 ist soll es "Fehlermeldung" ausgeben.

    So weit so gut. Leider habe ich bei mir den wurm drin. Ich vermute in der for-Schleife, bin mir aber auch nicht sicher, da ich mich auch erst seit kurzem mit c++ beschäftige.
    Hier mal mein Code:

    //Übung2Aufgabe41)
    #include <iostream>
    #include<math.h>
    using namespace std;
    int main()
    {
    	int z,i,e;
    	cout << "Bitte geben Sie die eine ganze Zahl für z ein:";
    	cin >> z;
    	if(z>=0)
    	{
    		for(i=1; i<=z; i++)
    		{
    			e=z/i;
    		}
    		cout << e << endl;
    	}
    	if(z<=0)
    	{
    	cout << "Fehlermeldung! z ist <=0" << endl;
    	}
    	//system("Pause");
    	return 0;
    }
    

    Ich freue mich über jeden Tipp, Hilfe, Ratschlag a.ä. 🙂

    moni



  • Hi,

    da fehlt wohl eine if Abfrage... durch die z ohne Rest geteilt werden kann



  • Du hast uns keine Fehlerbeschreibung gegeben und ich sehe es nicht als meine Aufgabe an, alle Fehler in Deinem Programm zu finden.

    Aber eines fällt mir auf den ersten Blick auf: int/int => int.



  • hallo

    - der rest einer division errechnet man mit dem modulo-operator (%).
    - definiere variablen so lokal wie möglich, alles am anfang zu definieren ist c-style.
    - der header heisst <cmath>, nicht <math.h>.



  • Du gibst nur einmal eine Zahl aus. Und zwar den letzte errechneten "Teiler".

    Zudem ist deine if-Bedingung nicht gut. Gibt der User 0 ein werden beide if-Statements als positiv evaluiert -> alle Teiler werden ausgegeben, aber auch Fehlermeldung kommt raus.

    Nimm das cout << e << endl in den Rumpf der For-Schleife.



  • Vielen Dank für die schnelle Hilfe 🙂

    mit einer weiteren if-Schleife und dem Modulo hats geklappt!
    Hier der korrigierte Code:

    #include <iostream>
    #include<math.h>
    using namespace std;
    int main()
    {
    	int z,i,e;
    	cout << "Bitte geben Sie die eine ganze Zahl für z ein:";
    	cin >> z;
    	if(z>=0)
    	{
    		for(i=1; i<=z; i++)
    		{
    			e=z%i;
    			if(e==0)
    			{
    				cout << i;
    			}
    		}
    		cout << e << endl;
    	}
    	if(z<=0)
    	{
    	cout << "Fehlermeldung! z ist <=0" << endl;
    	}
    	//system("Pause");
    	return 0;
    }
    

    Das Programm spuckt mir nun alle Teile aus.

    Vielen Dank!
    Wünsche euch eine schöne Weihnachtszeit!

    moni



  • Hi moni,

    das war für den Anfang schon gut, aber da ist noch Luft nach oben:

    #include <iostream>
    //#include <cmath> // cmath; <math.h> ist veraltet, aber das include wäre hier unnötig
    using namespace std;
    
    int main()
    {
        // int z,i,e; // int i und int e sind hier nicht notwendig (s.u.)
        cout << "Bitte geben Sie die eine ganze Zahl ein:"; // 'für z' macht keinen Sinn, der Anwender sieht den Variablennamen nicht
        int zahl; // benenne die Dinge beim Namen
        cin >> zahl;
        if(!cin.fail() && zahl>=0) // prüfe auch, on die Eingabe Ok war -> !cin.fail()
        {
            for(int teiler=1; teiler<=zahl; ++teiler) // bennen die Dinge beim Namen, definiere so lokal wie möglich
            {
                int rest=zahl%teiler; // liest sich doch viel besser - oder?
                if(rest==0)
                {
                    cout << teiler << endl;
                }
            }
        } 
        else // if(z<=0) // besser in jedem(!) anderen Fall also 'else'
        {
            cout << "Fehlermeldung! nur eine positive ganze Zahl ist als Eingabe zulaessig" << endl; // beschreibe es positiv
        }
        //system("Pause");
        return 0;
    }
    


  • Was wären wir ohne Kenner von X für alle X, von denen Kenner von X Kenner ist! Es wird Zeit für ein Outing!



  • WOW !!
    Das ist eine richtig gute Erklärung !! 🙂 Viele Dank für die Tipps! Bin manchmal ein wenig durcheinandergekommen mit den vielen Variablen.
    Das ist sehr hilfreich.
    Vielen Dank 👍


Log in to reply