简介
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字符串变量
外部文件链接函数
表达式
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。