home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / tests / others.icn < prev    next >
Text File  |  1992-02-09  |  3KB  |  99 lines

  1.  
  2. procedure spell(n)
  3.    local m
  4.    n := integer(n) | stop(image(n)," is not an integer")
  5.    if n <= 12 then return {
  6.       "0zero,1one,2two,3three,4four,5five,6six,7seven,8eight,_
  7.          9nine,10ten,11eleven,12twelve," ? {
  8.             tab(find(n))
  9.             move(*n)
  10.             tab(upto(","))
  11.             }
  12.       }
  13.    else if n <= 19 then return {
  14.       spell(n[2] || "0") ?
  15.          (if ="for" then "four" else tab(find("ty"))) || "teen"
  16.       }
  17.    else if n <= 99 then return {
  18.       "2twen,3thir,4for,5fif,6six,7seven,8eigh,9nine," ? {
  19.          tab(upto(n[1]))
  20.          move(1)
  21.          tab(upto(",")) || "ty" ||
  22.             if n[2] ~= 0 then "-" || spell(n[2])
  23.          }
  24.       }
  25.    else if n <= 999 then return {
  26.       spell(n[1]) || " hundred" ||
  27.          (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "")
  28.       }
  29.    else if n <= 999999 then return {
  30.       spell(n[1:-3]) || " thousand" ||
  31.          (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "")
  32.       }
  33.    else if n <= 999999999 then return {
  34.       spell(n[1:-6]) || " million" ||
  35.          (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "")
  36.       }
  37.    else fail
  38. end
  39.  
  40. procedure spellw(n)
  41.    write(n, "    ", spell(n))
  42.    return
  43. end
  44.  
  45. procedure main()
  46.    every spellw(1 to 25)
  47.    every spellw(30 to 110 by 3)
  48.    spellw(945123342)
  49.    every spellw(10000000 to 10000500 by 7)
  50.    sieve()
  51.    wordcnt()
  52. end
  53.  
  54. #
  55. #          S I E V E   O F   E R A T O S T H E N E S
  56. #
  57.  
  58. #  This program illustrates the use of sets in implementing the
  59. #  classical sieve algorithm for computing prime numbers.
  60.  
  61. procedure sieve()
  62.    local limit, s, i
  63.    limit := 100
  64.    s := set()
  65.    every insert(s,1 to limit)
  66.    every member(s,i := 2 to limit) do
  67.       every delete(s,i + i to limit by i)
  68.    delete(s,1)
  69.    primes := sort(s)
  70.    write("There are ",*primes," primes in the first ",limit," integers.")
  71.    write("The primes are:")
  72.    every write(right(!primes,*limit + 1))
  73. end
  74.  
  75. #
  76. #          W O R D   C O U N T I N G
  77. #
  78.  
  79. #  This program tabulates the words in standard input and writes the
  80. #  results with the words in a column 20 characters wide.  The definition
  81. #  of a "word" is naive.
  82.  
  83. procedure wordcnt()
  84.    wordcount(20)
  85. end
  86.  
  87. procedure wordcount(n)
  88.    local t, line, x, i
  89.    static letters
  90.    initial letters := &lcase ++ &ucase
  91.    t := table(0)
  92.    while line := read() do
  93.       line ? while tab(upto(letters)) do
  94.          t[tab(many(letters))] +:= 1
  95.    x := sort(t,3)
  96.    every i := 1 to *x - 1 by 2 do
  97.       write(left(x[i],n),x[i + 1])
  98. end
  99.