Zerlegung einer Zahl in ihre Ziffern
-
Hallo Leut, bin dabei C++ zu lernen. Jetzt habe ich ne Aufgabe aus dem Buch. Kann mir jemand diese zu Lösen? Vielen Dank im Voraus.
Schreiben Sie ein Programm, das eine fünfstellige ganze Zahl
mit cin >> zahl; einliest, die Zahl in ihre einzelnen Ziffern
zerlegt und die einzelnen Ziffern in jeweils einer neuen Zeile
auf dem Bildschirm ausgibt.Hinweis: Benutzen Sie Divisions- und Modulo-Operator.
Erweitern Sie Ihr Programm so, dass eine zweite Zahl
eingelesen und zerlegt werden kann. Wie verhält sich Ihr
Programm, wenn sich versehentlich ein Buchstabe in die erste
Eingabezahl einschleicht? Untersuchen Sie das
Programmverhalten mit dem Debugger möglichst genau und halten Sie Ihre Beobachtungen in einem C++
Kommentar fest.
-
Ich finde der Hinweis sagt doch schon sehr viel.
Wie wärs, wenn du uns mal deine bisherigen Ergebnisse präsentierst und dann deine Probleme genau eingrenzt (es wird ja nicht am Schreiben eines Kommentars scheitern).
Es bringt dir schließlich nichts, wenn dir jemand das fertige Programm postet.Gruß
Don06
-
cin>>zahl;
cout<<zahl/10000<<'\n';//erste ziffer
cout<<zahl/1000%10<<'\n';//zweite ziffer
-
Hallo, vielen dank. Also meine Idee war(Beispiel):
42339 / (10^4) = 4 42339 % (10^4) = 2339
2339 / (10^3) = 2 2339 % (10^3) = 339
339 / (10^2) = 3 42339 % (10^2) = 39
39 / (10) = 3 42339 % (10) = 9.
Ich wusste einfach nicht wie man dies in C++ code einbindet.
# include <iostream>
using namespace std;int main ()
{
int Zahl;cout << "Bitte eine fuenfstellige ganze Zahl eingeben:";
cin >> Zahl;cout<<Zahl/10000<<'\n'; //erste ziffer
cout<<Zahl/1000%10<<'\n'; //zweite ziffer
cout<<Zahl/100%10<<'\n'; //dritte ziffer
cout<<Zahl/10%10<<'\n'; //vierte ziffer
cout<<Zahl/1%10<<'\n'; // fünfte ziffer}
Nun habe ich ein problem mit Buchstaben.
# include <iostream>
using namespace std;int main ()
{
int Zahl;cout << "Bitte eine fuenfstellige ganze Zahl eingeben:";
cin >> Zahl;if(Zahl <='A' ||Zahl <='a')
{
cout << "Bitte eine fuenfstellige ganze Zahl eingeben:";
cin >> Zahl;
}else
cout<<Zahl/10000<<'\n'; //erste ziffer
cout<<Zahl/1000%10<<'\n'; //zweite ziffer
cout<<Zahl/100%10<<'\n'; //dritte ziffer
cout<<Zahl/10%10<<'\n'; //vierte ziffer
cout<<Zahl/1%10<<'\n'; // fünfte zifferif wird irgend wie ignoriert... beim Buchstabeneingabe wird das programm terminiert..
-
Schau dir mal die ASCII-Tabelle an.
kleiner Denkanstoß:
while ('A' <= zahl && zahl <= 'Z')Für kleine Buchstaben musst es jetzt aber selber machen.
Gruß
Don06
-
Hi, ich würde es viel einfacher machen !!!
#include <iostream.h> #include <string.h> using namespace std; int main(void) { int eingabe; char ascii[100]; cout << "Bitte eine 5stellige Zahl : "; cin >> eingabe; sprintf(ascii, "%g" ,(double) eingabe) ; cout << "1. Zeichen : " << ascii[0]; cout << "2. Zeichen : " << ascii[1]; cout << "3. Zeichen : " << ascii[2]; cout << "4. Zeichen : " << ascii[3]; cout << "5. Zeichen : " << ascii[4]; return 0; }Ob ein Buchstabe drin is oder net kannste ja wie lösen wie Don06

Gruß Chris
-
Hallo, Chris danke für deine Hilfe. Mit arrays kann ich leider noch nicht anfangen. Der aufgabe nach muss ich die Modulo- und divisionsoperatoren benutzen. Danke.
Gruß, Vitaly.
-
heute wurde hier schon mal fast dieselbe frage gestellt:
scroll mar runter zum thread
"nur 4stellige Integerzahlen zwischen 1 und 6 zulassen, wie?"
oder gug hier
http://www.c-plusplus.net/forum/viewtopic-var-t-is-178314.html
schau dir die beispiele mal genau an, lässt sich bestimmt einiges wiederverwerten... wenn du den code verstanden hast, wird es dir nichts ausmachen, ihn für deine problemstellung anzupassen.schau dir ausserdem in der doku die funktionen "isdigit" und "iswdigit" an, da kannst du direkt feststellen, ob die eingabe nur aus zahlen besteht oder nicht.
good luck have fun.
-
mit modulo 10 letzte zahl abtrennen. erst modulo anwenden dann ist es auch egal wieviel stellen die zahl hat.
1234 % 10 ergibt 4 , das ergebnis (speichern-ausgeben- was du auch damit vorhast) und abziehen von 1234 ergibt 1230, dann durch 10 teilen
1230 / 10 ergibt 123
123 % 10 = 3 ... 123 - 3 = 120 ... usw.das ganze iterativ (schleife), oder rekursive funktion einsetzen mit abbruchbedingung wenn null.
zahlen in anderen systemen, also andere basiszahl, meintewegen binär mit basis 2 sind analog zu rechnen. % 2 und / 2
-
die aufgabenstellung lautet aber nur, in ein kommentar zu schreiben, was passiert, wenn ein buchstabe eingegeben wird - und dient auch irgendwie dem vertrautmachen mit dem debugger.
zu prüfen, ob ein buchstabe eingegeben wurde oder nicht ist nicht gefragt.
und den kommentar von Foxx90 vergisst du am besten ganz schnell wieder

-
Foxx90 schrieb:
sprintf(ascii, "%g" ,(double) eingabe) ;Hat es einen bestimmten Grund, daß du das als double formatierst? sprintf() kann auch int's direkt ausgeben

-
#include <iostream> using namespace std; void print_digits (long v) { long z; if (z = v/10) print_digits (z); cout << "ziffer: "; putchar ('0' + v-z*10); cout << endl; } int main() { long eingabe; cout << "Bitte eine 5stellige Zahl : "; cin >> eingabe; print_digits (eingabe); }
-
ne hat keinen bestimmten grund, so ist aber das programm auch für komma zahlen geeignet... !
sonst :
sprintf(char*, "%i" , integer);