Free Pascal

Free Pascal

专业Pascal编译器
Free Pascal(全称FPK Pascal)是一个32位和64位专业Pascal编译器。它可以在多个处理器架构中运行:Intel x86,AMD64/x86-64,PowerPC32/64,SPARC和 ARM。它支持的操作系统有Linux,FreeBSD,Haiku,Mac OS X/iOS/Darwin,DOS,Windows32/64/CE,OS/2,MorphOS,Nintendo GBA,Nintendo DS和 Nintendo Wii。另外,在JVM,MIPS和Motorola 68k处理器架构或操作系统中使用的Free Pascal正在研发开发版本。在全国信息学奥林匹克大赛(简称NOI)中,Pascal是被采用的三种编程语言之一。[2]由于它具有良好的结构程序设计特性,特别适合于学生掌握自顶向下逐步求精的结构化程序设计思想和方法,并能构建出良好的程序设计风格和习惯,因此,Pascal是在NOI中最受选手青睐的语言。同样,许多大学都把Pascal作为一门重要的信息学语言来进行授课。[1]
  • 中文名:
  • 外文名:Free Pascal
  • 别名:
  • 语言标准:ANSI Pascal
  • 支持平台:Windows、Linux、Mac、FreeBSD等
  • 最新版本:2.6.4

简介

Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。

此前被广泛使用的PASCAL编译器普遍为Turbo Pascal&Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。

区别

与TP

虽然Free Pascal尽量设计得和Turbo Pascal接近,但是由于以下的两个原因,两者之间还是有一些区别的:

1.Free Pascal是一个32位的编译器,而Turbo Pascal只是16位编译器;

2.Free Pascal是一个跨平台的编译器,而Turbo Pascal只在windows和DOS上使用。

如果你的代码遵守ANSI Pascal标准,那么将代码从Turbo Pascal移植到Free Pascal是没有问题的。

下面是在Turbo Pascal上可以使用,但是在Free Pascal就不能使用的一些语言特性:

1.函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pascal中添加了函数重载功能(可以用完全相同的多个标识符定义多个函数,只要它们的参数不同,就是不同的函数;在没有此功能时,非整实型的实在参数可以与整形的形式参数赋值相容);

2.Protected、Public、Published、Try、Finally、Except、Raise成了关键字,不能作为标识符的名字;

3.Far、Near不再是关键字了,原因是Free Pascal是32位系统,不再需要这些关键字;

4.布尔表达式不一定要全部进行计算。只要最终结果已经能够确定,就不再计算其它还没有计算的部分了——比如布尔表达式exp1 and exp2 and 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。

扩充

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

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

function a : longint;

begin

a:=12;

while a>4do

begin

{...}

end;

end;

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

function a : longint;

begin

a:=12;

{ this is the recursive call }

if a()>4 then

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在windows 95及其以上的windows版本上支持长文件名。对于文件名,由于windows系统对大小写不敏感,因此在程序中,文件名的大小写是无关的。但是对于其它大小写敏感的系统,比如linux,程序中用到的文件名必须和系统中的文件名完全一致。但是由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。

程序设计介绍

PASCAL语言是由瑞士的沃斯(N.Wirth)教授于1971年提出来的。它的命名是为了纪念法国数学家Pascal。它是世界上第一个结构化的高级程序设计语言。结构化程序设计主要由三种基本结构(顺序结构、选择结构、循环结构)组成。后来有人把函数和过程作为第四种基本结构。这四种结构对外看都只有一个入口和一个出口,结构清晰,避免了由GOTO语句所引起的混乱。另外在程序设计方法方面,主张采用自顶向下,逐步求精的方法。即将一个大的复杂问题,划分成若干少的易解决的问题。每个小问题,又可划分成一些更小的更易解决的问题。这样,只要把每个小问题都解决了,整个大问题也就解决了。这种方法也为多个人合作编程提供方便。

例1-1:输入半径求圆的周长和面积?

program circle(input,output);

const

Pi=3.14;

var

r,L,s:real;

begin

write('r=');

readln(r);

L:=2*pi*r;

s:=pi*r*r;

writeln('R=',r:8:2,'L=',L:8:2,'S=',s:8:2);

end.

集成环境

编辑程序、保存程序

1.请确定Turbo.exe文件所在磁盘目录。假如它是放在F:盘的TP7文件夹(又称子目录)中。

2.把您要保存程序文件的盘设为当前盘,并保存文件于当前盘的当前目录中。假如您的程序文件要存在H:盘的当前目录,则在DOS方式提示符“>;”后输入下面命令。

>h:←┘

3.调入并执行Turbo.exe,进入Turbo Pascal集成环境。

>f:tp7turbo.exe←┘

4.在程序编辑窗口中,输入例1-1程序。注意一个编辑窗口只能编辑一个程序文件。常用的编辑键有:

←↑→↓:光标移动键。

Delete:删除光标所在字符。

←┘:回车键,用于换行或在光标处插入一行之用。

5.程序编辑完后,按F10键,执行主菜单[File]中的[Save]项目菜单保存程序到磁盘中,并试用“yz1-1.PAS”作为例1-1程序存盘文件名。

运行程序

观察运行结果、跟踪调试程序

1.按F10键,执行主菜单[RUN]中的[Run]项目菜单,运行程序,然后在提示后输入一个调试用的半径值:

r=10←┘

2.按F10键,执行主菜单[Debug]中的[output]项目菜单,打开输出窗口观察到结果如下:

R=10.00L= 62.80S=314.00

如果有错,请找出错误并修改它,重复第1步,再执行直到有正确输出结果。

3.重复第1步,再次运行程序,输入另一个园的半径值5,观察输出结果是否也正确,从而确定该程序能否正确解决不同半径的园的周长和面积的求解问题。

程序调试中我们常用的操作还有:

双线框的窗口称为“当前活动窗口”。

F1键:得到光标所在位置的项目的帮助信息。

F4键:要求运行到当前光标处暂停。

F5键:放大或缩小当前活动窗口。

F6键:切换其它窗口为当前活动窗口。

F7键:单步执行程序并能跟踪进入子程序(或开始单步执行)。

F8键:单步执行程序但不能跟踪进入其子程序(或开始单步执行)。

F9键:运行、编译程序。

F10键:在菜单和活动窗口间转换。

CTRL+Break键:强制终止当前程序的运行。

其它功能按键请同学们以后自己查看英文帮助说明,出色的程序员都习惯查看英文帮助。

4.学习跟踪调试方法,它可帮助我们检查分析出算法上存在的错误。

1.按F10键,执行主菜单[Debug]中的[Watch]项目菜单,打开监视窗口

(2)按Insert键,输入常量pi←┘

Insert键,输入变量r←┘

Insert键,输入变量l←┘

Insert键,输入变量s←┘

3.请按F8键或F7单步执行程序直到程序结束,观察上述常量和变量如何变化。

4.观察程序执行过程中Watch监视窗口中常量和变量的值变化,分析算法是否正确。

说明:如果想在程序还未结束前终止程序的单步执行或跟踪调试,可按F10键,执行主菜单[Run]中的[Program Reset]项目菜单。

1.1.5关闭当前活动窗口、退出Turbo Pascal集成环境

1.按F6键切换当前活动窗口,执行主菜单[Windows]中的[Close]菜单项关闭当前活动窗口,如果当前活动窗口是程序编辑窗,在关闭前可能因程序已修改过而提问用户是否需要保存编辑窗口中的被更改后的程序。试逐一关闭所有窗口。

2.执行主菜单[File]中的[Exit]菜单项可退出Turbo Pascal集成环境,返回DOS提示符状态。

1.1.6深入理解例1-1程序各语句意义

保留字

1.在Pascal中有些词具有特定的含义,用户必须正确理解其含义和正确使用,否则会运行出错。这些具有特定含义的词称为“保留字”。“保留字”不能做常量名、变量名或程序名。在Turbo Pascal7.0编辑窗口中,保留字默认用白色显示。例1-1中的包含的保留字有:program,const,var,begin,end,它们的特定含义分别是:program指出后面定义的是程序名;const指出后面定义的是程序将用到的常量;var指出后面定义的是程序将用到的变量;begin指出程序执行代码开始;end指出程序执行代码结束。用户必须了解其含义,以便正确的使用,否则会造成错误,这些具有特定含义的保留字不能作其它用途,如作变量名等。在Free Pascal2.6.2中,保留字共有93个,默认用白色显示,保留字如下:

absolute,abstract,and,array,as,asm,assembler,begin,break,case,cdecl,class,const,constructor,continue,cppclass,deprecated,destructor,div,do,downto,else,end,except,exit,export,exports,external,experimental,fail,false,far,file,finally,for,forward,function,goto,if,implementation,in,index,inherited,initialization,inline,interface,interrupt,is,label,library,mod,name,near,nil,not,object,of,on,operator,or,otherwise,packed,popstack,private,procedure,program,property,protected,public,raise,record,reintroduce,repeat,self,set,shl,shr,stdcall,string,then,to,true,try,type,unimplemented,unit,until,uses,var,virtual,while,with,xor。

标识符

2.除了保留字外,还用到标识符,用于表示常量、变量、类型、文件、函数、过程或程序的名字。标识符是以字母开头的字母、数字组合,标识符又分为标准标识符和用户自定义标识符。如例1-1中,用户自定义标识符有:程序名为circle,常量pi,实数型变量r、l和s,它们由程序设计者定义的;标准标识符有:实数标准类型名real,读数标准过程名readln,输出标准过程名write和writeln,标准输入文件input,标准输出文件output。在Pascal编译系统中,标准标识符也具有特殊的含义,我们定义标识符时也应尽量避免与标准标识符取相同名字。PASCAL中的保留字及标识符是不区分大小写的。

在PASCAL中有些标识符已定义了特定的含义,称为标准标识符,它们是:

标准常量:false,true,maxint等;

标准类型:integer,real,char,boolean,string,text等;

标准文件:input,output等;

标准函数:abs,chr,cos,eof,eoln,round,trunc等;

标准过程:read,readln,write,writeln,new,reset等;

书写格式

程序名说明:program<;用户自定义的程序名>(input,output);其中圆括号的内容称为程序的参数。程序参数指明程序与外部联系的文件名。input是标准输入文件,例如键盘;output是标准输出文件,例如屏幕、打印机等。对于标准设备常可省略(input,output)的说明,简写为:program<;用户自定义的程序名>;;如例1-1可省略简写为:“program circle; ”

常量定义:const[常量标识符]=[常量]:

变量定义:var[变量表]:[类型];

主程序语句部分:

begin

[语句1];

[语句2];

......

[语句n]

end.

赋值语句:[变量名标识符]:=[表达式变量常量值];;其意义是把右边:=后面的表达式、变量常量或值送到左边变量名所对应的数据区中。

读数据标准过程(又称读语句):read(变量表)或readln,园括符内必须是已定义过的变量标识符,有多个时变量时可用逗号分隔构成变量表。read和readln的区别是readln完成所有必要的读取后会丢掉这一行的数据,不再进行读取.

输出数据标准过程(又称写语句):write(数据项表)或writeln(数据项表),有多个数据项时要用逗号分隔。数据项可以是字符串(如:'L=','S=')、变量(如:l、s),如:s:8:2,表示要求输出时数据保留2位小数位,总长度包括小数点为8位;write与writeln区别是writeln完成所有输出后自动换行。

1.2PASCAL基本组成

1.2.1PASCAL语言使用的几类基本符号(ASCII码)

(1)大小写英文字母:A,B,...Z,a,b,..z

(2)数字:0,1,2,3,4,5,6,7,8,9

(3) 其它符号:+,-,*,/,=,<,>,>=,<=,<,>,(,),[,],:=,',,.,:,..,∧等。

注意:PASCAL的标识符及保留字定义只能采用上述基本符号,其它特殊符号。例如:αβε∮∞≈,汉字等只能在字符型常量中使用。

常量与变量

程序中数据分为两类:一类是在程序执行过程中其值保持不变的量,称为常量;另一类是在程序执行过程中,其值可以改变的,这类数据称为变量。根据使用方式的不同,常量又可以分为直接常量和用户定义常量两种。

1.直接常量

指程序中直接引用的常数,在PASCAL中经常使用的常量有:整型常数,实型常数,字符型常数和布尔型常数等。

1.整型常数语法图如下:

如:100,+120,-199,0等。

2.实型常数语法图如下:

如:100,120 ,2.5,0,0.005,+2.418,1.24E+3,-1.24E+3

这里E表示用科学记数法表示,1.24E+3相当于数学的1.24×10^(+3)。

3.字符型常数语法图如下:

如:'A','a','?','4','aBbc','12.5'等。

4.布尔型常量

布尔型常量简称为布尔型常数,它只有两个:true和false,分别表示逻辑判断的结果是真(True)和假(False)。

2.用户自定义常量

在程序中,如果一个常数反复多次出现在程序中,用户可以通过说明语句来定义一个标识符来代表这个常量。常量说明语法图如下:

如:const

pi=3.14;

country='China';

success=true;

另外,还有一种“强型常量”定义方式,其语法为:

CONST

<常量标示符>:<常量类型>=<常量值>;

CONST

a:real=12;

这说明a这个常量是实型常量,即a=1.2000000000E+001

而不是a=12(这个整型)。强型常量常常在与精确度有关的场合用得上!

3.变量说明

PASCAL程序中数值可以改变的量称为变量,由于变量可以取不同的值,因此变量必须通过标识符来代表。程序中出现的每个变量都必须在程序的变量说明部分进行类型说明.变量说明语法图如下:

如:var

x,y,z:real;

i,j,k:integer;

ch:char;

t,f:boolean;

name:string;

数据类型

数据的类型确定了该类数据的表示形式和取值范围,而且确定了其所能参加的各种运算。一个数存放在计算机中都要占用固定的存储空间,这决定了在计算机中的每种数据类型定义的数的大小是有限的,这点与数学中的定义不同,为了节省空间和提高处理速度,我们通常要根椐处理的数的最大可能决定选用不同的数据类型。Byte(字节)为信息存储单位。PASCAL语言提供了丰富的数据类型,这里我们先介绍标准类型和部分构造类型,其它类型以后用到时才介绍。此处“占用存储空间”单位均为字节(byte)。

标准函数和过程

PASCAL中提供了很多标准函数和过程给用户直接使用,方便了我们编程,下面介绍一些常用的标准函数和标准过程,其它函数和过程可以在Trurbo Pascal的帮助文件中查阅。

(1)算术标准函数

函数名称X类型结果类型说明

abs(x)绝对值整型,实型整型,实型Abs(-25)=25

sqr(x)平方值整型,实型整型,实型Sqr(5)=25

sqrt(x)平方根整型,实型实型sqrt(25)=5.0000000000E+00

trunc(x)取整整型,实型整型截取整数部分。trunc(-2.3)=-2

round(x) 取整整型,实型 整型 四舍五入取整。round(-2.6)=-3round(-2.3)=-2

int(x)取整整型,实型实型截取整数部分int(2.5)=2.0000000000E+00int(-2.5)=-2.000000000E+00

frac(x)取小数整型,实型实型frac(2.5)=5.0000000000E-01

exp(x)指数整型,实型实型例:求e3即,e为2.718exp(3)=2.0085536923E+01

ln(x)对数整型,实型实型例:求log10(2)ln(2)=6.9314718056E-01

random随机数无实型随机产生(0,1)间的随机数

random(x)随机数整型整型随机产生[0,x-1]间的随机数

其它函数还有正弦函数sin(x),余弦函数cos(x),反正切函数arctan(x),自然对数函等等,请需要时从Free Pascal中的英文帮助中查阅。

注:在PASCAL中没有定义幂运算函数xn。但可采用下面式子计算:exp(n*ln(x))。

(2)算术标准过程

dec(x)相当于x:=x-1

dec(x,n)相当于x:=x-n

inc(x)相当于x:=x+1

inc(x,n)相当于x:=x+n

(3)字符处理标准函数

为了说明方便,设s,str,str1,str2为字符串型(string),ch为字符型(char)变量。

concat(str1,str2)

作用:把两字符串连接成新字符中串。

例:concat('abc','def')结果:'abcdef'

copy(str,a,b)

作用:从字符串str的左边第a(整数)位开始截取b(整数)位字符串。

例:copy('abcdef',2,4)结果:'bcde'

length(str)

作用:求字符串str的长度。

例:length('abcdef')结果:6;length('')结果:0;length(' ) 结果:1

chr(x)

作用:求x(x为整数1--255)表示的ASCII代码对应的字符

例:chr(65)结果:'A';chr(66)结果:'B'

ord(x)

作用:求x的序号,其中x必须为有序类型。有序类型如:字符型、布尔型、整型、枚举型、子界型等。

例:ord('A')即'A'的ASCII码值为:65;ord('B')即'B'的ASCII码值为:66

ord(true)结果:1;ord(false)结果:0

ord(1)结果:49;ord(0)结果:48

pos(str1,str2)

作用:求字符串str1在字符串str2中的开始位置,结果为整数。

例:pos('abc','efabcdg')结果:3;pos('abc','efabfgh')结果:0

upcase(ch)

作用:把ch对应的字符转为大写字母。

例:upcase('a')结果:'A'

(4)字符串处理标准过程

delete(str,a,b)

作用:从字符串str的左边第a(整数)个字符开始向右连续删除b(整数)位字符,并把剩余字符串赋给str

例:str:='abcdefgh';delete(str,4,3);最后str结果为:'abcgh'

str:='abcdef';delete(str,8,3);最后str结果为:'abcdef'

insert(str1,str,a)

作用:把字符串str1插入字符串str中由第a(整数)位字符之前,并把新字符串赋给字符串变量str。

例:str:='efghy';insert('abc',str,3);最后str结果为:'efabcghy'

str:='efghy';insert('abc',str,8);最后str结果为:'efghyabc'

str(x,s)

作用:将x(x为整数或实数)转化为数字字符串,结果存入S。

例:str(12.4,s)s的结果为:'1.2400000000E+01'

str(12.4:5:1,s)s的结果为:'12.4'。str(124,s)s的结果为:124'

val(str,a,code)

作用:将数字字符串转换成数字,并将该数字存入实型或整型变量a中,code为返回的错误代码,code=0表示转换成功,无错误。

例:val('12',a,code 若a为实型,a的结果为:1.2000000000E+01;若a为整型,a的结果为:12

(5)布尔型标准函数

odd(x)

作用:判断自变量x的奇偶特性,其中x为整型。奇数为true,偶数为false。

例:odd(13)结果:true ;odd(10)结果:false。

eof(x)

作用:判断文件x是否处于结束状态。其中x为文件型变量。文件结束为true,否则为false。

eoln(x)

作用:判断文件x是否处于行结束状态。其中x为文件型变量。行结束为true,否则为false。

(6)顺序类型函数

pred(x)

作用:求x的前一个量值,其中x为字符型、布尔型、整型、枚举型、子界型等有序类型。

例:pred(6)=5;pred('b')='a';pred(true)=false;pred(false)=true

succ(x)

作用:求x的后一个量值,其中x为字符型、布尔型、整型、枚举型、子界型等有序类型。

例:succ(5)=6;pred('a')='b';pred(true)=false;pred(false)=true

(7)标准单元中常用标准过程

Turbo Pascal中系统提供了八个标准单元,分别是:system(系统单元)、printer(打印单元)、dos(dos单元)、crt(显示单元)、overlay(复盖单元)、graph(图形单元)、turbo3(与3.0版兼容单元)、graph3(3.0海龟图形单元)。这些单元中分别定义了大量的函数和过程供用户使用。但注意在使用标准单元的函数和过程前,除system单元可省略说明外,其它要在程序开头说明。说明格式如下:uses标准单元;或uses标准单元1,...,标准单元n;另外,前面介绍过的标准函数和过程都在system单元中。下面补充一些常用标准函数和过程。

clrsc 过程在crt单元

格式:clrscr作用:清文本屏幕,并将光标移到屏幕左上角。

delay过程在crt单元

格式:delay(ms)作用:延迟ms毫秒数,其中ms为word型。

gotoxy过程在crt单元

格式:gotoxy(x,y)作用:称光标到y行x列上,其中x,y为byte型。

sound过程在crt单元

格式:sound(hz)作用:按hz(word型)指定的频率发音,调用该过程后会一直响,直到调用nosound过程将其关闭。

nosound过程在crt单元

格式:nosound作用:关闭扬声器。

readkey函数在crt单元

格式:readkey作用:从键盘读入一个字符,函数类型结果为char。

exit过程在system单元

格式:exit作用:退出当前过程或模块。

halt过程在system单元

格式:halt作用:停止程序执行。

getdate过程在dos单元

格式:getdate(y,m,d,dw)作用:返回当前日期(年,月,日,星期),其中y,m,d,dw为word型。1980<=y<=2099,1<=m<=12,1<=d<=31,0<=dw<=6(星期日为0)。

gettime过程在dos单元

格式:gettime(h,m,s,se)作用:返回当前时间(时,分,秒,毫秒),其中h,m,s,se为word型。0<=h<=24,0<=m<=59,0<=s<=59,0<=se<=99秒。

还有setdate(y,m,d,dw),settime(h,m,s,se),请读者查阅Turbo Pascal的帮助文件。

read或readln过程在system单元

格式:read(f,v1,v2,...,vn)或readln(f,v1,v2,..vn)其中f为文件型变量,标准输入文件input(如键盘输入)时可省,v1,v2,...,vn为变量名表。

作用:从标准输入文件(如键盘输入)或磁盘文件中读入数据到变量中,多个变量时,要用逗号分隔。read与readln的区别是:readln会掉丢当前输入行中多余的数据。而read不会,多余的数据可留待下一个read或readln使用。

write或writeln过程在system单元

格式:write(f,v1,v2,...,vn)或writeln(f,v1,v2,...,vn)其中f为文件型变量,标准输出文件OUTPUT(如显示器)可省,v1,v2,...,vn为表达式,且每个表达式的必须有唯一确定值,类型为标准类型。write与writeln区别是:writeln输完所有数据项后,光标自动移动到下一行,即自动换行。

pascal函数集

abort函数引起放弃的意外处理

abs函数绝对值函数

addexitproc函数

将一过程添加到运行时库的结束过程表中

addr函数返回指定对象的地址

adjustlinebreaks函数

将给定字符串的行分隔符调整为cr/lf序列

align属性使控件位于窗口某部分

alignment属性控件标签的文字位置

allocmem函数在堆栈上分配给定大小的块

allowgrayed属性允许一个灰度选择

ansicomparestr函数比较字符串(区分大小写)

ansicomparetext函数比较字符串(不区分大小写)

ansilowercase函数将字符转换为小写

ansiuppercase函数将字符转换为大写

append函数以附加的方式打开已有的文件

arctan函数余切函数

assignfile函数给文件变量赋一外部文件名

assigned函数测试函数或过程变量是否为空

autosize属性自动控制标签的大小

backgrounddi2001.jpg属性背景色

beginthread函数

以适当的方式建立用于内存管理的线程

bevelinner属性控件方框的内框方式

bevelouter属性控件方框的外框方式

bevelwidth属性控件方框的外框宽度

blockread函数读一个或多个记录到变量中

blockwrite函数从变量中写一个或多个记录

borderstyle属性边界类型

borderwidth属性边界宽度

break命令终止for、while、repeat循环语句

brush属性画刷

caption属性标签文字的内容

changefileext函数改变文件的后缀

chdir函数改变当前目录

checked属性确定复选框选中状态

chr函数返回指定序数的字符

closefile命令关闭打开的文件

color属性标签的颜色

columns属性显示的列数

comparestr函数比较字符串(区分大小写)

concat函数合并字符串

continue命令继续for、while、repeat的下一个循环

copy函数返回一字符串的子串

cos函数余弦函数

ctl3d属性是否具有3d效果

cursor属性鼠标指针移入后的形状

date函数返回当前的日期

datetimetofiledate函数

将delphi的日期格式转换为dos的日期格式

datetimetostr函数将日期时间格式转换为字符串

datetimetostring函数将日期时间格式转换为字符串

datetostr函数将日期格式转换为字符串

dayofweek函数返回星期的数值

dec函数递减变量值

decodedate函数将日期格式分解为年月日

decodetime函数

将时间格式分解为时、分、秒、毫秒

delete函数从字符串中删除子串

deletefile命令删除文件

diskfree函数返回剩余磁盘空间的大小

disksize函数返回指定磁盘的容量

dispose函数释放动态变量所占的空间

disposestr函数释放字符串在堆栈中的内存空间

ditherbackgrounddi2001.jpg?

使背景色的色彩加重或减少50%

dragcursor属性当鼠标按下时光标的形状

dragmode属性按动的作用方式

dropdowncount属性容许的显示数据项的数目

editmask属性编辑模式

enabled属性是否使标签呈现打开状态

encodedate函数将年月日合成为日期格式

encodetime函数

将时、分、秒、毫秒合成为时间格式

endmargin属性末尾边缘

eof函数

对有类型或无类型文件测试是否到文件尾

eoln函数返回文本文件的行结束状态

erase命令删除外部文件

exceptaddr函数返回引起当前意外的地址

exclude函数从集合中删除一些元素

exceptobject函数返回当前意外的索引

exit命令立即从当前的语句块中退出

exp函数指数函数

expandfilename函数返回包含绝对路径的字符串

extendedselect属性

是否允许存在选择模式,true时,multiselect才

有意义

extractfiledir函数返回驱动器和路径

extractfileext函数返回文件的后缀

extractfilename函数返回文件名

extractfilepath函数返回指定文件的路径

fileage函数返回文件已存在的时间

fileclose命令关闭指定的文件

filecreate命令用指定的文件名建立新文件

filedatetodatetime函数

将dos的日期格式转换为delphi的日期格式

fileexists函数检查文件是否存在

filegatattr函数返回文件的属性

filegetdate函数返回文件的dos日期时间标记

fileopen命令用指定的存取模式打开指定的文件

filepos函数返回文件的当前指针位置

fileread命令从指定的文件读取

filesearch命令在目录中搜索指定的文件

fileseek函数改变文件的指针

filesetattr函数设置文件属性

filesetdate函数设置文件的dos日期时间标记

filesize函数返回当前文件的大小

filewrite函数对指定的文件做写操作

fillchar函数用指定的值填充连续字节的数

findclose命令终止findfirst/findnext序列

findfirst命令对指定的文件名及属性搜索目录

findnext命令返回与文件名及属性匹配的下一入口

floattodecimal函数将浮点数转换为十进制数

floattostrf函数将浮点数转换为字符串

floattostr函数将浮点数转换为字符串

floattotext函数将给定的浮点数转换为十进制数

floattotextfmt函数将给定的浮点数转换为十进制数

flush函数

将缓冲区的内容刷新到输出的文本文件中

fmtloadstr函数

从程序的资源字符串表中装载字符串

fmtstr函数

格式化一系列的参数,其结果以参数result返回

font属性设置字体

format函数

格式化一系列的参数并返回pascal字符串

formatbuf函数格式化一系列的参数

formatdatetime函数

用指定的格式来格式化日期和时间

formatfloat函数指定浮点数格式

frac函数返回参数的小数部分

freemem函数

按给定大小释放动态变量所占的空间

getdir返回指定驱动器的当前目录

getheapstatus返回内存管理器的当前状态

getmem

建立一指定大小的动态变量,并将指针指向该处

getmemorymanager返回内存管理器的入口点

glyph函数按钮上的图象

halt停止程序的执行并返回到操作系统

hi返回参数的高地址位

high返回参数的上限值

hint属性提示信息

int返回参数的整数部分

include添加元素到集合中

insert在字符串中插入子串

inttohex将整型数转换为十六进制数

inttostr将整型数转换为字符串

ioresult返回最新的i/o操作完成状态

isvalidident测试字符串是否为有效的标识符

items属性默认显示的节点

kind属性摆放样式

largechange属性最大改变值

layout属性图象布局

length函数返回字符串的动态长度

lines属性缺省显示内容

ln函数自然对数函数

lo函数返回参数的低地址位

loadstr函数

从应用程序的可执行文件中装载字符资源

lowercase函数将给定的字符串变为小写

low函数返回参数的下限值

max属性最大值

maxlength属性最大长度

min属性最小值

mkdir命令建立一子目录

move函数从源到目标复制字节

multiselect属性允许同时选择几个数据项

name属性控件的名字

new函数

建立新的动态变量并设置一指针变量指向它

newstr函数在堆栈上分配新的字符串

now函数返回当前的日期和时间

odd测试参数是否为奇数

onactivate事件焦点移到窗体上时触发

onclick事件单击窗体空白区域触发

ondblclick事件双击窗体空白区域触发

onclosequery事件使用者试图关闭窗体触发

onclose事件窗体关闭后才触发

oncreate事件窗体第一次创建时触发

ondeactivate事件用户切换到另一应用程序触发

ondragdrop事件鼠标拖放操作结束时触发

ondragover事件有其他控件从他上面移过触发

onmousedown事件按下鼠标键时触发

onmouseup事件释放鼠标键时触发

onmousemove事件移动鼠标时触发

onhide事件隐藏窗体时触发

onkeydown事件按下键盘某键时触发

onkeypress事件按下键盘上的单个字符键时触发

onkeyup事件释放键盘上的某键时触发

onpaint事件窗体上有新部分暴露出来触发

onresize事件重新调整窗体大小触发

onshow事件在窗体实际显示之前瞬间触发

ord返回序数类的序数

outlinestyle属性类型

outofmemoryerror引起outofmemory意外

pageindex 属性页索引

pages属性页

paramcount函数

返回在命令行上传递给程序的参数数量

paramstr函数返回指定的命令行参数

pen属性画刷设置

pi函数返回圆周率pi

picture属性显示图象

pictureclosed属性设置closed位图

pictureleaf属性设置leaf位图

pictureminus属性设置minus位图

pictureopen属性设置open位图

pictureplus属性设置plus位图

pos函数在字符串中搜索子串

pred函数返回先前的参数

random函数返回一随机函数

randomize函数

用一随机数初始化内置的随机数生成器

read函数

对有格式的文件,读一文件组件到变量中;对文本

文件,读一个或多个值到一个或多个变量中

readln函数执行read过程,然后跳到文件下一行

readonly属性只读属性

reallocmem函数分配一动态变量

rename函数重命名外部文件

renamefile函数对文件重命名

reset函数打开已有的文件

rewrite函数建立并打开一新的文件

rmdir函数删除空的子目录

round函数将实数值舍入为整型值

runerror函数停止程序的执行

scrollbars属性滚动条状态

seek函数将文件的当前指针移动到指定的组件上

seekeof函数返回文件的文件结束状态

seekeoln函数返回文件的行结束状态

selectedcolor属性选中颜色

setmemorymanager函数设置内存管理器的入口点

settextbuf函数给文本文件指定i/o缓冲区

shape属性显示的形状

showexception函数显示意外消息与地址

sin函数正弦函数

sizeof函数返回参数所占的字节数

smallchange属性最小改变值

sorted属性是否允许排序

sqr函数平方函数

sqrt函数平方根函数

startmargin属性开始边缘

state属性控件当前状态

str函数将数值转换为字符串

stralloc函数

给以null结束的字符串分配最大长度-1的缓冲区

strbufsize函数

返回存储在由stralloc分配的字符缓冲区的最大字

符数

strcat函数

将一字符串附加到另一字符串尾并返回合并的字

符串

strcomp函数比较两个字符串

strcopy函数将一个字符串复制到另一个字符串中

strdispose函数释放堆栈上的字符串

strecopy函数

将一字符串复制到另一个字符串并返回结果字符

串尾部的指针

strend函数返回指向字符串尾部的指针

stretch属性自动适应控件的大小

strfmt函数格式化一系列的参数

stricomp函数比较两个字符串(不区分大小写)

stringtowidechar函数

将ansi字符串转换为unicode字符串

strlcat函数

将一字符串中的字符附加到另一字符串尾并返回

合并的字符串

strlcomp函数以最大长度比较两个字符串

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+enter才产生回车符

write命令

对有格式的文件,写一变量到文件组件中;对文本

文件,写一个或多个值到文件中

writeln命令

执行write过程,然后输出一行结束标志

widecharlentostring函数

将ansi字符串转换为unicode字符串

widecharlentostrwar函数

将unicode字符串转换为ansi字符串变量

widechartostring函数

将unicode字符串转换为ansi字符串

widechartostrvar函数

将unicode字符串转换为ansi字符串变量

外部文件链接函数

名字

类型

功能

assign

过程

将一个外部文件赋予文件变量

close

过程

关闭一个一打开的文件

eof

函数

确认文件是否结束

erase

过程

删除一个外部文件

rename

过程

重命名一个外部文件

reset

过程

打开一个已存在的文件

rewrite

过程

建立一个新文件并打开

名字

类型

功能

append

过程

打开已存在的文件从尾部添加

eoln

函数

确认文件是否行结束

read

过程

从文本文件读取变量

readln

过程

从文本文件读取变量并换行

write

过程

从文本文件写入变量

writeln

过程

从文本文件写入变量并换行

名字

类型

功能

read

过程

从类型文件读取变量

write

过程

从类型文件写入变量

filepos

函数

返回指定文件位置

filesize

函数

返回文件长度

seek

过程

将指针移动到指定位置

表达式

PASCAL中表达式是由常量、变量、函数、运算符及圆括号(只能用圆括号)连接起来的算式。与普通的算术运算式不同,表达式书写必须符合PASCAL语言规定。语法图如下:

例如:数学式子:的PASCAL表达式为:abs(a-sqtr(c+1))/(a*b)+d

PASCAL中运算的优先顺序如下:

(1)括号内表达式优先处理

(2)函数

(3)NOT

(4)AND,*,/,DIV,MOD

(5)+,-,OR

(6)<,<=,=,>,>=,<>,IN

注:同一个子表达式中,同一优先级的运算按从左到右的次序进行。而且不能用中括号和大括号,只能用圆括号。

PASCAL结构

一个较完整和PASCAL程序结构如下:

报错号

free pascal报错号对应翻译

运行错误

1.无效DoS功能号

2.文件末找到

3.路径未找到

4.打开文件过多

5.禁止文件存取

6.无效文件句柄

12.无效文件存取代码

15.无效驱动器号

16.不能删除当前目录

17.不能跨驱动器改文件名

100.Disk read error磁盘读错误

101.Disk write error磁盘写错误

102.文件变量末赋值

103.File not open文件未打开

104.File not open for input文件未用输入方式打开

105.File not open for output文件末用输出方式打开

106.Invalid numeric format无效数字格式

150.磁盘写保护

151.未知单元

152.驱动器未准备好

153.未知命令

154.数据CRC校验错

155.驱动器请求的结构长度错

156.磁盘定位错

157.未知媒介类型

158.扇区末找到

159.打印机缺纸

160.设备写失败

161.设备读失败

162.硬件故障

200.Division by zero被零除

201.Range check error数据范围检查错

202.Stack overflow error堆栈溢出错

203.Heap overflow error堆溢出错

204.Invalid pointer operation无效指针操作

205.Floating point overflow浮点上溢出

206.Floating point underflow浮点下溢出

207.Invalid floating point operation无效浮点运算

208.未安装复盖管理程序

209.复盖文件读错

210.Object not initialized对象未初始化

211.Call to abstract method调用抽象方法

212.Stream registration error流登计错

213.Collection index out of range集合下标越界

214.Collection overflow error集合溢出

215.Arithmetic overflow error算术上溢错误

216.General protection fault存取非法

217.控制-C

218.授权指令

219.无效的TYPECAST

220.无效的变体TYPECAST

221.无效的变体操作

222.没有变体方法调用DISPATCHER

223.不能建立变体数组

224.变体不包含数组

225.变体数组边界错误

226.TLS初始化错误

编译错误

l内存溢出

2缺标识符

3标识符未定义

4标识符重定义

5语法错误

6实型常量错

7整型常量错

8字符串常量跨行

9文件嵌套过多

10非正常文件结束

11行过长

12缺类型标识符

13打开文件过多

14无效文件名

15文件未找到

16磁盘满

17无效编译指示

18文件过多

19指针定义中未定义类型

20缺变量标识符

21类型错误

22结构过长

24文件分量不能为文件

25无效字符串长度

26类型不匹配

27无效子界基类型

28下界大于上界

29缺有序类型

30缺整型常数

31缺常数

32缺整型或实型常数

33缺指针类型标识符

34无效的函数结果类型

35缺标号标识符

36缺BEGIN

37缺END

38缺整型表达式

39缺有序表达式

40缺布尔表达式

41操作数类型与操作符不匹配

42表达式错

43非法赋值

44缺字段标识符

45目标文件过长

46未定义外部标识符

47无效*.OBJ文件记录

48代码段过长

49数据段过长

50缺DO

51无效PUBLIC定义

52无效EXTRN定义

53EXTRN定义过多

54缺0F

55缺INTERFACE

56无效重定位引用

57缺THEN

58缺T0或DOWNTO

59未定义的向前引用

60过程过多

61无效类型转换

62被零除D

63无效文件类型

64不能读写该类型的变量

65缺指针变量

66缺字符串变量

67缺字符串表达式

68单元循环引用

69单元名不匹配

70单元版本不匹配

71单元重名

72单元文件格式错误

73缺IMPLEMENTATl0N

74常数与CASE类型不相匹配

75缺记录变量

76常数越界

77缺文件变量

78缺指针变量

79缺整型或实型表达式

80标号不在当前块中

81标号已定义

82标号未定义

83无效参数

84缺UNIT

85缺“;”

86缺“:”

87缺“,”

88缺“(”

89缺“)”

90缺“=”

91缺“:=”

92缺“[”或“(.”

93缺“]”或“.)”

94缺“.”

96变量过多

97无效FOR控制变量

98缺整型变量

99此处不允许用文件和

100字符串长度不匹配

101无效字顺序

102缺字符串常数

103缺整型或实型变量

104缺有序变量

105INLINE错

106缺字符表达式

107重定位项过多

112CASE常量越界

113语句错

114不能调用中断过程

116必须在8087方式下编译

117未找到目标地址

118此处不允许包含文件

120缺NIL

121无效限定符

122无效变量引用

123符号过多

124语句部分过长

126文件必须为变量参数

127条件符号过多

128条件指令错位

130初始条件定义错

13l过程和函数头与前面定义的不匹酉

132严重磁盘错误

133不能计算该表达式

134表达式错误结束

l35无效格式说明符

136无效间接引用

137此处不允许结构变量

138无SYSTEM单元不能计算

l39不能存取该符号

140无效浮点运算

141不能将复盖编译至内存

142缺过程和函数变量

143无效过程或函数引用

144不能复盖该单元

147缺对象类型

148不允许局部对象类型

149缺VIRTUAL

150缺方法标识符

151不允许虚拟构造方法

152缺构造方法标识符

153缺释放方法标识符

154FAIL只允许在构造方法内使用

155无效的操作符和操作数组合

156缺内存引用

l57不能加减可重定位符号

158无效寄存器组合

159未激活286/287指令

160无效符号引用

161代码生成错

162缺ASM

166缺过程或函数标识符

167不能输出该符号

168外部文件名重复

169可执行文件头太长

170段太多

注意事项

在NOIP比赛中使用Free Pascal的注意事项

1.对于文件名,程序中用到的文件名必须和系统中的文件名完全一致。

由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。即:比赛中涉及的所有文件名(包括源程序名、输入文件名、输出文件名、答案文件名),都必须严格按照题目要求命名,严格区分大小写。

2.在NOIP比赛中,程序中不得使用题目规定外的其他任何库(unit),一般在试机时确认;

3.在NOIP比赛中,源代码中不得使用编译选项(开关);

乱码解决

如果打开Free Pascal时显示的是一堆乱码,这是因为错误地使用中文编码所导致的。

解决方案如下:

1.在Free Pascal图标上单击右键,弹出快捷菜单,选择“属性”;

2.弹出“Free Pascal IDE”属性对话框,单击“选项”选项卡;

3.把“默认代码页”改为“437(OEM-美国)”,单击“应用”,关闭对话框;

4.重启Free Pascal。

相关词条

相关搜索

其它词条