| home
| contents
| previous
| next page
| send comment
| send link
| add bookmark |
roman.t
roman numerals
%
% "roman.t" converts integers < 4000 into roman numerals
% adapted for "More C Tools for Scientists and Engineers"
%
const wh : string( 8 ) := "IVXLCDM"
program
var out : string
var in : int
loop
put "convert int to roman numeral ( < 1 to stop )"
put "int: "...
get in
exit when in < 1
out := roman( in )
put "roman: ", out
end loop
end program
%
% convert from integer to roman numeral
%
function roman( in : int ) : string
var number, divisor : int
var i, j, k, p : int
var str : string
number := in
divisor := 1000
p := 0
if number >= 4000 then
put "Too big, re-enter"
number := number mod 4000
end if
for decreasing k := 3 ... 0 do
i := number div divisor
number := number mod divisor
watch( k )
watch( i )
watch( number )
case i of
value 0:
% do nothing
value 5:
str( p ) := wh( 2*k+1 )
p := p + 1
value 9:
str( p ) := wh( 2*k )
p := p + 1
str( p ) := wh( 2*k+2 )
p := p + 1
value 4:
str( p ) := wh( 2*k )
p := p + 1
str( p ) := wh( 2*k+1 )
p := p + 1
value:
if i > 5 then
str( p ) := wh( 2*k+1 )
p := p + 1
i := i - 5
end if
for j := 0 ... i-1 do
str( p ) := wh( 2*k )
p := p + 1
end for
end case
divisor := divisor div 10
end for
str( p ) := chr( 0 )
return str
end roman
| home
| contents
| previous
| next page
| send comment
| send link
| add bookmark |
Copyright © 2004, Stephen R. Schmitt