您当前的位置: 跳过导航链接首页 >> 教研组 >> 信息组 >> 信息学竞赛 >> TP和 FP的功能区别
TP和 FP的功能区别
转抄 更新时间:2007-9-20 点击数:873

 TP FP的功能区别
1
Free Pascal理论上可以使用4GB2^32byte)的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制),这是因为Free Pascal使用的是32位的编译器。
但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB2^16byte)的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB
但这并不是说,你可以随意定义很大的数组了,因为光读入200MB的数据就会让你的程序超时了(因为现在的7200转硬盘和133的系统总线速度决定了读取数据的速度也就100MB/秒)。
2
.在Free Pascal中,如果用assign给标准输入输出文件变量inputoutput指定了文件,在程序结束之前一定要用close关闭inputoutput,否则输出文件可能不能被正确的写入。
这个问题是近几年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
PROTECTEDPUBLICPUBLISHEDTRYFINALLYEXCEPTRAISE成为了关键字,因此不能作为函数和过程的名字;而FARNEAR不再是关键字了,原因是Free Pascal32位系统,不再需要这些关键字。


四、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.