如何在pascal

时间:2017-07-25 07:54:05

标签: pascal freepascal

在我的程序中,我需要经常在代码中获得百分比。现在我有这个功能来解决它​​

function percent(whole, part: double):double;
 begin
      percent:= whole * part / 100;
 end;

我想知道有什么方法可以制作新的操作符,所以我只能编写类似:a:= 100%20,并得到想要的结果。它也应该能够用作:c:= b / a;或:c:= c / a;

3 个答案:

答案 0 :(得分:3)

您可以在pascal中定义运算符,但仅限于记录类型。它被称为运算符重载,您可以阅读here。你要做的是定义你自己的记录类型数据,然后重载标准运算符,如 =< > %等做你想做的事。这是一个简单的例子:

Interface

Type
  TMyFloatType = record
    value: Extended;

    class operator Implicit(n: Extended): TMyFloatType;
    class operator Explicit(n: Extended): TMyFloatType;
    class operator Equal(a, b: TMyFloatType): Boolean;
    class operator GreaterThan(a, b: TMyFloatType): Boolean;
  end;


Implementation


class operator TMyFloatType.Implicit(n: Extended): TMyFloatType;
begin
 result.value := n;
end;

class operator TMyFloatType.Explicit(n: Extended): TMyFloatType;
begin
 result.value := n;
end;

class operator TMyFloatType.Equal(a, b: TMyFloatType): Boolean;
begin
  result := (a.value = b.value);
end;

class operator TMyFloatType.GreaterThan(a, b: TMyFloatType): Boolean;
begin
  result := (a.value > b.value);
end;

然后您可以像常规变量一样使用它:

procedure Test;
var
  a, b: TMyFloatType;
Begin
  // first assign some values to a and b
  a := 3.14;
  b := 2.7;      

  if a > b then
  Begin
    // Do something
  End;
End;

您可以重载的运算符也包括数学运算符,如+ - / * mod div等。

现在,尽管如此,我确实认为实际实现它以避免一个简单的功能并不是很方便,但是,嘿,你的选择。

请注意,您可以让运营商超负荷进行出价。我相信像percentage := a % 20;这样的计算你需要重载模数运算符。

答案 1 :(得分:0)

没有办法做到这一点。您只能使用

功能

答案 2 :(得分:0)

我只想使用一个函数。顺便说一下,你的功能

函数百分比(整数,部分:双精度):double;  开始       百分比:=整个*部分/ 100;  端;

不正确。它应该是

百分比:= 100.0 *部分/整体;