DaRkZeAlOt Geschrieben 22. März 2005 Geschrieben 22. März 2005 Hallo, Ich arbeite gerade an einem DOS Taschenrechner in C++. Bin auch so gut wie fertig, es gibt nur noch ein Problem : Das Programm soll auch mit Eingaben wie dreihuntertfünfzig mal zweiundreißig fertig werden, und das macht mich gerade etwas fertig :confused: . Meine bisherige Überlegung war erstmal die beiden Zahlen in folgende Komponenten zu zerlegen : ============================ ein zwei drei vier fünf huntert tausend milion milionen zehn zwanzig dreißg vierzig fünfzig sechzig siebzig achzig neunzig ============================ (Ich behaupte mal das sind alle möglichen) Nun könnte man die Komponenten umwandeln und wieder zusammensetzen wo allerdings mein Problem liegt, zB.: zweitausenddreihundertfünfundfünfzig 2 1000 3 100 5 50 Einfaches zusammenaddieren würde hier wohl kaum zum Erfolg führen. Hat vieleicht jemand eine zündende Idee (oder einen ganz anderen Vorschlag) ? Zitieren
perdian Geschrieben 22. März 2005 Geschrieben 22. März 2005 es gibt nur noch ein ProblemNur ist gut Was du willst ist einen Mini-Parser für eine geschriebene Sprache - und das ist alles andere als Trivial. Wenn du die Wahl hast: Lass es Zitieren
U-- °LoneWolf° Geschrieben 22. März 2005 Geschrieben 22. März 2005 Hi also im grunde must du nur den STring analysieren und nachsehen ob eine deiner zahlen vorkommt. zu deinem Beispiel natürlich kannst du das einfach addieren bzw. an richtiger stelle natürlich multiplizieren zweitausenddreihundertfünfundfünfzig daraus amchst du zweitausend= 2*1000 dreihundert= 3*100 fünf=5 und-- fünfzig=50 du must einfach beim größten wortwert anfangen. also suchst du z.b. erst nach Millionen findest nix ... nach tausend. schneidest alles was vor der Tausend steht aus (in eine andere VAriable). Daraus bastelst du dir dann (z.B. SiebenundZwanzigTausend) 7+20*1000. Die Methode um z.b. 27 auseinander zu bauen würde ich extern aufrufen da du diese sehr oft benötigst. Hoffe das ist halbwegs verständlich. Zitieren
kLeiner_HobBes Geschrieben 22. März 2005 Geschrieben 22. März 2005 Ja, es sind ja immer Blöcke von bis zu drei Ziffern, und zwar von 0 bis 999. Danach kommt noch die Zehnerpotenz des Blocks mit dem Exponenten als Vielfachem von 3. Danach zerlegst du die Zahl. Ist aber, wie schon gesagt, nicht allzu einfach. Und was machst du, wenn jemand "huntert" anstelle von "hundert" eingibt? *SCNR* Zitieren
DaRkZeAlOt Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Wenn jemand sich vertippt hat er Pech gehabt (bzw. übliche Fehlerroutine) . Ich versuch das mal Morgen umzusetzen, danke euch erstmal ! Zitieren
Guybrush Threepwood Geschrieben 22. März 2005 Geschrieben 22. März 2005 Und was machst du, wenn jemand "huntert" anstelle von "hundert" eingibt? *SCNR* Am Besten erstmal ne Rechtschreibprüfung drüber laufen lassen Zitieren
Bubble Geschrieben 23. März 2005 Geschrieben 23. März 2005 Und was machst du, wenn jemand "huntert" anstelle von "hundert" eingibt? *SCNR* Fehlertollerant suchen Zitieren
DaRkZeAlOt Geschrieben 29. März 2005 Autor Geschrieben 29. März 2005 Ich habe inzwischen eine Möglichkeit gefunden Wortzahlen sinvoll zu zerlegen. Schauen wir uns mal eine große Zahl an : dreihundertvierunsdechzigmillionenzweihundertfuenfunddreissigtausenddreihundertachtzehn Meine Funktion zertrennt die Zahl erstmal nach Million, Tausend und Hundert : dreihundertvierunsdechzig millionen zweihundertfuenfunddreissig tausend dreihundert achtzehn Folgend werden die Werte vor Million, Tausend und Hundert in Zahlen umgewandelt und ausgerechnet undzwar erstmal die 'Und' Verknüpfunden (zB.: 2und40 => 2+40 => 42). Danach die 'Hundert' Verknüpfungen (4100 => 400). Die Unterergebnisse werden wieder zusammenaddiert und mit der 10er Potenz (Million, Tausend, Hundert) multilitziert. Alle daraus resultierenden Unterergebnisse werden wieder addiert worraus sich die Zahl ergibt. Die Umwandlung von Wort bis zahl vor dem Rechenprozess ist einfach, es gibt 3 Arrays : 1. Wortzahlen ("ein", "vierzig", ...) 2. Zahlen ("1,","40",...) 3. Wortzahllänge (3,7,...) Die Wortzahlen werden im Eingabestring gesucht, dann werden sie durch ihr Pendant im Zahlen Array ersetzt, undzwar so viele Stellen wie im Wortzahlenlänge Array angegeben. (Danach dann die oben genannten Zerlegungsfunktionen) Wenn jemand den Code sehen möchte poste ich ihn hier gerne. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.