Freepascal资料详解

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Freepascall资料详解

一、TP和FP的功能区别

1.Free Pascal理论上可以使用4GB(2^32byte)的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制),这是因为Free Pascal使用的是32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB (2^16byte)的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。但这并不是说,你可以随意定义很大的数组了,因为光读入200MB的数据就会让你的程序超时了(因为现在的7200转硬盘和133的系统总线速度决定了读取数据的速度也就100MB/秒)。

2.在Free Pascal中,如果用assign给标准输入输出文件变量input和output指定了文件,在程序结束之前一定要用close关闭input和output,否则输出文件可能不能被正确的写入。这个问题是近几年NOIP竞赛和省队训练、选拔中选手常犯的错误。尤其是程序非正常结束之前(如halt)会忘记。

3.如果用Rewrite打开文件,那么文件就只能被写入了。如果需要读取这个文件,要对文件执行Reset。所以,在Free Pascal中最好不要对一个文件同时进行读写操作。

4.在Free Pascal中,集合中的元素都是4个字节长的。

5.表达式执行的顺序是不确定的。比如对于表达式a:=g(2)+f(3); 不保证g(2)一定在f(3)之前执行。

6.函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pascal中添加了函数重载功能。

7.PROTECTED,PUBLIC,PUBLISHED,TRY,FINALLY,EXCEPT,RAISE成为了关键字,因此不能作为函数和过程的名字;而FAR,NEAR不再是关键字了,原因是Free Pascal是32位系统,不再需要这些关键字。

二、FP的新增功能

1.函数可以返回复杂的类型,比如记录和数组。

如:

type

arrtype=array[1..100] of longint;{必须要先定义数组基类型}

var

i,j,k,n:longint;

a:arrtype;

function sort(a:arrtype;n:longint):arrtype;

var i,j,k:longint;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

if a>a[j] then

begin

k:=a;

a:=a[j];

a[j]:=k;

end;

sort:=a;

end;

begin

read(n);

for i:=1 to n do read(a);

a:=sort(a,n);

for i:=1 to n do write(a,' ');

writeln;

end.

2.在函数中,函数的返回值可以作为一个变量来处理。比如:

function a : longint;

begin

a:=12;

while a>4 do

begin

{...}

end;

end;

这个例子在Turbo Pascal中,a>4会被认为是函数的递归调用,但是在Free Pascal 中会认为a只是一个变量。如果想在Free Pascal中实现递归调用,就要写成下面的形式:function a : longint;

begin

a:=12;

if a()>4 then { 递归调用}

begin

{...}

end;

end;

3.exit可以接受一个参数作为函数的返回值。比如:

function a : longint;

begin

a:=12;

if a>4 then

begin

exit(a*67); { 函数的返回值就是a*67 }

end;

end;

4.Free Pascal支持函数重载。可以用相同的名字定义不同的函数,只要这些函数的参数不同,就是不同的函数。比如:

procedure DoSomething (a : longint);

begin

{...}

end;

procedure DoSomething (a : real);

begin

{...}

end;

可以使用不同的参数类型longint或者real来调用不同的DoSomething过程。

由于这个功能,函数的提前声明必须有完整的参数声明:

procedure x (v : longint);

forward;

{...}

procedure x; {这里定义的过程x重载了前面声明的过程x。因此的两个x是不同的} begin

{...}

end;

5.Free Pascal容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。

格式: operator 运算符(运算数) 结果

例:operator +(x:datatype; y:datatype) z:datatype;

begin

{……}

end;

6. Turbo Pascal中定义了十六进制数的表示方法,即在十六进制数前添加符号$,如:

X:=$F0A;

Writeln(‘X=’,x);输出结果是X=3850。

这种进制数的表述给编程者带来很多便捷,而Free Pascal扩容了此优点,除十六进制数外,二进制数也有类似的表述(添加符号%)如:

X:=%101;

Writeln(‘X=’,x);输出结果是X=5。

7.Turbo Pascal中注释部分可用(*comment*)或者{comment}表示,如:Var I:integer;

Begin (*for I:=1 to 100 do write(i);*)

writeln(‘$’);

End.

或者:

Var I:integer;

Begin

{for I:=1 to 100 do write(i)}

writeln(‘$’);

End.

Free Pascal除前面两种表述方法外,//comment也可以,但其中comment必须在同一行内,如:

将3、4行都括为注释部分:

Var

I:integer;

Begin

//for I:=1 to 100 do

相关文档
最新文档