Program Map(output); type real = double; tRange = array [0..1] of real; tMapRec = record mrFrom, mrTo: tRange; mrScale: real end; function InitRange(rfrom, rTo: real): tRange; begin InitRange[0] := rfrom; InitRange[1] := rTo; end; function InitMapRec(const fromRange, toRange: tRange): tMapRec; begin with InitMapRec do begin mrFrom := fromRange; mrTo := toRange; mrScale := (toRange[1] - toRange[0]) / (fromRange[1] - fromRange[0]); end; end; function MapRecRange(const value: real; var MR: tMapRec): real; begin with MR do MapRecRange := (value - mrFrom[0]) * mrScale + mrTo[0]; end; function MapRange(const value: real; const fromRange, toRange: tRange): real; begin MapRange := (value - fromRange[0]) * (toRange[1] - toRange[0]) / (fromRange[1] - fromRange[0]) + toRange[0]; end; var value: real; rFrom, rTo: tRange; mr: tMapRec; i: longint; begin rFrom := InitRange(0, 10); rTo := InitRange(-1, 0); mr := InitMapRec(rFrom, rTo); for i := 0 to 10 do begin value := i; writeln(i: 4, ' maps to: ', MapRange(value, rFrom, rTo): 10: 6, MapRecRange(value, mr): 10: 6); end; end.