FP的技巧与数据类型
[日期:2005-11-05]来源:作者:myheimu[字体:大中小] FreePascal中的基本数据类型
预定义整型
类型范围长度(字节)
Byte0..2551
Shortint-128..1271
Smallint-32768..327672
Word0..655352
Integer either smallint,longint or int64size2,4or8
Cardinal either word,longword or qword size2,4or8
Longint-2147483648..21474836474
Longword0..42949672954
Int64-9223372036854775808..92233720368547758078
QWord0..184467440737095516158
支持的实型
类型范围有效宽度长度(字节)
Real platform dependant???4or8
Single  1.5E-45..3.4E387-84
Double  5.0E-324..1.7E30815-168
Extended1.9E-4951..1.1E493219-2010
Comp-2E64+1..2E63-119-208
MAXINT和MAXLONGINT分别代表最大的INTEGER和LONGINT,则最小的就分别为MAXINT-1和MAXLONGINT-1
Free Pascal和Turbo Pascal的主要区别
虽然Free Pascal尽量设计得和Turbo Pascal接近,但是由于以下的两个原因,两者之间还是有一些区别的:
1.Free Pascal是一个32位的编译器,而Turbo Pascal只是16位编译器;2.Free Pascal是一个跨平台的编译器,而Turbo Pascal只在windows上使用。
如果你的代码是遵守ANSI Pascal的,那么代码从Turbo Pascal移植到Free Pas cal是没有问题的。
下面是在Turbo Pascal上可以使用,但是在Free Pascal就不能使用的一些语言特性:
1.函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pa scal中添加了函数重载功能。
2.PROTECTED,PUBLIC,PUBLISHED,TRY,FINALLY,EXCEPT,RAIS E成为了关键字,因此不能作为函数和过程的名字。
3.FAR,NEAR不再是关键字了。原因是Free Pascal是32位系统,不再需要这些关键字。
4.布尔表达式不一定要全部进行计算。只要最终结果已经能够确定,就不再计算其它还没有计算的部分了。比如布尔表达式exp1AND exp2AND exp3,如果已知exp1的结果是false,那么怎么表达式的结果肯定是false,exp2和exp3就不用进行计算了。
5.在Free Pascal中,集合中的元素都是4个字节长的。
6.表达式执行的顺序是不确定的。比如对于表达式a:=g(2)+f(3);不保证g(2)一定在f(3)之前执行。
7.如果用Rewrite打开文件,那么文件就只能被写入了。如果需要读取这个文件,要对文件执行Reset。
8.Free Pascal在程序结束之前一定要关闭输出文件,否则输出文件可能不能被正确的写入。
9.Free Pascal理论上可以使用4GB的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制)。这是Free Pascal由于32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB 的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。
下面是Free Pascal相对于Turbo Pascal扩充的一些功能:
1.函数可以返回复杂的类型,比如记录和数组。
2.在函数中,函数的返回值可以作为一个变量来处理。比如:
字符串数组怎么转成byte
function a:longint;
begin
a:=12;
while a>4do
begin
{...}
end;
end;
这个例子在Turbo Pascal中,a>4会被认为是函数的递归调用,但是在Free Pasc al中会认为a只是一个变量。如果想在Free Pascal中实现递归调用,就要写成下面的形式:
function a:longint;
begin
a:=12;
{this is the recursive call}
if a()>4then
begin
{...}
end;
end;
3.exit可以接受一个参数作为函数的返回值。比如:
function a:longint;
begin
a:=12;
if a>4then
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容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。6.Free Pascal在windows95及其以上的windows版本上支持长文件名。对于文件名,由于windows系统对大小写不敏感,因此在程序中,文件名的大小写是无关的。但是对于其它大小写敏感的系统,比如linux,程序中用到的文件名必须和系统中的文件名完全一致。但是由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。
(注:以上内容主要参考了参考文献[1])
参考文献:
[1]Users’manual for Free Pascal,version1.9.6,Document version2.0,Dec ember2004
Micha?l Van Canneyt,Florian Kl?mpfl
function binstr(value:longint;cnt:byte):string;
将value转二进制,取后cnt个字符所成字串
function lowercase(c:char or string):char or string;
upcase的反函数
procedure setlength(var s:string;len:longint);
将s长度定为len
function power(base,expon:real):real;
base的expon次方
strlcopy函数将一个字符串中的字符复制到另一个字符串中
strlen函数返回字符串中的字符数
strlfmt函数格式化一系列的参数,其结果中包含有指向目标缓冲区的指针strlicomp函数以最大长度比较两个字符串(不区分大小写)
strlower函数将字符串中的字符转换为小写
strmove函数将一个字符串中的字符复制到另一个字符串中
strnew函数在堆栈上分配一个字符串
strpas函数将以null结束的字符串转换为pascal类的字符串
strpcopy函数将pascal类的字符串复制为以null结束的字符串strplcopy函数从pascal类的最大长度字符串复制为以null结束的字符串strpos函数返回一个字符串在另一个字符串中首次出现指针
strrscan函数返回字符串中最后出现字符的指针
strscan函数返回字符串中出现首字符的指针
strtodate函数将字符串转换为日期格式
strtodatetime函数将字符串转换为日期/时间格式
strtofloat函数将给定的字符串转换为浮点数
strtoint函数将字符串转换为整型
strtointdef函数将字符串转换为整型或默认值
strtotime函数将字符串转换为时间格式
strupper函数将字符串中的字符转换为大写
style属性类型选择
suce函数返回后继的参数
swap函数交换参数的高低地址位
tabs属性标记每一项的内容
tabindex属性标记索引
text属性显示的文本
texttofloat函数将字符串(以null结束的格式)转换为浮点数
time函数返回当前的时间
timetostr函数将时间格式转换为字符串
trim函数从给定的字符串中删除前导和尾部的空格及控制字符
trimleft函数从给定的字符串中删除首部的空格及控制字符
trimright函数从给定的字符串中删除尾部的空格及控制字符
trunc函数将实型值截取为整型值
truncate函数截去当前文件位置后的内容
unselectedcolor属性未选中颜
upcase将字符转换为大写
uppercase将给定的字符串变为大写
val函数将字符串转换为整型值
vararraycreate函数以给定的界限和维数建立变体数组
vararraydimcount函数返回给定变体的维数
vararrayhighbound函数返回给定变体数组维数的上界
vararraylock函数锁定给定的变体数组
vararraylowbound函数返回给定变体数组维数的下界
vararrayof函数返回指定变体的数组元素
vararrayredim函数通过改变上限来调整变体的大小
vararrayunlock函数解锁指定的变体数组
varastype函数将变体转换为指定的类型
varcase函数将变体转换为指定的类型并保存他
varclear函数清除指定的变体
varcopy函数将指定的变体复制为指定的变体
varformdatetime函数返回包含日期时间的变体
varisarray函数测试变体是否为数组
varisempty函数测试变体是否为unassigned varisnull函数测试变体是否为null vartodatetime函数将给定的变体转换为日期时间
vartype函数将变体转换为指定的类型并保存他
visible属性控件的可见性
wantreturns属性为true时,按回车键产生一个回车符;为false时,按下ctrl+ent er才产生回车符write命令对有格式的文件,写一变量到文件组件中;对文本文件,写一个或多个值到文件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。