Pascal 上的非法表达

Illegal Expression on Pascal

提问人:andre 提问时间:10/12/2023 最后编辑:Chrisandre 更新时间:10/17/2023 访问量:115

问:

program latihan;
uses crt;

var
    a, b, c : integer;
    d : real;

begin
    write('a: ');
    readln(a);
    write('b: ');
    readln(b);
    c := a + b;
    d := a + b;
    sqr(c);
    writeln(c);
    sqrt(d);
    writeln(d:0:0);
end.

为什么代码中有非法表达式??sqrt(d)

为什么代码中会出现非法表达以及如何解决它的解释是什么?sqrt(d)

弗里帕斯卡

评论


答:

3赞 Hoàng Hải Lý 10/12/2023 #1

Pascal 中的 sqrt() 函数仅适用于整数类型,而 d 是实数类型。因此,尝试将实值传递给 sqrt() 会导致非法表达式错误。

要解决此问题,您需要使用支持实数的不同平方根函数,例如:

uses Math;

//...

sqrt(d);

或者,您可以在使用 sqrt() 之前先将 d 转换为整数:

c := trunc(d);
sqrt(c);

评论

0赞 andre 10/12/2023
谢谢你的回答,我会试一试。
2赞 tofro 10/13/2023
sqrt()在整数和实数类型上工作得很好。但是,需要将返回值分配给实际类型。
0赞 Community 10/15/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
1赞 Tom Brunberg 10/16/2023
你说:Pascal 中的 sqrt() 函数只适用于整数类型。AFAIK,采用实数类型和整数类型。请参阅确认您的陈述的文档,或编辑您的答案。sqrt()
1赞 Trome 10/13/2023 #2

sqrt()返回一个 Extended 值,要接收结果,您需要将其分配给变量,与:sqr()

c := sqr(c);
writeln(c);
d := sqrt(d);
writeln(d);
3赞 tofro 10/13/2023 #3

sqrt()是一个返回值的函数,需要用作该值。你把它当作一个程序来使用。

函数需要将其返回值分配给变量,例如

    c := sqrt (c);

为其分配返回值的变量必须是 REAL 类型。sqrt()