Number names: Difference between revisions
Content added Content deleted
(→[[#ALGOL 68]]: www.codecodex.com/wiki/index.php%3Ftitle%3DConvert_an_integer_into_words - GPL) |
(→[[#ALGOL 68]]: misc reindent) |
||
Line 1: | Line 1: | ||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |
||
<!-- # From: www.codecodex.com/wiki/index.php%3Ftitle%3DConvert_an_integer_into_words - site states it is GPL # --> |
<!-- # From: www.codecodex.com/wiki/index.php%3Ftitle%3DConvert_an_integer_into_words - site states it is GPL # --> |
||
PROC number words = |
PROC number words = (INT n) STRING : |
||
( |
|||
INT n |
|||
) STRING : |
|||
# returns a string representation of n in words. Currently |
# returns a string representation of n in words. Currently |
||
deals with anything from 0 to 999 999 999. # |
deals with anything from 0 to 999 999 999. # |
||
Line 45: | Line 42: | ||
"ninety" |
"ninety" |
||
)[@2]; |
)[@2]; |
||
PROC three digits = |
PROC three digits = |
||
( |
( |
||
Line 126: | Line 123: | ||
END; |
END; |
||
DO # until user hits EOF # |
DO # until user hits EOF # |
||
on logical file end(standin, (REF FILE f) BOOL : GOTO finish); |
on logical file end(standin, (REF FILE f) BOOL : GOTO finish); |
||
on value error(standin, (REF FILE f) BOOL : GOTO finish); |
on value error(standin, (REF FILE f) BOOL : GOTO finish); |
||
Line 133: | Line 130: | ||
read((n, new line)); |
read((n, new line)); |
||
print((number words(n), new line)) |
print((number words(n), new line)) |
||
OD; |
OD; |
||
finish: |
finish: |
||
SKIP |
SKIP |
Revision as of 12:39, 27 September 2008
ALGOL 68
PROC number words = (INT n) STRING : # returns a string representation of n in words. Currently deals with anything from 0 to 999 999 999. # BEGIN [] STRING digits = [] STRING ( "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" )[@0]; [] STRING teens = [] STRING ( "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" )[@0]; [] STRING decades = [] STRING ( "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" )[@2]; PROC three digits = ( INT n ) STRING : # does the conversion for n from 0 to 999. # BEGIN INT tens = n MOD 100 OVER 10; INT units = n MOD 10; IF n >= 100 THEN digits[n OVER 100] + " " + "hundred" + IF n MOD 100 /= 0 THEN " and " ELSE "" FI ELSE "" FI + IF tens /= 0 THEN IF tens = 1 THEN teens[units] ELSE decades[tens] + IF units /= 0 THEN "-" ELSE "" FI FI FI + IF units /= 0 AND tens /= 1 OR n = 0 THEN digits[units] ELSE "" FI END; INT n3 = n OVER 1 000 000; INT n2 = n MOD 1 000 000 OVER 1000; INT n1 = n MOD 1000; IF n3 /= 0 THEN three digits(n3) + " million" ELSE "" FI + IF n3 /= 0 AND (n2 /= 0 OR n1 >= 100) THEN ", " ELSE "" FI + IF n2 /= 0 THEN three digits(n2) + " thousand" ELSE "" FI + IF (n3 /= 0 OR n2 /= 0) AND n1 > 0 AND n1 < 100 THEN " and " ELIF n2 /= 0 AND n1 /= 0 THEN ", " ELSE "" FI + IF n1 /= 0 OR n = 0 THEN three digits(n1) ELSE "" FI END;
DO # until user hits EOF # on logical file end(standin, (REF FILE f) BOOL : GOTO finish); on value error(standin, (REF FILE f) BOOL : GOTO finish); INT n; print("n? "); read((n, new line)); print((number words(n), new line)) OD; finish: SKIP