Return to Snippet

Revision: 12957
at April 2, 2009 06:51 by cruzlee


Initial Code
#nederlandse_getallen.rb
$stdout.sync = true

def nlgetal getal
  if getal < 0
    return 'Geef nou alsjeblieft gewoon een getal van 0 of hoger...'
  end
  if getal > 900
    return 'Lager dan, of gelijk aan 900 alsjeblieft.'
  end
  if getal == 0
    return 'nul'
  end
  
  uitvoer = ''
  
  eendeci = ['één', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen']
  tweedeci = ['tien', 'twintig', 'dertig', 'veertig', 'vijftig', 'zestig', 'zeventig', 'tachtig', 'negentig']
  tieners = ['elf', 'twaalf', 'dertien', 'veertien', 'vijftien', 'zestien', 'zeventien', 'achttien', 'negentien']
#  driedeci = 'honderd'
#  vierdeci = 'duizend'
#  zesdeci = 'miljoen'   # voor later
   
  resterend = getal
  
  #Hier wordt bepaald hoeveel er van welk decimaal zijn. Deze waarden gaan in: [honderdtallen, tientallen, eenheden]
  honderdtallen = resterend/100
  resterend = resterend -(honderdtallen*100)
  tientallen = resterend/10
  resterend = resterend - (tientallen*10)
  eenheden = resterend
  
  #DERDE DECIMAAL
  #Altijd eerst de honderdtallen uitschrijven (in "uitvoer" stoppen)
  bij_uitvoer = ''
  bij_uitvoer = case honderdtallen
    when 0: ''
    when 1: 'honderd'
    when (2..9): eendeci[honderdtallen - 1] + 'honderd'
  end
  
  uitvoer << bij_uitvoer.to_s
    
  #EERSTE EN TWEEDE DECIMAAL
  #eenheden komen in het nederlands direct na de honderdtallen. 
  #Maar niet in de "tieners". We moeten dus een tweedeling maken.
  #Er zijn een aantal mogelijke situaties
  #a. honderd zes (tientallen 0, eenheden >0)
  #b. honderd elf (tientallen 1)
  #c. honderd twintig (tientallen > 0, eenheden 0)
  #d. honderd zes en twintig (tientallen > 1, eenheden > 0)
  #
  #we moeten eerst scenario b uitwerken
  bij_uitvoer = ''
  bij_uitvoer = case
    when ((tientallen == 1) and (eenheden > 0)): tieners[eenheden - 1]
    #dan scenario c.
    when ((tientallen > 0) and (eenheden == 0)): tweedeci[tientallen - 1]
    #scenario a. moet uitgevoerd worden, ook als daarna d nog nodig is
    when ((eenheden > 0) and (tientallen == 0)): eendeci[eenheden - 1]
    #scenario d. uitvoeren, bij 2 en 3 moet er een trema op de tweeEntwintig
    when (((eenheden == 2) or (eenheden == 3)) and (tientallen > 1)): eendeci[eenheden - 1] + 'ën' + tweedeci[tientallen - 1]
    #scenario d. voor 1,4,5,6,7,8,9
    when ((eenheden == 1) or (eenheden > 3)): eendeci[eenheden - 1] + 'en' + tweedeci[tientallen - 1]
  end
  uitvoer << bij_uitvoer.to_s
  
  return uitvoer
end

for i in (1..899)
puts nlgetal(i)
end

Initial URL


Initial Description


Initial Title
dutch numbers written fully

Initial Tags


Initial Language
Ruby