Umdrehen einer switch Anweisung? -->Reihung?
-
Ist das denn eine Übung zu Arrays, wenn ihr diese gerade behandelt? Dann wird wahrscheinlich erwartet, dass du das switch-Konstrukt entsprechend ersetzt.
cknopp schrieb:
dennoch sagt mir dieses std:: im Quellcode von BBBB gar nichts

cin/cout/string/usw. liegen im Namespace std. Wahrscheinlich habt ihr das noch nicht durchgenommen, aber letztendlich erfordert es, dass man std::cout etc. schreibt (oder using namespace std; irgendwo an den Anfang schreibt). Dein erstes Beispiel dürfte also eigentlich nicht kompilieren.
#include <iostream> using namespace std; int main() { cout << "Geben Sie bitte eine Zahl ein: "; string zahl; cin >> zahl; static const char* zahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"}; for (string::iterator it=zahl.begin(),e=zahl.end();it!=e;it++)if (*it>='0' && *it<='9')cout << zahlen[*it-'0'] << ' '; //Edit: obige Zeile ohne Iteratoren: //for (unsigned i=0;i<zahl.length();i++)if (zahl[i]>='0' && zahl[i]<='9')cout << zahlen[zahl[i]-'0'] << ' '; }
-
Das klappt aber nur bei ASCII oder ähnlich aufgebauten Kodierungen.
-
hier ist noch eine relativ einfache lösung:
#include<iostream> #include<conio.h> #include<string> #include<sstream> using namespace std; void umschreiben(int); int main() { cout<<"Bitte geben Sie die Zahl ein!\n"; string zahl; cin>>zahl; int länge=zahl.length(); int zahl_neu[30]; stringstream sstr; for(int a=0;a<länge;a++) { sstr<<zahl[a]; sstr>>zahl_neu[a]; sstr.clear(); } for(int a=0;a<länge;a++) { umschreiben(zahl_neu[a]); } getch(); } void umschreiben(int ziffer) { switch(ziffer) { case 0: cout<<"Null "; break; case 1: cout<<"Eins "; break; case 2: cout<<"Zwei "; break; case 3: cout<<"Drei "; break; case 4: cout<<"Vier "; break; case 5: cout<<"Fünf "; break; case 6: cout<<"Sechs "; break; case 7: cout<<"Sieben "; break; case 8: cout<<"Acht "; break; case 9: cout<<"Neun "; break; } }Das sollte so ziemlich die einfachste und verständlichste möglichkeit sein.
Dieses std:: im Code von BBBB kann auch einfach weggelassen werden, es steht für standard.
-
andi01 schrieb:
... char zahl[100]; cin>>zahl; ...Mit so etwas fangen wir bitte erst gar nicht an. Dafür gibt es doch std::string!
Gruß,
SP
-
jo kleiner fehler von mir
ich bessere das gleich mal aus.edit: hoppla noch ein kleiner fehler, mein obiger code funktioniert nur für einstellige zahlen
. aber den fehler werde ich auch noch finden...
-
David_pb schrieb:
Das klappt aber nur bei ASCII oder ähnlich aufgebauten Kodierungen.
Nenn mir eine andere!
-
so der folgende Code wurde jetzt von mir überarbeitet und getestet und funktioniert einwandfrei!
#include<iostream> #include<conio.h> #include<string> #include<sstream> using namespace std; void umschreiben(int); int main() { cout<<"Bitte geben Sie die Zahl ein!\n"; string zahl; cin>>zahl; int länge=zahl.length(); int zahl_neu[30]; stringstream sstr; for(int a=0;a<länge;a++) { sstr<<zahl[a]; sstr>>zahl_neu[a]; sstr.clear(); } for(int a=0;a<länge;a++) { umschreiben(zahl_neu[a]); } getch(); } void umschreiben(int ziffer) { switch(ziffer) { case 0: cout<<"Null "; break; case 1: cout<<"Eins "; break; case 2: cout<<"Zwei "; break; case 3: cout<<"Drei "; break; case 4: cout<<"Vier "; break; case 5: cout<<"Fünf "; break; case 6: cout<<"Sechs "; break; case 7: cout<<"Sieben "; break; case 8: cout<<"Acht "; break; case 9: cout<<"Neun "; break; } }Damit sollte dein Problem gelöst sein!
mfg,
andi01.
-
andi01 schrieb:
so der folgende Code wurde jetzt von mir überarbeitet und getestet und funktioniert einwandfrei!
int main() { cout<<"Bitte geben Sie die Zahl ein!\n"; string zahl; cin>>zahl; int länge=zahl.length(); int zahl_neu[30]; stringstream sstr; for(int a=0;a<länge;a++) { sstr<<zahl[a]; sstr>>zahl_neu[a]; sstr.clear(); } for(int a=0;a<länge;a++) { umschreiben(zahl_neu[a]); } }Ich weiß ja nicht...
int main() { cout<<"Bitte geben Sie die Zahl ein!\n"; int zahl; cin>>zahl; sage(zahl); }
-
ok, mein code ist vielleicht etwas kompliziert, das liese sich wahrscheinlich auch einfacher lösen.
nur wie soll das mitint main() { cout<<"Bitte geben Sie die Zahl ein!\n"; int zahl; cin>>zahl; sage(zahl); }funktionieren? der Funktion sage() muss wenn man es mit switches lösen will doch jede ziffer einzeln übergeben werden und nicht die ganze zahl, oder? genau deswegen ist mein code ja etwas komplizierter. ob man den teil mit dem zerlegen in die einzelnen ziffern in sage() verschiebt oder in main() lässt ist do eigentlich egal,oder?
aber immerhin, der code funktioniert schonmal, auch wenn er etwas kompliziert ist

-
Auch getestet.
#include <iostream> using namespace std; void sage(int zahl) { if(zahl>=10) sage(zahl/10); switch(zahl%10) { case 0: cout<<"null "; break; case 1: cout<<"eins "; break; case 2: cout<<"zwei "; break; case 3: cout<<"drei "; break; case 4: cout<<"vier "; break; case 5: cout<<"fünf "; break; case 6: cout<<"sech "; break; case 7: cout<<"sibn "; break; case 8: cout<<"acht "; break; case 9: cout<<"neun "; break; } } int main() { cout<<"Bitte geben Sie die Zahl ein!\n"; int zahl; cin>>zahl; sage(zahl); }
-
cin/cout/string/usw. liegen im Namespace std. Wahrscheinlich habt ihr das noch nicht durchgenommen, aber letztendlich erfordert es, dass man std::cout etc. schreibt (oder using namespace std; irgendwo an den Anfang schreibt). Dein erstes Beispiel dürfte also eigentlich nicht kompilieren.
Wir haben bisher immer mit <iostrem.h> und nicht <iostream> gearbeitet!
Warum ka?
Allerdings sind dann die Information für z.B cout, cin schon drin.LG
Chris
-
cknopp schrieb:
Wir haben bisher immer mit <iostrem.h> und nicht <iostream> gearbeitet!
Warum ka?
Allerdings sind dann die Information für z.B cout, cin schon drin.Genaugenommen ist
<iostream.h>kein gültiges C++. Leider scheint das kein ausreichender Grund zu sein, dies nicht mehr zu unterrichten.Nimm
<iostream>, schreib meinetwegenusing namespace std;darunter (solange es nicht im Header steht) und du kannst alles genauso gut nutzen. Nur programmierst du dann eben C++.
-
cknopp schrieb:
Arrays sind doch Reihungen, oder?
Was soll eine Reihung sein? Arrays sind halt Arrays. Wenn du willst kannst du Felder sagen, oder halt Vektoren, aber Reihung???
-
hustbaer schrieb:
cknopp schrieb:
Arrays sind doch Reihungen, oder?
Was soll eine Reihung sein? Arrays sind halt Arrays. Wenn du willst kannst du Felder sagen, oder halt Vektoren, aber Reihung???
frag mal google nach "reihung array". du wirst augen machen.
-
volkard schrieb:
hustbaer schrieb:
cknopp schrieb:
Arrays sind doch Reihungen, oder?
Was soll eine Reihung sein? Arrays sind halt Arrays. Wenn du willst kannst du Felder sagen, oder halt Vektoren, aber Reihung???
frag mal google nach "reihung array". du wirst augen machen.

Das ist Un-Deutsch!Ich halte mir jetzt die Ohren zu, sag 100x "lalala" und ignoriere ganz fest dass es ernsthaft jemanden gibt der den Begriff "Reihung" hierfür verwendet.
OMFG!
p.S.: sollen wir dann statt Tree in Zukunft "Baumung" sagen? Und statt Schleife "Wiederholung"? Und "Hinabsteigung" statt Rekursion?
p.p.S.: das ist wiedermal typisches Lehrbuchdeutsch: total weltfremd und sinnlos. Ich hab das in meinen > 10 Jahren Praxis *noch nie* gehört oder gelesen.
-
hustbaer schrieb:
Ich halte mir jetzt die Ohren zu, sag 100x "lalala" und ignoriere ganz fest dass es ernsthaft jemanden gibt der den Begriff "Reihung" hierfür verwendet.
Ja, das wäre eine gute Schützung.
hustbaer schrieb:
p.S.: sollen wir dann statt Tree in Zukunft "Baumung" sagen? Und statt Schleife "Wiederholung"? Und "Hinabsteigung" statt Rekursion?
Dem würde ich einfach keine Folgung leisten.
-
Zustimmung

-
Hi zusammen,
wenns jemanden interessiert?!
So haben wir in der UNI das Problem letztlich gelöst...Liebe Grüße
Chris#include <iostream.h> int main () { int zahl,laenge; int hilf=0; int reihungzahl[100]; cout<<"Geben Sie bitte die Zahle ein!"; cin>>zahl; laenge=zahl; do { laenge=laenge/10; hilf++; } while (laenge!=0); cout<<"Die Zahl hat: "<<hilf<<" Stellen"; cout<<"Die Zahl ist: "<<zahl; for (int j=hilf-1;j>=0;j--) { reihungzahl[j]=zahl%10; zahl=zahl/10; } for (int i=0;i<hilf;i++) { /* if(reihungzahl[i]==0) cout<<" null"; else if(reihungzahl[i]==1) cout<<" eins"; else if(reihungzahl[i]==2) cout<<" zwei"; else if(reihungzahl[i]==3) cout<<" drei"; else if(reihungzahl[i]==4) cout<<" vier"; else if(reihungzahl[i]==5) cout<<" fuenf"; else if(reihungzahl[i]==6) cout<<" sechs"; else if(reihungzahl[i]==7) cout<<" sieben"; else if(reihungzahl[i]==8) cout<<" acht"; else if(reihungzahl[i]==9) cout<<" neuen"; } */ switch (reihungzahl [i]) { case 1: cout<<" eins"; break; case 2: cout<<" zwei"; break; case 3: cout<<" drei"; break; } } cout<<endl; return 0; }
-
die do-while Anweisung am Anfang hat den Sinn die Stellenanzahl der Zahl herauszufinden!
Die hilfs Variable gibt mir dann an wieviele Stellen ich habe und mit dieser Hilfe wurde die Reihenfolge dann nacher gedreht.
-
volkard schrieb:
David_pb schrieb:
Das klappt aber nur bei ASCII oder ähnlich aufgebauten Kodierungen.
Nenn mir eine andere!
Es ist vom Standard tatsächlich garantiert, dass die Ziffernzeichen '0' bis '9' lückenlos aufeinanderfolgende Codierungen haben. Im Gegensatz zu den Buchstaben, siehe z.B. EBCDIC.