在 Pascal 中,如何检查实变量是否在范围内?

In pascal, how can I check if real variable is in range?

在任何其他语言中都很简单,但在 Pascal 中我仍然遇到问题。对于整数变量,我想从 112 之间的用户值中读取,所以我只是这样做:

Program HelloWorld(output);

{$mode objFPC}

var
    a: integer;

begin
     repeat
        writeln('Provide a, a in [1,12]:');
        readln(a);   
     until (a in [1..12]);    
end.

如果我想检查 a 是否在 [0,3.14159] 中怎么办?所以基本上 areal 而不是 integer。如何解决这样的问题?

pascal 中的 in 运算符不检查 rangessets so

a in [1..12]

不检查 a 是否在 1..12 的范围内,而是检查 a 是否在由 1..12 的 Integer 构造的集合中。对于 Real 值,这将是一个很大的问题。

所以唯一一致的方法是检查

(a >= 0) and (a <= 3.14159)

当然你可以根据需要创建相应的函数。

function inrange(val, lower, upper: real): boolean;
begin
  inrange := (lower <= val) and (upper >= val);
end;


var a: real;
begin
  repeat
    writeln('Provide a, a in [0, 3.14159]:');
    readln(a);   
  until inrange(a, 0, 3.14159);  
end.