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 = 220Nun 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!
