Zahlen ausschreiben

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Silver_Knee

Betreff: Zahlen ausschreiben

BeitragDo, Mai 15, 2008 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim Zahlen$(19)
Dim Zehner$(9)
Dim Potenz$(4)
Zahlen$(0)=""
Zahlen$(1)="ein"
Zahlen$(2)="zwei"
Zahlen$(3)="drei"
Zahlen$(4)="vier"
Zahlen$(5)="fünf"
Zahlen$(6)="sechs"
Zahlen$(7)="sieben"
Zahlen$(8)="acht"
Zahlen$(9)="neun"
Zahlen$(10)="zehn"
Zahlen$(11)="elf"
Zahlen$(12)="zwölf"
Zahlen$(13)="dreizehn"
Zahlen$(14)="vierzehn"
Zahlen$(15)="fünfzehn"
Zahlen$(16)="sechszehn"
Zahlen$(17)="siebzehn"
Zahlen$(18)="achtzehn"
Zahlen$(19)="neunzehn"

potenz$(1)="tausend"
Potenz$(2)="millionen"
Potenz$(3)="milliarden"
Potenz$(4)="billionen"

Zehner$(1)="zehn"
Zehner$(2)="zwanzig"
Zehner$(3)="dreißig"
Zehner$(4)="vierzig"
Zehner$(5)="fünfzig"
Zehner$(6)="sechzig"
Zehner$(7)="siebzig"
Zehner$(8)="achtzig"
Zehner$(9)="neunzig"
Function InWorten$(Zahl)
   
   
   If Zahl=0 Return "null";Spezalfälle
   If Zahl=1 Return "eins";
   
   Preis=Zahl

   count=0;Potenzen-Zähler
   Repeat
      If Right(Preis,3)<>"000";Wenn diese Potenz etwas enthäll: bei 1000000 gibt es keine tausend
         wert$=Potenz(count)+wert;Potenz vorranstellen
      EndIf
      count=count+1;Potenzzähler erhöhen
     
      If Int(Right(Preis,2))<20;die Zahlen <20 gesondert
         If Right(Preis,2)="01" And count=1;bei der ersten Potenz enden 01 auf eins
            wert2$="eins"
         Else
            wert2$=Zahlen(Int(Right(Preis,2)));Sonst auf einen speziellen Wert.
         EndIf
      Else
         If Int(Right(Preis,1))>0;zusammengesetzte zahlen wie ein-und-zwanzig?
            wert2=Zahlen(Right(Preis,1))+"und"+Zehner(Left(Right(Preis,2),1))
         Else;oder nur zehnerschritte?
            wert2=Zehner(Left(Right(Preis,2),1))
         EndIf
      EndIf
     
      If Len(Preis)>2;hunderter
         If Int(Left(Right(Preis,3),1))<>0;ist ein hunderter enthalten?
            wert=Zahlen(Left(Right(Preis,3),1))+"hundert"+wert2+wert;zahl+hundert anhängen
         Else
            wert=wert2+wert
         EndIf
         Preis=Left(Preis,Len(Preis)-3);die überprüfende zahl um 3 stellen verkürzen: 12.345->12
         If preis=0 Exit;ist die Zahl dann zuende, verlasse die schleife
      Else;zahl < hundert
         wert=wert2+wert
         Exit
      EndIf
   Forever
   
   If Left(wert,3)="ein" And Zahl=>100 wert=Right(wert,Len(wert)-3);vorangestelltes ein wie bei einhundert oder einmilliarden löschen.
   
   Return wert$
End Function
Repeat
Print inWorten(Input(">"))
Forever


Auf Basis des getrashten Codes von BadDeath hab ich eine funktionierende Version geschrieben. Free2Test =)

*Update*100er Überprüfung verbessert
*Update*100er Überprüfung nochmals verbessert
*Update*"ein am Anfang" wird nur bei zahlen=>100 gestrichen
  • Zuletzt bearbeitet von Silver_Knee am Fr, Mai 16, 2008 22:41, insgesamt 2-mal bearbeitet

Xeres

Moderator

BeitragDo, Mai 15, 2008 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, es sollte "eine Million" statt "millionen" (milliarden) heißen... Aber ansonsten funktionstüchtig, wenn ich auch nicht ganz sehe, wo man so etwas gebrauchen könnte.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

SpionAtom

BeitragDo, Mai 15, 2008 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das gabs schonmal, wenn auch versteckt:
https://www.blitzforum.de/foru...hp?t=26850

Edit: Gib mal 1034 ein...
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Silver_Knee

BeitragFr, Mai 16, 2008 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte eine Falsche überprüfung auf 100er hin. Sinn war die Funktion von BadDeath zu berichtigen =)[/code]
 

BadDeath

BeitragFr, Mai 16, 2008 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ....

Ich habe ein/zwei Fehler gefixxt, aber Zahlen wie 10047:

Code: [AUSKLAPPEN]
Dim Zahlen$(19)
Dim Zehner$(9)
Dim Potenz$(7)


Preis = Input$("Preis: ")
Print
;Preis = preis*1.19
Print "inkl. MwST: " + preis
Print
Print InWorten$(Preis)

WaitKey
End


Function InWorten$(Preis$)
   Zahlen$(1) ="ein"
   Zahlen$(2) ="zwei"
   Zahlen$(3) ="drei"
   Zahlen$(4) ="vier"
   Zahlen$(5) ="fünf"
   Zahlen$(6) ="sechs"
   Zahlen$(7) ="sieben"
   Zahlen$(8) ="acht"
   Zahlen$(9) ="neun"
   Zahlen$(10)="zehn"
   Zahlen$(11)="elf"
   Zahlen$(12)="zwölf"
   Zahlen$(13)="dreizehn"
   Zahlen$(14)="vierzehn"
   Zahlen$(15)="fünfzehn"
   Zahlen$(16)="sechszehn"
   Zahlen$(17)="siebzehn"
   Zahlen$(18)="achtzehn"
   Zahlen$(19)="neunzehn"
   
   potenz$(1)=""
   Potenz$(2)="zehn"
   Potenz$(3)="hundert"
   Potenz$(4)="tausend"
   Potenz$(5)="zehntausend"
    Potenz$(6)="hunderttausend"
    Potenz$(7)="million"
   
   Zehner$(1)="zehn"
   Zehner$(2)="zwanzig"
   Zehner$(3)="dreißig"
   Zehner$(4)="vierzig"
   Zehner$(5)="fünfzig"
   Zehner$(6)="sechzig"
   Zehner$(7)="siebzig"
   Zehner$(8)="achtzig"
   Zehner$(9)="neunzig"
   
   If Instr(Preis$,",") = 0 Then
      
      If Len(Preis$) > 2 Then
         wert2$ = Zahlen$( Left(Preis$,1) )
         wert2$ = wert2$ + Potenz$( Len(Preis$) )
      Else
         wert2$ = Zahlen$(Preis$)
         If wert2$ = "ein" Then wert2$ = wert2$ + "s"
         Return wert2$
      End If
      
      For i = 1 To Len(Preis$) - 3
         Preis$=Right$(preis$,Len(Preis$)-1)
         wert2$ = wert2$ + Zahlen$( Left(Preis$,1) )
         wert2$ = wert2$ + Potenz$( Len(Preis$) )
      Next
      
      If Right$(Preis$,2) = "01" Then wert2$ = wert2$ + "undeins"
      If Right$(Preis$,2) > "01"  And  Right$(Preis$,2) < "20" Then
         
         If Len(Preis$) > 2 Then wert2$ = wert2$ + "und"
         
         If Mid$(Preis$,Len(preis$)-1,1) < "2" Then   wert2$ = wert2$ + zahlen$(Right(preis$,2))
      End If
      
      If Right$(Preis$,2) > "20" Then
         If Len(Preis$) > 2 Then
            wert2$ = wert2$ + Zahlen$(Right(Preis$,1)) + "und"
            wert2$ = wert2$ + Zehner$(Mid(Preis$,Len(Preis$)-1,1))
         Else
            wert2$ = Zahlen$(Right(Preis$,1)) + "und"
            wert2$ = wert2$ + Zehner$(Mid(Preis$,Len(Preis$)-1,1))
         End If
      End If
   EndIf
   
   If Left$(wert2$,3) = "ein" Then wert2$ = Mid$(wert2$,4)
   
   Return wert2$
End Function


vllt könnt ihr mir sagen, wo der fehler ist - danke
 

buja

BeitragFr, Mai 16, 2008 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
coo, das zahlen über 1000 nicht ganz richtig sind ist für mich nich soo schlimm, aber so bis 100 kann ich gut gebrauchen Smile
...

Blackside

Betreff: Bug

BeitragFr, Mai 16, 2008 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn man nen zehner+1 eingibt(21,31...) dann wird bei mir nur undzwanzig angezeigt Very Happy
Hier sollte eigentlich eine Signatur stehen!

ToeB

BeitragFr, Mai 16, 2008 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest auch beachten das da nicht bei 101000 (hunderteintausent) nicht "hunderttausendeintausent" steht Wink

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Silver_Knee

BeitragFr, Mai 16, 2008 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Crack93-bug: 100er Überprüfung war nicht ganz ausgereift *fixed*
Blackside-bug: ein wie vor einhunndert eintausend oder wo es stört bei einmilliarden wurde Pauschal ausgestrichen. nun wird das nurnoch bei zahlen=>hundert gemacht. *fixed*

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group