在 Pascal 中,如何检查实变量是否在范围内?
In pascal, how can I check if real variable is in range?
在任何其他语言中都很简单,但在 Pascal 中我仍然遇到问题。对于整数变量,我想从 1
和 12
之间的用户值中读取,所以我只是这样做:
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]
中怎么办?所以基本上 a
是 real
而不是 integer
。如何解决这样的问题?
pascal 中的 in
运算符不检查 ranges 但 sets 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.
在任何其他语言中都很简单,但在 Pascal 中我仍然遇到问题。对于整数变量,我想从 1
和 12
之间的用户值中读取,所以我只是这样做:
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]
中怎么办?所以基本上 a
是 real
而不是 integer
。如何解决这样的问题?
pascal 中的 in
运算符不检查 ranges 但 sets 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.