"delphi10"
Zitat:
Ich wollte ... Integerwerte ... in ausgeschriebene Worte konvertieren.
Vielleicht schreibt mal jemand, wie blöd ich mich dabei angestellt habe.
Zuerst einige Anmerkungen zu deinem Code:
Du brauchst keine Variable inWorten, in der du das Ergebnis der Funktion zwischenspeichrst, du kanst Result:= an jeder Stelle im Code verwenden. Schreib dahinter ein Exit, um die Funktion zu verlassen.
ConvInttoTextWord(Anzahl : Integer): String"
IntToText" genügt um die Funktion als Konvertierung zu kennzeichnen. Das "Conv" ist überflüssig, beim "Word" ist man geneigt an den Datentyp zu denken. "Anzahl" läßt mich Vermuten, dass da etwas gezählt wurde. Daher, wenn schon kein Symbolisches n, so doch wenigstens einfach Zahl.
Delphi-Quellcode:
case Anzahl of
1: Insert(e,inWorten,length(inWorten)+1);//e ersetzen durch s, wenn "eins" angezeigt werden soll
Hier soll das Ergebnis der Funktion "eins" werden. Schreibs doch einfach hin!
Delphi-Quellcode:
case Anzahl of
1: begin Result:= 'eins'; Exit end;
Das soll genug zu deinem Code sein. Hier wäre meiner:
Delphi-Quellcode:
function IntToText(n: integer): string;
const
Einer: array[0..12] of string = ('', 'ein', 'zwei', 'drei', 'vier', 'fünf',
'sechs', 'sieben', 'acht', 'neun', 'zehn', 'elf', 'zwölf');
Zehner: array[1..9] of string = ('zehn', 'zwanzig', 'dreißig', 'vierzig',
'fünfzig', 'sechzig', 'siebzig', 'achtzig', 'neunzig');
var
s: string;
begin
case n of
0: Result:= '';
1: Result:= 'eins';
2..12: Result:= Einer[n];
13..15: Result:= Einer[n mod 10] + 'zehn';
16: Result:= 'sechzehn';
17: Result:= 'siebzehn';
18..19: Result:= Einer[n mod 10] + 'zehn';
20..99: begin s:= Einer[n mod 10]; if n Mod 10 > 0 then s:= s + 'und';
Result:= s + Zehner[n div 10]
end
end;
Wirklich interessant wird die Aufgabe, wenn man alle Integerzahlen als Argument zulassen will.
Die case-Anweisung ist dann zu ergänzen mit
Delphi-Quellcode:
100..999: Result:= Einer[n div 100] + 'hundert' + IntToText(n mod 100);
1000..999999:
Result:= IntToText(n div 1000) + 'tausend' + IntToText(n mod 1000);
1000000..1000999:
Result:= 'einemillion' + IntToText(n mod 1000000);
2000000..999999999:
Result:= IntToText(n div 1000000) + 'millionen' + IntToText(n mod 1000000);
1000000000..1999999999:
Result:= 'einemilliarde' + IntToText(n mod 1000000000);
else Result:= 'zweimilliarden' + IntToText(n mod 1000000000);
Damit wird die Funktion zu einem Musterbeispiel für die Mächtigkeit rekursiver Programmierung.
Wegen der recursiven Aufrufe kann sie jedoch kein 'Null' zurückgeben.