Teiler einer ganzen Zahl gesucht
-
Hi, aufgrund meines Studium belege ich derzeit einen C++ Einführungskurs. Ich komme im Großen und Ganzen gut klar, habe aber doch eine kleine Frage:
Zu einer ganzen Zahl n sollen alle ganzzahligen Teiler ausgegeben werden. Zusätzlich ist verlangt, dass das Programm so geschrieben wird, dass zuerst eine Funktion definiert wird (z.B. teiler(int n)) und dann ein main() Teil, in dem die Funktion getestet wird. Hier mein Ergebnis:
#include <iostream> using namespace std; int teiler(int n) { int a; int t; for (a = 1; a <= n; a = a+1) { t = n % a; if (t == 0) { cout << a << endl; } } } int main() { int x; cout << "Bitte geben Sie eine ganze Zahl n ein" << endl; cin >> x; cout << "Die ganzen Teiler von "<< x <<" sind" << endl; x = teiler(x); cout << x << endl; }
Wenn ich eine ganze Zahl n eingebe (z.B. 9), so bekomme ich das Ergebnis: 1,3,9,0. Sprich ich bekomme immer die richtigen Teiler aber am Ende zusätzlich eine 0. Wo liegt mein Fehler? Ich vermute irgendwo in der Schleife aber auch durch ändern habe ich nichts erreicht.
Vielen Dank für eure Antworten.
Gruß
/edit pumuckl: cpp-Tags gesponsort.
-
Das ist das cout << x << endl; am Ende.
Das Design deiner teiler-Funktion solltest du aber nochmal überdenken. Warum hat die einen Rückgabetyp, aber kein return? Warum weist du das -- wegen dem fehlenden return undefinierte -- Ergebnis an x zu und gibst das dann auch noch aus? Das ergibt alles keinen Sinn.
-
Erstmal willkommen im Forum. Vor deinem nächsten beitrag lies dir bitte erstmal die mit wichtig gekennzeichneten Threads durch, (vor allem den Link in meiner Signatur).
Nun zu deinem Programm:
int teiler(int n)
verlangt, dass die Funktion einen Wert vom Typ int zurückgibt. Erstens: welcher Wert sollte das deiner Meinung nach sein?
Zweitens: welchen Wert gibt deine Funktion zurück?Meine Lösung:
-
Die Funktion sollte keinen Wert zurückgeben, da sie die Ergebnisse ja schon alle ausgibt. Eine sinnvolle einzelne Rückgabe gibts nicht. (Wie definiert man eine Funktion ohne Rückgabewert?)
Deshalb solltest du der Variablen x auch nicht den Rückgabewert der Funktion zuweisen und sie genausowenig danach nochmal ausgeben. -
Deine Funktion gibt garkeinen Wert zurück! Zumindest nicht explizit. Der Compiler macht aber eine Rückgabe draus, aber das ist nicht genauer definiert. Was du da dem x zuweist, kann also alles mögliche sein. Im Debugbuild deines Compilers wird das scheinbar immer mit 0 belegt, andere Compiler geben da irgendwelchen Murks zurück (z.B. 134521056). Jeder vernünftige Compiler sollte das aber mindestens mit einer Warnung quittieren. Merke: Compilerwarnungen sollte man nicht ignorieren.
-