C-Programmierung: Zahlen in Lautschrift darstellen?
Hallo,
ich sitze grad an einer Programmieraufgabe in C. Und zwar soll ich die Zahlen von 20 bis 69 in Lautschrift darstellen, nachdem diese eingelesen wurde.
Aussehen soll das etwa so:
Wenn man die Eingabe "20" macht, soll "zwanzig" ausgegeben werden. Wenn man z.B. "49" eingibt, soll "neun-und-vierzig" ausgegeben werden.
Muss man da mit Unterprogrammen arbeiten? Und wenn ja, wie mache ich das, dass ich die ganzen Zahlen bestimmen kann? Geht das mit Arrays? (weiß noch nicht so viel über Arrays).
Danke im Voraus! :)
3 Antworten
Geht das mit Arrays?
Klar, und es macht die Sache besonders einfach:
Zerlege die Zahl zuerst in Einer und Zehner (als Integer zwischen 0 und 9):
int einer = zahl%10;
int zehner = zahl/10%10;
Passend dazu definierst Du zwei Arrays mit je genau 10 Strings:
char const* einerText[] = { "", "ein-und-", "zwei-und-", /* usw. */ };
char const* zehnerText[] = { "(null)", "(zehn)", "zwanzig", "dreißig", /* usw. */ };
Die eingeklammerten Texte sind in der Aufgabe nicht gefragt und dienen nur zum Testen und Fehler finden.
Jetzt musst Du nur noch die beiden zur Zahl passenden Texte hintereinander ausgeben:
printf( "%2d = %s%s\n", zahl, einerText[
einer], zehnerText[zehner] );
Und das packst Du dann in eine Schleife von zahl=20 bis ≤69 — fertig!
Ja, mach am besten eine Liste oder ein array mit den Zahlentexten, wobei du die Zahlen dann als Index verwendest.
Beispiel eines Eintrags (zahlenwort ist hier der Name des arrays): zahlenwort[20] = "zwanzig".
wie priesterlein schon gesagt hat, braucht man 1-12 nicht aber 1-9 braucht man, weil sie in jeder anderen zahl die er braucht auch vorkommt. Die ausnahmen sind 20, 30/40/50/60.
die zahl könnte man z.b. splitten in 2 characters. jeder char einer zahl hat ein wert zugewiesen. so splittet man z.b. 54 in 5 4
4 hat den wert "vier". und aus 5 kann man von mir aus 50 machen also fünfzig. Den ausgabe string kombiniert man dann beide werte valueofzweitezahl + "und" + 10ervalueoferstezahl.
Habs hässlich formuliert und ohne code. Aber mir ging es jetzt um den Gedanken.(muss noch 2 Stunden arbeiten und dann ist erstmal Wochenende für mich)
ich würde die zahlen 1 bis 12 als Lautschrift speichern und für den rest würde ich eine Funktion benutzen, die einzelnde zahlen kombiniert. Ab 30 (10,20 ist unikat) alle 10 mit der anfangszahl + "zig"
z.b. 14 vier zehn, 34 vier + "und" + "30".
Somit wäre es auch erweiterbar und durch clevere Funktionen sparst dir 69 zahlen mit ihrer Lautschrift in ein array zu schreiben.
Ja, es geht immer komplizierter, wenn man es will. Aber beachte: Er bvraucht die Zahlen 1 bis 12 nicht und dreizig ist keine Zahl.
Ich hatte eine "umgekehrte" Aufgabe für Spracherkennung für Englisch und Deutsch.
Dann habe ich einen Grammar mit Lex und Yacc geschrieben.
Diese Aufgabe wahr es noch komplizierter, es ging um Zeit -also auch Militär-Slang mit "o o" "ziro ziro" und so was :-)
Also ich weiß, dass wir das mal im Vorkurs hatten, dass wir die Zahl in Einer und Zehner unterschieden haben, ähnlich wie NameVergeben26 es angesprochen hat. Aber wie genau das war, weiß ich nicht.
Wie würdest du die Funktion denn schreiben @NameVergeben26 ?
PS: Für die dreißig würde ich einfach eine Ausnahme machen und die separat definieren.