24 lines
770 B
Plaintext
24 lines
770 B
Plaintext
record Range(a, b)
|
|
|
|
# note, we force 'n' to be real, which means recalculation will
|
|
# be using real numbers, not integers
|
|
procedure remap (range1, range2, n : real)
|
|
if n < range2.a | n > range2.b then fail # n out of given range
|
|
return range1.a + (n - range2.a) * (range1.b - range1.a) / (range2.b - range2.a)
|
|
end
|
|
|
|
procedure range_string (range)
|
|
return "[" || range.a || ", " || range.b || "]"
|
|
end
|
|
|
|
procedure main ()
|
|
range1 := Range (0, 10)
|
|
range2 := Range (-1, 0)
|
|
# if i is out of range1, then 'remap' fails, so only valid changes are written
|
|
every i := -2 to 12 do {
|
|
if m := remap (range2, range1, i)
|
|
then write ("Value " || i || " in " || range_string (range1) ||
|
|
" maps to " || m || " in " || range_string (range2))
|
|
}
|
|
end
|