C-Programmierung: Zahlen in Lautschrift darstellen?

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".


NameVergeben26  10.11.2017, 12:52

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.

1
priesterlein  10.11.2017, 13:07
@NameVergeben26

Ja, es geht immer komplizierter, wenn man es will. Aber beachte: Er bvraucht die Zahlen 1 bis 12 nicht und dreizig ist keine Zahl.

1
google1234 
Beitragsersteller
 10.11.2017, 13:25

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.

1
NameVergeben26  10.11.2017, 16:51
@google1234

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)

0

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 :-)