切换到宽版
  • 22125阅读
  • 31回复

Free Pascal 和 Turbo Pascal 的主要区别 [复制链接]

上一主题 下一主题
离线嚣声逆迹
只看该作者 10 发表于: 2005-11-04
只看中巨大的空间 换时间~HOHO~~~ 动态规划用着舒服~~
离线落丁
只看该作者 11 发表于: 2005-11-05
貌似看过此类文
离线李逍遥
只看该作者 12 发表于: 2005-11-10
经本人研究发现TP与FP不同的地方好象还有
语句:
  TP:end;
    FP:end
一个用加分号,一个不用
离线李逍遥
只看该作者 13 发表于: 2005-11-10
详细的说
  TP中:program ygczm;
var
r,k:integer;
a,b,c,d:real;
f1,f2:text;
function jc(n:integer):real;
var i:integer;
  t:real;
begin
t:=1;
if n<0 then
  begin
    writeln('n<0,data error');
    t:=-1
  end;
else for i:=2 to n do t:=t*i;
jc:=t;
end;
begin
assign(f1,'jc.in');
reset(f1);
readln(f1,r,k);
close(f1);
assign(f2,'jc.out');
rewrite(f2);
if r<k then
  begin
  a:=jc(k);
  b:=jc(r);
  c:=jc(k-r);
  d:=a/(b*c);
  writeln(f2,'k!/(r!*(k-r)!)=',d:4:2);
end;
else
  writeln(f2,'n<0,data error');
close(f2);
end.
  FP中:program ygczm;
var
r,k:integer;
a,b,c,d:real;
f1,f2:text;
function jc(n:integer):real;
var i:integer;
  t:real;
begin
t:=1;
if n<0 then
  begin
    writeln('n<0,data error');
    t:=-1
  end
else for i:=2 to n do t:=t*i;
jc:=t;
end;
begin
assign(f1,'jc.in');
reset(f1);
readln(f1,r,k);
close(f1);
assign(f2,'jc.out');
rewrite(f2);
if r<k then
  begin
  a:=jc(k);
  b:=jc(r);
  c:=jc(k-r);
  d:=a/(b*c);
  writeln(f2,'k!/(r!*(k-r)!)=',d:4:2);
end
else
  writeln(f2,'n<0,data error');
close(f2);
end.
大家讨论一下
离线archimedes

只看该作者 14 发表于: 2005-11-11
版主是抄的网上的
网上的掉了一点,所以版主也掉了一点。
使用TP时编单元时可以这样
unit a;
interface
function f(a:integer):integer;
implementation
function f;
begin
...
end.

但FreePascal在IMPLEMENTATION段中
不能省略形式参数表!
这一点很讨厌!
离线archimedes

只看该作者 15 发表于: 2005-11-11
FreePascal 的 BUG 太多了!!!!!!!!!!
离线gelanjie
只看该作者 16 发表于: 2005-11-14
谢谢了。
真及时呀。。
离线zhanjianbin
只看该作者 17 发表于: 2005-11-17
thank you!
离线jhtcywbchh
只看该作者 18 发表于: 2006-01-14
Free Pascal容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。

怎样定义
离线stevenjl

只看该作者 19 发表于: 2006-01-14

找不到pascal的资料,只有C#的。是微软写的……


下面的规则概括了运算符重载指南:

  • 在作为逻辑内置语言类型的值类型(如 System.Decimal 结构)上定义运算符。
  • 仅在定义方法的类中提供运算符重载方法。C# 编译器强制使用该指南。
  • 使用公共语言规范 (CLS) 中描述的名称和签名约定。C# 编译器自动实现此功能。
  • 当运算结果将十分明显时使用运算符重载。例如,能够从一个 Time 值减去另一个 Time 值以得到 TimeSpan 是有意义的;而用 or 运算符创建两个数据库查询的联合,或者用 shift 向流写入则是不适当的。
  • 以对称方式重载运算符。例如,如果重载相等运算符 (==),则还应该重载不相等运算符 (!=)。
  • 提供替换签名。大多数语言不支持运算符重载。因此,对于所有重载运算符的类型,CLS 都要求包含一个辅助方法(具有相应的特定于域的名称)来提供等价的功能。提供这种辅助方法是公共语言规范 (CLS) 的要求。下面的示例符合 CLS。
    [C#]
    public struct DateTime 
    {
       public static TimeSpan operator -(DateTime t1, DateTime t2) { }
       public static TimeSpan Subtract(DateTime t1, DateTime t2) { }
    }

下表包含运算符符号列表以及相应的替换方法和运算符名称。

C++ 运算符符号 替换方法名称 运算符名称
未定义 ToXxxFromXxx op_Implicit
未定义 ToXxxFromXxx op_Explicit
+(二进制) Add op_Addition
-(二进制) Subtract op_Subtraction
*(二进制) Multiply op_Multiply
/ Divide op_Division
% Mod op_Modulus
^ Xor op_ExclusiveOr
&(二进制) BitwiseAnd op_BitwiseAnd
| BitwiseOr op_BitwiseOr
&& And op_LogicalAnd
|| Or op_LogicalOr
= Assign op_Assign
<< LeftShift op_LeftShift
>> RightShift op_RightShift
未定义 LeftShift op_SignedRightShift
未定义 RightShift op_UnsignedRightShift
== Equals op_Equality
> Compare op_GreaterThan
< Compare op_LessThan
!= Compare op_Inequality
>= Compare op_GreaterThanOrEqual
<= Compare op_LessThanOrEqual
*= Multiply op_MultiplicationAssignment
-= Subtract op_SubtractionAssignment
^= Xor op_ExclusiveOrAssignment
<<= LeftShift op_LeftShiftAssignment
%= Mod op_ModulusAssignment
+= Add op_AdditionAssignment
&= BitwiseAnd op_BitwiseAndAssignment
|= BitwiseOr op_BitwiseOrAssignment
, 未指定 op_Comma
/= Divide op_DivisionAssignment
-- Decrement op_Decrement
++ Increment op_Increment
-(一元) Negate op_UnaryNegation
+(一元) Plus op_UnaryPlus
~ OnesComplement op_OnesComplement
Dream Walker...
快速回复
限100 字节
 
上一个 下一个