# Definition der benoetigten Arrays (in Ruby-Arrays ist der # kleinste Index immer 0): @kleiner20 = ["Null", "ein", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwoelf", "dreizehn", "vierzehn", "fuenfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn"] @zehner = ["Null", "zehn", "zwanzig", "dreissig", "vierzig", "fuenfzig", "sechzig", "siebzig", "achtzig", "neunzig"] @singular = ["s", "tausend", "e Million", "e Milliarde", "e Billion", "e Billiarde", "e Trillion", "e Trilliarde", "e Quadrillion", "e Quadrilliarde"] @plural = [" ", "tausend", " Millionen", " Milliarden", " Billionen", " Billiarden", " Trillionen", " Trilliarden", " Quadrillionen", " Quadrilliarden"] # Definition der drei Unterprogramme # "sprichDreier", "sprich" und "prompt": def sprichDreier(zahl,singular,plural) # Sonderfaelle 0 und 1: if zahl == 0 then return "" elsif zahl == 1 then return "ein" + singular end # Ergebnisstring anfangs leer: erg = "" # Erste Ziffer h abspalten: h = zahl / 100 r = zahl % 100 # Hunderteranteil aussprechen: if h > 0 then erg += @kleiner20[h] + "hundert" end # Rest aussprechen, wenn nicht leer: if r > 0 then # Sonderfall: Zahl endet auf 01, # ist aber ungleich 1 if r == 1 then erg += "eins" elsif r < 20 then # Rest < 20 behandeln: erg += @kleiner20[r] else # zweite Ziffer z und # dritte Ziffer rr abspalten: z = r / 10 rr = r % 10 # Eineranteil aussprechen: if rr > 0 then erg += @kleiner20[rr] end # sage "und", wenn es Einer- # und Zehneranteile vorhanden if rr > 0 and z > 0 then erg += "und" end # Zehneranteil aussprechen: if z > 0 then erg += @zehner[z] end end end return erg + plural end def sprich(zahl) if zahl < 1 or zahl >= 10**(3*(@singular.length)) then return "unzulaessige Zahl!" end # Zahl in Dreiergruppen aufspalten: gruppe = [] i = -1 while zahl > 0 stellen = zahl % 1000 zahl = zahl / 1000 i += 1 gruppe[i] = stellen end # Dreiergruppen von links nach rechts aussprechen: erg = "\n" while i >= 0 erg += sprichDreier(gruppe[i], @singular[i], @plural[i]) + "\n" i -= 1 end erg end def prompt puts "Welche Zahl? (Abbruch mit 0)" return gets.to_i end # Anweisungen des Hauptprogramms. # Dabei zuerst den gueltigen Zahlenbereich # angeben (drei Ziffern je Gruppe; Gruppen # hoechstens soviele wie Endungen): puts "Kann Zahlen von 1 bis: 10**(" + (3*(@singular.length)).to_s + ")-1 aussprechen!\n" # Solange Zahlen anfordern und aussprechen, # bis die Zahl 0 als Endesignal eingegeben # wird: v = prompt while v != 0 puts(v.to_s + " wird gesprochen als: "+ sprich(v)) v = prompt end