AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Integer in String(in Worten) konvertieren
Thema durchsuchen
Ansicht
Themen-Optionen

Integer in String(in Worten) konvertieren

Ein Thema von delphi10 · begonnen am 24. Nov 2008 · letzter Beitrag vom 9. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von delphi10
delphi10

Registriert seit: 9. Mai 2008
Ort: Salzgitter
14 Beiträge
 
Delphi 2007 Professional
 
#1

Integer in String(in Worten) konvertieren

  Alt 24. Nov 2008, 08:39
Hallo

Ich wollte mal die Integerwerte 0-99 in ausgeschriebene Worte konvertieren. Es gibt zwar die eine oder andere Lösung zu finden, aber das war mir alles zu aufwändig. Wer sich dafür interessiert, guckt mal hier:-
Eine Erweiterung bis 999 habe ich mir gespart, weil nicht benötigt. Sollte aber leicht zu implementieren sein. Vielleicht schreibt mal jemand, wie blöd ich mich dabei angestellt habe.
Gruß delphi10
Angehängte Dateien
Dateityp: txt inworten_145.txt (1,9 KB, 44x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Integer in String(in Worten) konvertieren

  Alt 24. Nov 2008, 08:49
Das war eine Aufgabe des Informatik-Bundeswettbewerbs von 1996 oder 97. (allerdings IMHO 6stellig)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Integer in String(in Worten) konvertieren

  Alt 24. Nov 2008, 08:53
Problem für die Codelib dürfte sein das es extern liegt. Wenn es also von dem extern Platz verschwindet ist der Codelibeintrag nutzlos. Um es hier direkt rein zu stellen müsste man die Rechte dafür haben
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von delphi10
delphi10

Registriert seit: 9. Mai 2008
Ort: Salzgitter
14 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Integer in String(in Worten) konvertieren

  Alt 24. Nov 2008, 09:21
Zitat von sirius:
Das war eine Aufgabe des Informatik-Bundeswettbewerbs von 1996 oder 97. (allerdings IMHO 6stellig)
Ja, mag sein. Kannte ich nicht. Wenn es Ähnlichkeiten im Source gibt, dann nur deshalb, weil gleiche Probleme meistens auch zu gleichen/ähnlichen Lösungen führen.
Diese Procedure verstehe ich auch nicht als ausgereifte, fertige Lösung. Mir schwebte da eher ein Denkanstoß vor. Auch weil ich meine, dass der Sourcecode ziemlich komprimiert ist. Geht aber siche noch besser..
  Mit Zitat antworten Zitat
Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#5

Re: Integer in String(in Worten) konvertieren

  Alt 9. Mai 2009, 12:12
"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.
Angehängte Dateien
Dateityp: exe strtotext_762.exe (164,2 KB, 9x aufgerufen)
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Integer in String(in Worten) konvertieren

  Alt 9. Mai 2009, 12:44
Hallo,

wieso schreibst du bei Integer 0 nicht einfach "Null" in den String:

Delphi-Quellcode:
  case n of
  0: Result:= '';
Delphi-Quellcode:
  case n of
  0: Result:= 'Null';
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#7

Re: Integer in String(in Worten) konvertieren

  Alt 9. Mai 2009, 18:49
"Helmi" schreibt:
Zitat:
wieso schreibst du bei Integer 0 nicht einfach "Null" in den String:
Weil dann der rekursive Aufruf nicht mehr funktioniert!
Wer auf der Null besteht, kann sie direkt (ohne IntToText zu bemühe direkt einfügen:
if k>0 then lblOut.Caption:= IntToText(k) else if k=0 then lblOut.Caption:= 'Null';
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Integer in String(in Worten) konvertieren

  Alt 9. Mai 2009, 19:21
Hallo,

der Routine fehlte noch ein "end", damit der Compiler sie ohne Fehlermeldung akzeptiert.
Weiterhin muss die Zahl 16 als Ausnahme behandelt werden: "sechzehn" statt sechszehn.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

Re: Integer in String(in Worten) konvertieren

  Alt 9. Mai 2009, 20:07
War mal so frei die Änderungswünsche einzubauen und Zahlen unter Null zu unterstützen.

Delphi-Quellcode:
function IntToText(n: integer; firstCall: boolean {$IFDEF DELPHI4_UP} = true {$ENDIF}): 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
  low(integer)..-1:
    Result := 'minus ' + IntToText(-n, true);
  0:
    if firstCall then Result := 'nullelse 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;
  100..999:
    Result:= Einer[n div 100] + 'hundert' + IntToText(n mod 100, false);
  1000..999999:
    Result:= IntToText(n div 1000, false) + 'tausend' + IntToText(n mod 1000, false);
  1000000..1000999:
    Result:= 'einemillion' + IntToText(n mod 1000000, false);
  2000000..999999999:
    Result:= IntToText(n div 1000000, false) + 'millionen' + IntToText(n mod 1000000, false);
  1000000000..1999999999:
    Result:= 'einemilliarde' + IntToText(n mod 1000000000, false);
  else
    Result:= 'zweimilliarden' + IntToText(n mod 1000000000, false);
  end;
end;
MfG,
Bug

EDIT1: (meinen) Fehler berichtigt
EDIT2: Hab "sechszehn" im Code dringehabt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Integer in String(in Worten) konvertieren

  Alt 9. Mai 2009, 21:48
Zitat von Hawkeye219:
Weiterhin muss die Zahl 16 als Ausnahme behandelt werden
17 übrigens auch, das heißt ja nicht "siebenzehn"
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz