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