Programm gibt immer dasselbe aus



  • Hallo!

    Die Aufgabe ist zu einer Zahl 1 eine Zahl 2 zu finden, die in der Summe ihrer Teiler der Zahl 1 entspricht und andersrum. Inklusive 1, exklusive zahl selbst.

    Bsp:

    Teiler von 220: 1+2+4+5+10+11+20+22+44+55+110 = 284
    Teiler von 284: 1+2+4+71+142 = 220

    Nun schrieb ich folgendes Programm:

    #include <iostream>
    using namespace std;
    
    // die Funktion FindeZweiteZahl bekommt eine Zahl übergeben, findet deren Teiler, addiert diese und gibt das Ergebnis zurück
    
    int FindeZweiteZahl (int zahl){ 
    
    	int y = 1; // Teiler
    	int rest;
    	int temp = 0; // Summe der Teiler
    	do {
    		rest = zahl % y;  // Schleife, die alle y durchläuft
    			y++; // erhöht y immer um 1
    
    			if (rest == 0){ // nur zahlen, die sich ohne rest teilen lassen, sind zu addieren
    				temp = temp + y; // addiere alle y < zahl1 und nenne sie temp
    			}
    
    			while (y < zahl);// Abbruchbedingung
    	} 
    
    	return temp;// gibt Summe der Teiler aus
    }
    
    int main (){
    
    	int Eingabe; // eingegebene Zahl
    	int Ergebnis; // Summe der Teiler
    	int Probe; // Summe der Teiler von Ergebnis
    
    	cout << "Bitte geben sie eine Zahl ein" << endl;
    	cin >> Eingabe;
    
    	do {
    		FindeZweiteZahl(Eingabe) = Ergebnis;
    		FindeZweiteZahl(Ergebnis) = Probe;
    	}
    
    		if (Eingabe == Probe){ // Überprüfung ob Summe der Teiler von Ergebnis gleich eingegebener Zahl ist
    
    			cout << "Glueckwunsch! Es gibt eine zweite Zahl!" << endl;
    		}
    
    }
    

    Leider kommt bei jeder Zahl "Glueckwunsch....." raus und ich finde den Fehler absolut nicht.

    Bitte helft mir...



  • Why no while-do?



  • do { 
            FindeZweiteZahl(Eingabe) = Ergebnis; 
            FindeZweiteZahl(Ergebnis) = Probe; 
        }
    

    Wieso machste hier denn ein do { }??

    Wie auch immer, es sollte:

    Ergebnis = FindeZweiteZahl(Eingabe); 
           Probe = FindeZweiteZahl(Ergebnis);
    

    heissen



  • Ausserdem sollte deine Funktion so aussehen:

    #include <iostream>
    using namespace std;
    
    // die Funktion FindeZweiteZahl bekommt eine Zahl übergeben, findet deren Teiler, addiert diese und gibt das Ergebnis zurück
    
    int FindeZweiteZahl (int zahl){ 
    
    	int y = 0; // Teiler
    	int rest;
    	int temp = 0; // Summe der Teiler
    	do {
    y++; // So wie du es vorhin gemacht hast, wurde die Zahl eins ignoriert
    		rest = zahl % y;
    
    			if (rest == 0){ 
    				temp = temp + y;
    			}
    
    			while (y < zahl/2);// Teiler über der Hälfte gibts nicht
    	} 
    
    	return temp;
    }
    

    quote]



  • habe jetzt abgeändert und zwar wie folgt:

    #include <iostream>
    using namespace std;
    
    // die Funktion FindeZweiteZahl bekommt eine Zahl übergeben, findet deren Teiler, addiert diese und gibt das Ergebnis zurück
    
    int FindeZweiteZahl (int zahl){
    
        int y = 0; // Teiler
        int rest;
        int temp = 0; // Summe der Teiler
        do {
    		y++; // y wird um 1 erhöht
            rest = zahl % y;
    
                if (rest == 0){
                    temp = temp + y;
                }
    
                while (y < zahl/2);// Abbruchbedingung
    	}
         return temp;
    } 
    
    int main (){
    
    	int Eingabe; // eingegebene Zahl
    	int Ergebnis; // Summe der Teiler
    	int Probe; // Summe der Teiler von Ergebnis
    
    	cout << "Bitte geben sie eine Zahl ein" << endl;
    	cin >> Eingabe;
    
    		Ergebnis = FindeZweiteZahl(Eingabe);
    		Probe = FindeZweiteZahl(Ergebnis); 	
    
    		if (Eingabe == Probe){ // Überprüfung ob Summe der Teiler von Ergebnis gleich eingegebener Zahl ist
    
    			cout << "Glueckwunsch! Es gibt eine zweite Zahl!" << endl;
    		}
    
    }
    

    jetzt kriege ich leider eine syntaxfehlermeldung beim return. hab ich da was falsch getippt???



  • Ja du hast die Klammer von "do" eins zu niedrig gesetzt. Hier der gut eingerückte Code:

    #include <iostream>
    using namespace std;
    
    // die Funktion FindeZweiteZahl bekommt eine Zahl übergeben, findet deren Teiler, addiert diese und gibt das Ergebnis zurück
    
    int FindeZweiteZahl (int zahl){
    
        int y = 0; // Teiler
        int rest;
        int temp = 0; // Summe der Teiler
        do
        {
            y++; // y wird um 1 erhöht
            rest = zahl % y;
            if (rest == 0)
            {
                temp = temp + y;
            }
        }
        while (y < zahl/2);// Abbruchbedingung
    
        return temp;
    }
    
    int main ()
    {
    
        int Eingabe; // eingegebene Zahl
        int Ergebnis; // Summe der Teiler
        int Probe; // Summe der Teiler von Ergebnis
    
        cout << "Bitte geben sie eine Zahl ein" << endl;
        cin >> Eingabe;
    
        Ergebnis = FindeZweiteZahl(Eingabe);
        Probe = FindeZweiteZahl(Ergebnis);
    
        if (Eingabe == Probe)
        { // Überprüfung ob Summe der Teiler von Ergebnis gleich eingegebener Zahl ist
            cout << "Glueckwunsch! Es gibt eine zweite Zahl!" << endl;
        }
    }
    


  • oh super! jetzt klappt es, vielen Dank!!!



  • FreakY<3Cpp schrieb:

    Ja du hast die Klammer von "do" eins zu niedrig gesetzt. Hier der gut eingerückte Code:

    Zeile 6 und 28, ähä, gut eingerückt also.



  • Der, dessen Name unschreibar ist, hat Recht. Ich habe vergessen die Klammer eins niedriger zu setzen und die leere Zeile in der main wegzumachen. Die Firma dankt dir! 👍


Anmelden zum Antworten