home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
icon
/
dos
/
src
/
tests
/
others.icn
< prev
next >
Wrap
Text File
|
1992-02-09
|
3KB
|
99 lines
procedure spell(n)
local m
n := integer(n) | stop(image(n)," is not an integer")
if n <= 12 then return {
"0zero,1one,2two,3three,4four,5five,6six,7seven,8eight,_
9nine,10ten,11eleven,12twelve," ? {
tab(find(n))
move(*n)
tab(upto(","))
}
}
else if n <= 19 then return {
spell(n[2] || "0") ?
(if ="for" then "four" else tab(find("ty"))) || "teen"
}
else if n <= 99 then return {
"2twen,3thir,4for,5fif,6six,7seven,8eigh,9nine," ? {
tab(upto(n[1]))
move(1)
tab(upto(",")) || "ty" ||
if n[2] ~= 0 then "-" || spell(n[2])
}
}
else if n <= 999 then return {
spell(n[1]) || " hundred" ||
(if (m := n[2:0]) ~= 0 then " and " || spell(m) else "")
}
else if n <= 999999 then return {
spell(n[1:-3]) || " thousand" ||
(if (m := n[2:0]) ~= 0 then " and " || spell(m) else "")
}
else if n <= 999999999 then return {
spell(n[1:-6]) || " million" ||
(if (m := n[2:0]) ~= 0 then " and " || spell(m) else "")
}
else fail
end
procedure spellw(n)
write(n, " ", spell(n))
return
end
procedure main()
every spellw(1 to 25)
every spellw(30 to 110 by 3)
spellw(945123342)
every spellw(10000000 to 10000500 by 7)
sieve()
wordcnt()
end
#
# S I E V E O F E R A T O S T H E N E S
#
# This program illustrates the use of sets in implementing the
# classical sieve algorithm for computing prime numbers.
procedure sieve()
local limit, s, i
limit := 100
s := set()
every insert(s,1 to limit)
every member(s,i := 2 to limit) do
every delete(s,i + i to limit by i)
delete(s,1)
primes := sort(s)
write("There are ",*primes," primes in the first ",limit," integers.")
write("The primes are:")
every write(right(!primes,*limit + 1))
end
#
# W O R D C O U N T I N G
#
# This program tabulates the words in standard input and writes the
# results with the words in a column 20 characters wide. The definition
# of a "word" is naive.
procedure wordcnt()
wordcount(20)
end
procedure wordcount(n)
local t, line, x, i
static letters
initial letters := &lcase ++ &ucase
t := table(0)
while line := read() do
line ? while tab(upto(letters)) do
t[tab(many(letters))] +:= 1
x := sort(t,3)
every i := 1 to *x - 1 by 2 do
write(left(x[i],n),x[i + 1])
end