help-smalltalk
[Top][All Lists]
Advanced

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

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


From: olivier blanc
Subject: Re: [Help-smalltalk] Error while trying to write numbers in words
Date: Sun, 06 Jul 2008 13:06:11 +0200

Something is going on while interpreting the ifTrue:ifFalse: not sure
why... Paolo should be able to tell you what's going on.
In the mean time, you could try the following :

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

      ((self \\ 100) < 20 and: [(self \\ 100) > 10])
                ifTrue: [
                        part_2 := {'eleven'. 'twelve' . 'thirteen'. 'fourteen'. 
'fifteen'.
'sixteen'. 'seventeen'. 'eighteen'. 'nineteen'} at: ((self \\ 100) -
10) .
        ]
                ifFalse: [
                        part_1 := {''. 'one'. 'two'. 'three'. 'four'. 'five'. 
'six'. 'seven'.
'eight'. 'nine'} at: ((self \\ 10) + 1).
                                   part_2 := {'' . 'ten'. 'twenty'. 'thirty'. 
'forty'. 'fifty'.
'sixty'. 'seventy'. 'eighty'. 'ninety'. 'hundred'} at: ((self // 10) +
1).
        ].
        ^part_2, part_1
    ]
]

(1 to: 99) do: [:i | Transcript show: i inWords; nl]

Regards,

Olivier


Le samedi 05 juillet 2008 à 17:15 +0000, Canol Gokel a écrit :
> 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)
> 
> 
> 
> _______________________________________________
> help-smalltalk mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/help-smalltalk
> 






reply via email to

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