help-smalltalk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-smalltalk] Error while trying to write numbers in words


From: Canol Gokel
Subject: [Help-smalltalk] Error while trying to write numbers in words
Date: Sat, 5 Jul 2008 17:15:06 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Hello,

I am trying to write a method called "inWords" for Number class to write a
number in words. For example:

15 inWords

should output:

fifteen

I wrote a code, it works for every 2 digit number except 19, for which it
outputs "tennine". I guess there is a logic error in algorithm but I cannot find
it. Anyone has an idea? Here is the code:

Number extend [
    inWords [
        | clone part_1 part_2 part_3 |
        
        part_1 := ''.
        part_2 := ''.
        part_3 := ''.

        clone := self copy.
        
        ((clone \\ 100) = 0) ifTrue: [
            part_1 := ''.
            part_2 := ''.
        ].
        ((clone \\ 100) < 20 and: [(clone \\ 100) > 10]) ifTrue: [
            ((clone \\ 100) = 11) ifTrue: [
                part_2 := 'eleven'.
            ].
            ((clone \\ 100) = 12) ifTrue: [
                part_2 := 'twelve'.
            ].
            ((clone \\ 100) = 13) ifTrue: [
                part_2 := 'thirteen'.
            ].
            ((clone \\ 100) = 14) ifTrue: [
                part_2 := 'fourteen'.
            ].
            ((clone \\ 100) = 15) ifTrue: [
                part_2 := 'fifteen'.
            ].
            ((clone \\ 100) = 16) ifTrue: [
                part_2 := 'sixteen'.
            ].
            ((clone \\ 100) = 17) ifTrue: [
                part_2 := 'seventeen'.
            ].
            ((clone \\ 100) = 18) ifTrue: [
                part_2 := 'eighteen'.
            ].
            ((clone \\ 100) = 19) ifTrue: [
                part_2 := 'nineteen'.
            ].
        ] ifFalse: [
            ((clone \\ 10) = 0) ifTrue: [
                part_1 := ''.
            ].
            ((clone \\ 10) = 1) ifTrue: [
                part_1 := 'one'.
            ].
            ((clone \\ 10) = 2) ifTrue: [
                part_1 := 'two'.
            ].
            ((clone \\ 10) = 3) ifTrue: [
                part_1 := 'three'.
            ].
            ((clone \\ 10) = 4) ifTrue: [
                part_1 := 'four'.
            ].
            ((clone \\ 10) = 5) ifTrue: [
                part_1 := 'five'.
            ].
            ((clone \\ 10) = 6) ifTrue: [
                part_1 := 'six'.
            ].
            ((clone \\ 10) = 7) ifTrue: [
                part_1 := 'seven'.
            ].
            ((clone \\ 10) = 8) ifTrue: [
                part_1 := 'eight'.
            ].
            ((clone \\ 10) = 9) ifTrue: [
                part_1 := 'nine'.
            ].
            
            clone := clone - (clone \\ 10).
            
            ((clone \\ 100) = 10) ifTrue: [
                part_2 := 'ten'.
            ].
            ((clone \\ 100) = 20) ifTrue: [
                part_2 := 'twenty'.
            ].
            ((clone \\ 100) = 30) ifTrue: [
                part_2 := 'thirty'.
            ].
            ((clone \\ 100) = 40) ifTrue: [
                part_2 := 'forty'.
            ].
            ((clone \\ 100) = 50) ifTrue: [
                part_2 := 'fifty'.
            ].
            ((clone \\ 100) = 60) ifTrue: [
                part_2 := 'sixty'.
            ].
            ((clone \\ 100) = 70) ifTrue: [
                part_2 := 'seventy'.
            ].
            ((clone \\ 100) = 80) ifTrue: [
                part_2 := 'eighty'.
            ].
            ((clone \\ 100) = 90) ifTrue: [
                part_2 := 'ninety'.
            ].
        ].
        
        ^part_2, part_1
    ]
]

Transcript show: (19 inWords)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]