我有一个特定的问题,我解决了一些问题。我想在Ada中创建一个运算符,它可以将浮点值除以一个字符,然后作为整数返回。
我理解运算符应该是一个函数/"以及从浮点值和字符到整数的某种类型转换。但是返回值会是什么样子,浮点值的哪一个四舍五入是合适的呢?
更新。
假设我想输入浮点值-21.8和字符"2"。答案应该是-11。我为此创建了一个子程序,但我觉得解决方案可能更简单。
function "/"(Float_Val : in Float;
Ch : in Character) return integer is
begin
if Float_Val < Float(0) then return
(Integer(Float'Rounding(Float_Val)) - (Character'Pos(Ch) - (Character'Pos('0'))) + 1) / (Character'Pos(Ch) - (Character'Pos('0')));
else return
(Integer(Float'Rounding(Float_Val)) + (Character'Pos(Ch) - (Character'Pos('0'))) - 1) / (Character'Pos(Ch) - (Character'Pos('0')));
end if;
end "/";
以及"/"在我的主程序中被调用
Put(Float_Val / Ch, Width => 0);
我不想调用这个奇怪的函数"/"
,但如果必须。。。骨架将是
function "/" (L : Float; R : Character) return Integer is
begin
-- this is where the magic happens
end "/";
我不明白你为什么需要绕过L
我只能说这些,不需要再解释你想使用什么算法。
更新:
这似乎运行得很好:
function "/" (L : Float; R : Character) return Integer
with Pre => R in '1' .. '9'
is
begin
return Integer (L) / (Character'Pos (R) - Character'Pos ('0'));
end "/";
参见ARM 4.6(33(。
回答您关于舍入的问题,并填写"魔术;在Simon的回答中,你必须更好地解释你想要计算的内容。例如,4.567/"的结果应该是什么;A";是你会怎么用手计算呢?
在我看来,你想把一些东西从差类型语言翻译成富类型语言Ada。如果你喜欢用Ada的方式来做这件事,那就需要一些反向工程来找出"integer"、"float"one_answers"character"类型的真正含义。然后我想"/"的一个解释性名字就会出现。