[Top][All Lists]
[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
>