ee Pascal
Free Pascal目录[隐藏]
Free Pascal 简介
Free Pascal 与 Turbo Pascal 的区别
Free Pascal相对于Turbo Pascal的扩充
PASCAL程序设计介绍PASCAL语言介绍
PASCAL程序的结构初步认识
集成环境、编辑程序、保存程序
运行程序、观察运行结果、跟踪调试程序
保留字
标识符
注意程序的书写格式
PASCAL语言使用的保留字
PASCAL语言中的标识符
Turbo Pascal中标准数据类型介绍
运算符、标准函数及标准过程
标准函数和过程
表达式
一个较完全的PASCAL程序结构
free pascal官方网站及下载地址
free pascal报错号对应翻译 Free Pascal 简介
Free Pascal 与 Turbo Pascal 的区别
Free Pascal相对于Turbo Pascal的扩充
PASCAL程序设计介绍 PASCAL语言介绍
PASCAL程序的结构初步认识
集成环境、编辑程序、保存程序
运行程序、观察运行结果、跟踪调试程序
保留字
标识符
注意程序的书写格式
PASCAL语言使用的保留字
PASCAL语言中的标识符
Turbo Pascal中标准数据类型介绍
运算符、标准函数及标准过程
标准函数和过程
表达式
一个较完全的PASCAL程序结构
free pascal官方网站及下载地址
free pascal报错号对应翻译
[编辑本段]Free Pascal 简介
Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。
此前被广泛使用的PASCAL编译器普遍为Turbo Pascal & Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。
[编辑本段]Free Pascal 与 Turbo Pascal 的区别
虽然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中添加了函数,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理论上可以使用256m的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制)。这是Free Pascal由于32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。
[编辑本段]Free Pascal相对于Turbo Pascal的扩充
1. 函数可以返回复杂的类型,比如记录和数组。
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;
{ this is the recursive call }
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容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。
6. Free Pascal在windows 95及其以上的windows版本上支持长文件名。对于文件名,由于windows系统对大小写不敏感,因此在程序中,文件名的大小写是无关的。但是对于其它大小写敏感的系统,比如linux,程序中用到的文件名必须和系统中的文件名完全一致。但是由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。
[编辑本段]PASCAL程序设计介绍
PASCAL语言介绍
PASCAL语言是由瑞士的沃斯(N.Wirth)教授于1971年提出来的。它的命名是为了纪念法国数学家Pascal。它是世界上第一个结构化的高级程序设计语言。结构化程序设计主要由三种基本结构(顺序结构、选择结构、循环结构)组成。后来有人把函数和过程作为第四种基本结构。这四种结构对外看都只有一个入口和一个出口,结构清晰,避免了由GOTO语句所引起的混乱。另外在程序设计方法方面,主张采用自顶向下,逐步求精的方法。即将一个大的复杂问题,划分成若干少的易解决的问题。每个小问题,又可划分成一些更小的更易解决的问题。这样,只要把每个小问题都解决了,整个大问题也就解决了。这种方法也为多个人合作编程提供方便。
由于PASCAL语言具有良好的结构程序设计特性,适合于教学,特别是适合于培养学生掌握自顶向下逐步求精的结构化程序设计思想和方法,并养成良好的程序设计风格和习惯,因此,国内外许多大学都将PASCAL作为一门程序设计教学语言。
PASCAL程序的结构初步认识
例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:\tp7\turbo.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.00 L= 62.80 S= 314.00
如果有错,请找出错误并修改它,重复第1步,再执行直到有正确输出结果。
3.重复第1步,再次运行程序,输入另一个园的半径值5,观察输出结果是否也正确,从而确定该程序能否正确解决不同半径的园的周长和面积的求解问题。
程序调试中我们常用的操作还有:
双线框的窗口称为“当前活动窗口”。
F1 键: 得到光标所在位置的项目的帮助信息。
F4 键: 要求运行到当前光标处暂停。
F5 键: 放大或缩小当前活动窗口。
F6 键: 切换其它窗口为当前活动窗口。
F7 键: 单步执行程序并能跟踪进入子程序。
F8 键: 单步执行程序但不能跟踪进入其子程序。
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指出程序执行代码结束。
标识符
2. 除了保留字外,还用到标识符,用于表示常量、变量、类型、文件、函数、过程或程序的名字。标识符是以字母开头的字母、数字组合,标识符又分为标准标识符和用户自定义标识符。如例1-1中,用户自定义标识符有:程序名为circle,常量pi,实数型变量r、l和s,它们由程序设计者定义的;标准标识符有:实数标准类型名real,读数标准过程名readln,输出标准过程名write和writeln ,标准输入文件input,标准输出文件output。在Pascal编译系统中,标准标识符也具有特殊的含义,我们定义标识符时也应尽量避免与标准标识符取相同名字。PASCAL中的保留字及标识符是不区分大小写的。
保留字 program , const , var , begin ,end
标识符 标准标识符 Real,readln,write,writeln,input,output
用户自定义标识符 circle , pi , r , l , s
注意程序的书写格式
程序名说明: program <用户自定义的程序名>(input,output);其中圆括号的内容称为程序的参数。程序参数指明程序与外部联系的文件名。input是标准输入文件,例如键盘;output是标准输出文件,例如屏幕、打印机等。对于标准设备常可省略(input,output)的说明,简写为:program <用户自定义的程序名>;如例1-1可省略简写为:“ program circle; ”
常量定义:Const
<常量标识符>=<常量>;
......
<常量标识符>=<常量>;
变量定义:var
<变量表> :<类型>;
......
<变量表> :<类型>;
主程序语句部分: begin
<语句>;
......
<语句>;
end .
赋值语句: <变量名标识符>:=<表达式>; 其意义是把右边表达式的运算结果送到左边变量名所对应的数据区中。
读数据标准过程(又称读语句):read(变量表),园括符内必须是已定义过的变量标识符,有多个时变量时可用逗号分隔构成变量表。
输出数据标准过程(又称写语句):write(数据项表)或writeln(数据项表),有多个数据项时要用逗号分隔。数据项可以是字符串(如:'L=',' S=')、变量(如:l、s),如:s:8:2,表示要求输出时数据保留2位小数位,总长度包括小数点为8位;write与writeln区别是writeln完成所有输出后自动换行。
1.2 PASCAL基本组成
1.2.1 PASCAL语言使用的几类基本符号
(1) 大小写英文字母:A,B,...Z,a,b,..z
(2) 数字:0,1,2,3,4,5,6,7,8,9
(3) 其它符号:+ , - , * , / , = , < > , >= , <= , < , > , ( , ) ,[ ,] , := , ' , , . : , .. , ∧ 等。
注意:PASCAL的标识符及保留字定义只能采用上述基本符号,其它特殊符号。例如:αβε∮∞≈,汉字等只能在字符型常量中使用。
PASCAL语言使用的保留字
在PASCAL语言中,有些词具有特定的含义。用户必须了解其含义,以便正确的使用,否则会造成错误,这些具有特定含义的词被称为保留字,保留字不能作其它用途,如作变量名等。在Turbo pascal7.0中,保留字默认用白色显示,保留字如下:PROGRAM ,CONST,VAR,BEGIN,END,AND,ARRAY,CASE,DIV,DO,DOWNTO,ELSE,FILE,FOR,FUNCTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEART,SET,THEN,TO,TYPE,UNTIL,WHILE,WITH等。
1.2.3 语法图说明
语法是语言的结构规则,语言的所有成分都必须符合语法的要求,如果语言的结构规则描述不严密,就会产生歧义。我们在下面说明语法中,采用语法图进行描述,使说明更加简洁。语法图常用的4种图形元素的意义如下:
PASCAL语言中的标识符
在PASCAL中标识符分标准标识符和用户自定义标识符,它可作为常量、变量、类型、过程、函数和文件的名字。标识符是以字母开头的字母数字序列,构成语法如下图示:
在PASCAL中有些标识符已定义了特定的含义,称为标准标识符,它们是:
标准常量:false,true,maxint等;
标准类型:integer,real,char,boolean,string,text等;
标准文件:input,output等;
标准函数:abs,chr,cos,eof,eoln,round等;
标准过程:read,readln,write,writeln,new,reset等;
指出下面用户自定义标识符为什么会错: begin,1student,student 1,
1.2.5 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;
3.变量说明
PASCAL程序中数值可以改变的量称为变量,由于变量可以取不同的值,因此变量必须通过标识符来代表。程序中出现的每个变量都必须在程序的变量说明部分进行类型说明.变量说明语法图如下:
如: var
x,y,z:real;
i,j,k:integer;
ch:char;
t,f:boolean;
name:string;
Turbo Pascal中标准数据类型介绍
数据的类型确定了该类数据的表示形式和取值范围,而且确定了其所能参加的各种运算。PASCAL语言提供了丰富的数据类型,如下图1.1所示。这里我们先介绍标准类型,其它类型以后用到时才介绍。
1.整型
一个数存放在计算机中都要占用固定的存储空间,这决定了在计算机中的每种数据类型定义的数的大小是有限的,这点与数学中的定义不同,为了节省空间和提高处理速度,我们通常要根椐处理的数的最大可能决定选用不同的数据类型。Byte为信息存储单位。
整数的可选类型如下:
名称 类型标识符 数据表示范围 占用存储空间
整型 integer -32768 ~ +32767 2byte
短整型 shortint -128 ~ +127 1byte
长整型 longint -2147483648 ~ +2147483647 4byte
字节型 byte 0 ~ 255 1byte
字型 word 0 ~ 65535 2byte
例:var
i:byte;
当i值取256时出错,因为byte类型只能接受0~255之间的数。可定义大些,如word型
提问:若解题时i的最大可能取值为40000,问i变量应定义为那种数据类型较合适?
2.实型:实型有4种类型,如下表示
实型名称 类型标识符 数据表示范围 有效位 占用存储空间
实型 real -2.9*10^39~+1.7*10^38 11~12 6byte
单精度型 single -1.5*10^45~+3.4*10^38 7~8 4byte
双精度型 double -5.0*10^-324~+1.7*10^308 15~16 8byte
扩展型 extended -1.9*10^-4932~+1.1*10^4932 19~20 10byte
装配十进制型 comp -2^63+1 ~ +2^63 –1 19~20 8byte
注:在Turbo Pascal中,single,double,extended,comp需要计算机的数学协处理器支持,即要在程序首行加入编译开关{$N+},若计算机为486SX以下,没有协处理器,可采用仿真办法,即在程序首行加入编译开关{$N+,$E+}
例:var
x:real;
当x的数学值为2时,在计算机中的值为:2.0000000000E+00
当x的数学值为-25时,在计算机中的值为:-2.5000000000E+01
当x的数学值为0.05时,在计算机中的值为:5.0000000000E-02
3. 字符型和字符串型
名称 类型标识符 说明
字符型 char 单个字符用一对单引号括起的数据。
字符串型 string 一个或一串字符用一对单引号括起来的数据。
例: var
ox:char;
note:string;
name:string[5];
4. 布尔型
名称 类型标识符 说明
布尔型 boolean 值只有true和false,分别表示真和假或对与错。
运算符、标准函数及标准过程
1.运算符
在PASCAL中提供的运算符有算术运算符、关系运算符和逻辑运算符等。不同的运算符都规定了其运算对象的数据类型和运算结果的类型。如下表:
运算符 运算类型 运算对象及类型 结果类型
+、-、* 算术运算 整型或实型 整型或实型
/ 算术运算 整型或实型 实型
div、mod 算术运算 整型 整型
not、and、or 逻辑运算 布尔型 布尔型
< 、<= 、= 、> 、>= 、<> 关系运算 标准类型 布尔型
(1)算术运算符+ 、- 、 * 、/ 说明
在PASCAL中乘用“*”表示,除用“/”表示。通过下面例子加深理解:
运算对象及式子 运算结果 结果类型
1+5 6 整型
1.0+5 6.0000000000E+00 实型
6/2 3.0000000000E+00 实型
2*6 12 整型
2.0*6 1.2000000000E+01 实型
(2) 算术运算符div 、mod 说明
div表示求两个整数除的商,mod表示求两上整数除的余数。
运算对象及式子 运算结果 结果类型及说明
7 div 2 3 整型
7 mod 2 1 整型
7.0 div 2 出错 运算对象不允许实数
(4) 关系运算符< 、<= 、= 、> 、>= 、<>说明
运算对象及式子 运算结果 结果类型及说明
7 >5 true 布尔型
7<>7 false 布尔型
7=7 true 布尔型
7>=7 true 布尔型
7.5>7 true 布尔型
'B'>'A' true 布尔型
'b'>'B' true 布尔型
'abd'>'abc' true 布尔型
说明:字符常量比较大小是按字符对应的ASCII码值大小比较大小。如:字符'A'的ASCII码为65,'B'的ASCII码为66 ,故'B'>'A',在ASCII码表中,小写字母的ASCII值又大过大写字母的ASCII值,故'b'>'B'。字符串的比较是逐个比,直到不同为止,故有'abd'>'abc' 。
(5) 逻辑运算符not、and、or
运算符 名称 意义 举例 结果
Not 非运算 相当于“求反” not(4>3) F not true false
And 与运算 相当于“而且” (4>3) and (2>3) F true and false false
Or 或运算 相当于“或者” (4>3) or (2>3) F true or false true
下表说明逻辑运算的运算结果
A B not A A and B A or B
true true false true true
true false false false true
false true true false true
false false true false false
(6) 字符串连接运算符 +
如:'abc'+'def' 结果为:'abcdef' 。
标准函数和过程
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)=-3 round(-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),自然对数函等等,请需要时从Turbo Pascal中的英文帮助中查阅。
注:在PASCAL中没有定义幂运算函数xn 。但可采用下面式子计算:exp(n*ln(x)) 。
(2) 算术标准过程
[1] dec(x) 相当于 x:=x-1
[2] dec(x,n) 相当于 x:=x-n
[3] inc(x) 相当于 x:=x+1
[4] inc(x,n) 相当于 x:=x+n
(3) 字符处理标准函数
为了说明方便,设s,str,str1,str2为字符串型(string),ch为字符型(char)变量。
[1] concat(str1,str2)
作用:把两字符串连接成新字符中串。
例:concat('abc','def') 结果:'abcdef'
[2] copy(str,a,b)
作用:从字符串str的左边第a(整数)位开始截取b(整数)位字符串。
例:copy('abcdef',2,4) 结果:'bcde'
[3] length(str)
作用:求字符串str的长度。
例: length('abcdef') 结果:6 ;length('') 结果:0 ;length(' ') 结果:1
[4] chr(x)
作用:求x(x为整数1--255)表示的ASCII代码对应的字符
例:chr(65) 结果:'A' ;chr(66) 结果:'B'
[5] 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
[6] pos(str1,str2)
作用:求字符串str1在字符串str2中的开始位置,结果为整数。
例:pos('abc','efabcdg') 结果:3 ;pos('abc','efabfgh') 结果:0
[7] upcase(ch)
作用:把ch对应的字符转为大写字母。
例:upcase('a') 结果:'A'
(4) 字符串处理标准过程
[1] delete(str,a,b)
作用:从字符串str的左边第a(整数)个字符开始向右连续删除b(整数)位字符,并把剩余字符串赋给str
例:str:='abcdefgh';delete(str,4,3); 最后str结果为:'abcgh'
str:='abcdef';delete(str,8,3); 最后str结果为:'abcdef'
[2] insert(str1,str,a)
作用:把字符串str1插入字符串str中由第a(整数)位字符之前,并把新字符串赋给字符串变量str。
例:str:='efghy';insert('abc',str,3);最后str结果为:'efabcghy'
str:='efghy';insert('abc',str,8);最后str结果为:'efghyabc'
[3] 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'
[4] val(str,a,code)
作用:将数字字符串转换成数字,并将该数字存入实型或整型变量a中,code为返回的错误代码,code=0 表示转换成功,无错误。
例:val('12',a,code) 若a为实型,a的结果为:1.2000000000E+01;若a为整型,a的结果为:12
(5) 布尔型标准函数
[1] odd(x)
作用:判断自变量x的奇偶特性,其中x为整型。奇数为true,偶数为false。
例:odd(13) 结果:true ;odd(10)结果:false 。
[2] eof(x)
作用:判断文件x是否处于结束状态。其中x为文件型变量。文件结束为true,否则为false 。
[3] eoln(x)
作用:判断文件x是否处于行结束状态。其中x为文件型变量。行结束为true,否则为false 。
(6) 顺序类型函数
[1] pred(x)
作用:求x的前一个量值,其中x为字符型、布尔型、整型、枚举型、子界型等有序类型。
例:pred(6)=5 ;pred('b')='a' ;pred(true)=false ; pred(false)=true
[2] 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单元中。下面补充一些常用标准函数和过程。
[1] clrscr 过程 在crt单元
格式:clrscr 作用:清文本屏幕,并将光标移到屏幕左上角。
[2] delay 过程 在crt单元
格式:delay(ms) 作用:延迟ms毫秒数,其中ms为word型。
[2] gotoxy 过程 在crt单元
格式:gotoxy(x,y) 作用:称光标到y行x列上,其中x,y为byte型。
[3] sound 过程 在crt单元
格式:sound(hz) 作用:按hz(word型)指定的频率发音,调用该过程后会一直响,直到调用nosound过程将其关闭。
[4] nosound 过程 在crt单元
格式:nosound 作用:关闭扬声器。
[5] readkey 函数 在crt单元
格式:readkey 作用:从键盘读入一个字符,函数类型结果为char。
[6] exit 过程 在system单元
格式:exit 作用:退出当前过程或模块。
[7] halt 过程 在system单元
格式:halt 作用:停止程序执行。
[8] 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)。
[9] 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的帮助文件。
[10] read或readln过程 在system单元
格式:read(f,v1,v2,...,vn)或readln(f,v1,v2,..vn) 其中f为文件型变量,标准输入文件input(如键盘输入)时可省,v1,v2,...,vn为变量名表。
作用:从标准输入文件(如键盘输入)或磁盘文件中读入数据到变量中,多个变量时,要用逗号分隔。 read与readln的区别是:readln会掉丢当前输入行中多余的数据。而read不会,多余的数据可留待下一个read或readln使用。
[11] write或writeln过程 在system单元
格式:write(f,v1,v2,...,vn)或writeln(f,v1,v2,...,vn) 其中f为文件型变量,标准输出文件OUTPUT(如显示器)可省,v1,v2,...,vn为表达式,且每个表达式的必须有唯一确定值,类型为标准类型。write与writeln区别是:writeln输完所有数据项后,光标自动移动到下一行,即自动换行。
表达式
PASCAL中表达式是由常量、变量、函数、运算符及圆括号(只能用圆括号)连接起来的算式。与普通的算术运算式不同,表达式书写必须符合PASCAL语言规定。语法图如下:
例如:数学式子: 的PASCAL表达式为:abs(a-sqtr(c+1))/(a*b)+d
PASCAL中运算的优先顺序如下:
(1) 括号内表达式优先处理
(2) 函数
(3) NOT
(4) AND,*,/,DIV,MOD
(5) +,-,OR
(6) <,<=,=,>,>=,<>,IN
注:同一个子表达式中,同一优先级的运算按从左到右的次序进行。而且不能用中括号和大括号,只能用圆括号。
例如: 下面表达式中,假设x:=2;y:=2:i:=1;请读者分析其优先顺序,为什么?
( x = sqr(2)) or not(y>0) and (( x-y ) /i <> 0 )
一个较完全的PASCAL程序结构
一个较完整和PASC程序结构如下:
program 程序名(程序参数表)
{$n+.....}(编译开关)
uses (使用单元)
label
标号说明;
const
常量说明;
type
类型说明;
var
变量说明;
function
函数说明;
procedure
过程说明;
begin
语句;
...
语句;
end .
Free Pascal扩充了数值位数
[编辑本段]free pascal官方网站及下载地址
free pascal官方网站:www.freepascal.org
free pascal官方ftp下载网站:ftp://ftp.freepascal.org/pub/fpc/dist
free pascal2.0.4官方ftp下载地址:ftp://ftp.freepascal.org/pub/fpc/dist/i386-win32-2.0.4/fpc-2.0.4.i386-win32.exe
free pascal2.2.0官方ftp下载地址:ftp://ftp.freepascal.org/pub/fpc/dist/i386-win32-2.2.0/fpc-2.2.0.i386-win32.exe
[编辑本段]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
Free Pascal 简介
Free Pascal 与 Turbo Pascal 的区别
Free Pascal相对于Turbo Pascal的扩充
PASCAL程序设计介绍PASCAL语言介绍
PASCAL程序的结构初步认识
集成环境、编辑程序、保存程序
运行程序、观察运行结果、跟踪调试程序
保留字
标识符
注意程序的书写格式
PASCAL语言使用的保留字
PASCAL语言中的标识符
Turbo Pascal中标准数据类型介绍
运算符、标准函数及标准过程
标准函数和过程
表达式
一个较完全的PASCAL程序结构
free pascal官方网站及下载地址
free pascal报错号对应翻译 Free Pascal 简介
Free Pascal 与 Turbo Pascal 的区别
Free Pascal相对于Turbo Pascal的扩充
PASCAL程序设计介绍 PASCAL语言介绍
PASCAL程序的结构初步认识
集成环境、编辑程序、保存程序
运行程序、观察运行结果、跟踪调试程序
保留字
标识符
注意程序的书写格式
PASCAL语言使用的保留字
PASCAL语言中的标识符
Turbo Pascal中标准数据类型介绍
运算符、标准函数及标准过程
标准函数和过程
表达式
一个较完全的PASCAL程序结构
free pascal官方网站及下载地址
free pascal报错号对应翻译
[编辑本段]Free Pascal 简介
Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。
此前被广泛使用的PASCAL编译器普遍为Turbo Pascal & Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。
[编辑本段]Free Pascal 与 Turbo Pascal 的区别
虽然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中添加了函数,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理论上可以使用256m的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制)。这是Free Pascal由于32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。
[编辑本段]Free Pascal相对于Turbo Pascal的扩充
1. 函数可以返回复杂的类型,比如记录和数组。
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;
{ this is the recursive call }
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容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。
6. Free Pascal在windows 95及其以上的windows版本上支持长文件名。对于文件名,由于windows系统对大小写不敏感,因此在程序中,文件名的大小写是无关的。但是对于其它大小写敏感的系统,比如linux,程序中用到的文件名必须和系统中的文件名完全一致。但是由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。
[编辑本段]PASCAL程序设计介绍
PASCAL语言介绍
PASCAL语言是由瑞士的沃斯(N.Wirth)教授于1971年提出来的。它的命名是为了纪念法国数学家Pascal。它是世界上第一个结构化的高级程序设计语言。结构化程序设计主要由三种基本结构(顺序结构、选择结构、循环结构)组成。后来有人把函数和过程作为第四种基本结构。这四种结构对外看都只有一个入口和一个出口,结构清晰,避免了由GOTO语句所引起的混乱。另外在程序设计方法方面,主张采用自顶向下,逐步求精的方法。即将一个大的复杂问题,划分成若干少的易解决的问题。每个小问题,又可划分成一些更小的更易解决的问题。这样,只要把每个小问题都解决了,整个大问题也就解决了。这种方法也为多个人合作编程提供方便。
由于PASCAL语言具有良好的结构程序设计特性,适合于教学,特别是适合于培养学生掌握自顶向下逐步求精的结构化程序设计思想和方法,并养成良好的程序设计风格和习惯,因此,国内外许多大学都将PASCAL作为一门程序设计教学语言。
PASCAL程序的结构初步认识
例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:\tp7\turbo.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.00 L= 62.80 S= 314.00
如果有错,请找出错误并修改它,重复第1步,再执行直到有正确输出结果。
3.重复第1步,再次运行程序,输入另一个园的半径值5,观察输出结果是否也正确,从而确定该程序能否正确解决不同半径的园的周长和面积的求解问题。
程序调试中我们常用的操作还有:
双线框的窗口称为“当前活动窗口”。
F1 键: 得到光标所在位置的项目的帮助信息。
F4 键: 要求运行到当前光标处暂停。
F5 键: 放大或缩小当前活动窗口。
F6 键: 切换其它窗口为当前活动窗口。
F7 键: 单步执行程序并能跟踪进入子程序。
F8 键: 单步执行程序但不能跟踪进入其子程序。
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指出程序执行代码结束。
标识符
2. 除了保留字外,还用到标识符,用于表示常量、变量、类型、文件、函数、过程或程序的名字。标识符是以字母开头的字母、数字组合,标识符又分为标准标识符和用户自定义标识符。如例1-1中,用户自定义标识符有:程序名为circle,常量pi,实数型变量r、l和s,它们由程序设计者定义的;标准标识符有:实数标准类型名real,读数标准过程名readln,输出标准过程名write和writeln ,标准输入文件input,标准输出文件output。在Pascal编译系统中,标准标识符也具有特殊的含义,我们定义标识符时也应尽量避免与标准标识符取相同名字。PASCAL中的保留字及标识符是不区分大小写的。
保留字 program , const , var , begin ,end
标识符 标准标识符 Real,readln,write,writeln,input,output
用户自定义标识符 circle , pi , r , l , s
注意程序的书写格式
程序名说明: program <用户自定义的程序名>(input,output);其中圆括号的内容称为程序的参数。程序参数指明程序与外部联系的文件名。input是标准输入文件,例如键盘;output是标准输出文件,例如屏幕、打印机等。对于标准设备常可省略(input,output)的说明,简写为:program <用户自定义的程序名>;如例1-1可省略简写为:“ program circle; ”
常量定义:Const
<常量标识符>=<常量>;
......
<常量标识符>=<常量>;
变量定义:var
<变量表> :<类型>;
......
<变量表> :<类型>;
主程序语句部分: begin
<语句>;
......
<语句>;
end .
赋值语句: <变量名标识符>:=<表达式>; 其意义是把右边表达式的运算结果送到左边变量名所对应的数据区中。
读数据标准过程(又称读语句):read(变量表),园括符内必须是已定义过的变量标识符,有多个时变量时可用逗号分隔构成变量表。
输出数据标准过程(又称写语句):write(数据项表)或writeln(数据项表),有多个数据项时要用逗号分隔。数据项可以是字符串(如:'L=',' S=')、变量(如:l、s),如:s:8:2,表示要求输出时数据保留2位小数位,总长度包括小数点为8位;write与writeln区别是writeln完成所有输出后自动换行。
1.2 PASCAL基本组成
1.2.1 PASCAL语言使用的几类基本符号
(1) 大小写英文字母:A,B,...Z,a,b,..z
(2) 数字:0,1,2,3,4,5,6,7,8,9
(3) 其它符号:+ , - , * , / , = , < > , >= , <= , < , > , ( , ) ,[ ,] , := , ' , , . : , .. , ∧ 等。
注意:PASCAL的标识符及保留字定义只能采用上述基本符号,其它特殊符号。例如:αβε∮∞≈,汉字等只能在字符型常量中使用。
PASCAL语言使用的保留字
在PASCAL语言中,有些词具有特定的含义。用户必须了解其含义,以便正确的使用,否则会造成错误,这些具有特定含义的词被称为保留字,保留字不能作其它用途,如作变量名等。在Turbo pascal7.0中,保留字默认用白色显示,保留字如下:PROGRAM ,CONST,VAR,BEGIN,END,AND,ARRAY,CASE,DIV,DO,DOWNTO,ELSE,FILE,FOR,FUNCTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEART,SET,THEN,TO,TYPE,UNTIL,WHILE,WITH等。
1.2.3 语法图说明
语法是语言的结构规则,语言的所有成分都必须符合语法的要求,如果语言的结构规则描述不严密,就会产生歧义。我们在下面说明语法中,采用语法图进行描述,使说明更加简洁。语法图常用的4种图形元素的意义如下:
PASCAL语言中的标识符
在PASCAL中标识符分标准标识符和用户自定义标识符,它可作为常量、变量、类型、过程、函数和文件的名字。标识符是以字母开头的字母数字序列,构成语法如下图示:
在PASCAL中有些标识符已定义了特定的含义,称为标准标识符,它们是:
标准常量:false,true,maxint等;
标准类型:integer,real,char,boolean,string,text等;
标准文件:input,output等;
标准函数:abs,chr,cos,eof,eoln,round等;
标准过程:read,readln,write,writeln,new,reset等;
指出下面用户自定义标识符为什么会错: begin,1student,student 1,
1.2.5 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;
3.变量说明
PASCAL程序中数值可以改变的量称为变量,由于变量可以取不同的值,因此变量必须通过标识符来代表。程序中出现的每个变量都必须在程序的变量说明部分进行类型说明.变量说明语法图如下:
如: var
x,y,z:real;
i,j,k:integer;
ch:char;
t,f:boolean;
name:string;
Turbo Pascal中标准数据类型介绍
数据的类型确定了该类数据的表示形式和取值范围,而且确定了其所能参加的各种运算。PASCAL语言提供了丰富的数据类型,如下图1.1所示。这里我们先介绍标准类型,其它类型以后用到时才介绍。
1.整型
一个数存放在计算机中都要占用固定的存储空间,这决定了在计算机中的每种数据类型定义的数的大小是有限的,这点与数学中的定义不同,为了节省空间和提高处理速度,我们通常要根椐处理的数的最大可能决定选用不同的数据类型。Byte为信息存储单位。
整数的可选类型如下:
名称 类型标识符 数据表示范围 占用存储空间
整型 integer -32768 ~ +32767 2byte
短整型 shortint -128 ~ +127 1byte
长整型 longint -2147483648 ~ +2147483647 4byte
字节型 byte 0 ~ 255 1byte
字型 word 0 ~ 65535 2byte
例:var
i:byte;
当i值取256时出错,因为byte类型只能接受0~255之间的数。可定义大些,如word型
提问:若解题时i的最大可能取值为40000,问i变量应定义为那种数据类型较合适?
2.实型:实型有4种类型,如下表示
实型名称 类型标识符 数据表示范围 有效位 占用存储空间
实型 real -2.9*10^39~+1.7*10^38 11~12 6byte
单精度型 single -1.5*10^45~+3.4*10^38 7~8 4byte
双精度型 double -5.0*10^-324~+1.7*10^308 15~16 8byte
扩展型 extended -1.9*10^-4932~+1.1*10^4932 19~20 10byte
装配十进制型 comp -2^63+1 ~ +2^63 –1 19~20 8byte
注:在Turbo Pascal中,single,double,extended,comp需要计算机的数学协处理器支持,即要在程序首行加入编译开关{$N+},若计算机为486SX以下,没有协处理器,可采用仿真办法,即在程序首行加入编译开关{$N+,$E+}
例:var
x:real;
当x的数学值为2时,在计算机中的值为:2.0000000000E+00
当x的数学值为-25时,在计算机中的值为:-2.5000000000E+01
当x的数学值为0.05时,在计算机中的值为:5.0000000000E-02
3. 字符型和字符串型
名称 类型标识符 说明
字符型 char 单个字符用一对单引号括起的数据。
字符串型 string 一个或一串字符用一对单引号括起来的数据。
例: var
ox:char;
note:string;
name:string[5];
4. 布尔型
名称 类型标识符 说明
布尔型 boolean 值只有true和false,分别表示真和假或对与错。
运算符、标准函数及标准过程
1.运算符
在PASCAL中提供的运算符有算术运算符、关系运算符和逻辑运算符等。不同的运算符都规定了其运算对象的数据类型和运算结果的类型。如下表:
运算符 运算类型 运算对象及类型 结果类型
+、-、* 算术运算 整型或实型 整型或实型
/ 算术运算 整型或实型 实型
div、mod 算术运算 整型 整型
not、and、or 逻辑运算 布尔型 布尔型
< 、<= 、= 、> 、>= 、<> 关系运算 标准类型 布尔型
(1)算术运算符+ 、- 、 * 、/ 说明
在PASCAL中乘用“*”表示,除用“/”表示。通过下面例子加深理解:
运算对象及式子 运算结果 结果类型
1+5 6 整型
1.0+5 6.0000000000E+00 实型
6/2 3.0000000000E+00 实型
2*6 12 整型
2.0*6 1.2000000000E+01 实型
(2) 算术运算符div 、mod 说明
div表示求两个整数除的商,mod表示求两上整数除的余数。
运算对象及式子 运算结果 结果类型及说明
7 div 2 3 整型
7 mod 2 1 整型
7.0 div 2 出错 运算对象不允许实数
(4) 关系运算符< 、<= 、= 、> 、>= 、<>说明
运算对象及式子 运算结果 结果类型及说明
7 >5 true 布尔型
7<>7 false 布尔型
7=7 true 布尔型
7>=7 true 布尔型
7.5>7 true 布尔型
'B'>'A' true 布尔型
'b'>'B' true 布尔型
'abd'>'abc' true 布尔型
说明:字符常量比较大小是按字符对应的ASCII码值大小比较大小。如:字符'A'的ASCII码为65,'B'的ASCII码为66 ,故'B'>'A',在ASCII码表中,小写字母的ASCII值又大过大写字母的ASCII值,故'b'>'B'。字符串的比较是逐个比,直到不同为止,故有'abd'>'abc' 。
(5) 逻辑运算符not、and、or
运算符 名称 意义 举例 结果
Not 非运算 相当于“求反” not(4>3) F not true false
And 与运算 相当于“而且” (4>3) and (2>3) F true and false false
Or 或运算 相当于“或者” (4>3) or (2>3) F true or false true
下表说明逻辑运算的运算结果
A B not A A and B A or B
true true false true true
true false false false true
false true true false true
false false true false false
(6) 字符串连接运算符 +
如:'abc'+'def' 结果为:'abcdef' 。
标准函数和过程
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)=-3 round(-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),自然对数函等等,请需要时从Turbo Pascal中的英文帮助中查阅。
注:在PASCAL中没有定义幂运算函数xn 。但可采用下面式子计算:exp(n*ln(x)) 。
(2) 算术标准过程
[1] dec(x) 相当于 x:=x-1
[2] dec(x,n) 相当于 x:=x-n
[3] inc(x) 相当于 x:=x+1
[4] inc(x,n) 相当于 x:=x+n
(3) 字符处理标准函数
为了说明方便,设s,str,str1,str2为字符串型(string),ch为字符型(char)变量。
[1] concat(str1,str2)
作用:把两字符串连接成新字符中串。
例:concat('abc','def') 结果:'abcdef'
[2] copy(str,a,b)
作用:从字符串str的左边第a(整数)位开始截取b(整数)位字符串。
例:copy('abcdef',2,4) 结果:'bcde'
[3] length(str)
作用:求字符串str的长度。
例: length('abcdef') 结果:6 ;length('') 结果:0 ;length(' ') 结果:1
[4] chr(x)
作用:求x(x为整数1--255)表示的ASCII代码对应的字符
例:chr(65) 结果:'A' ;chr(66) 结果:'B'
[5] 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
[6] pos(str1,str2)
作用:求字符串str1在字符串str2中的开始位置,结果为整数。
例:pos('abc','efabcdg') 结果:3 ;pos('abc','efabfgh') 结果:0
[7] upcase(ch)
作用:把ch对应的字符转为大写字母。
例:upcase('a') 结果:'A'
(4) 字符串处理标准过程
[1] delete(str,a,b)
作用:从字符串str的左边第a(整数)个字符开始向右连续删除b(整数)位字符,并把剩余字符串赋给str
例:str:='abcdefgh';delete(str,4,3); 最后str结果为:'abcgh'
str:='abcdef';delete(str,8,3); 最后str结果为:'abcdef'
[2] insert(str1,str,a)
作用:把字符串str1插入字符串str中由第a(整数)位字符之前,并把新字符串赋给字符串变量str。
例:str:='efghy';insert('abc',str,3);最后str结果为:'efabcghy'
str:='efghy';insert('abc',str,8);最后str结果为:'efghyabc'
[3] 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'
[4] val(str,a,code)
作用:将数字字符串转换成数字,并将该数字存入实型或整型变量a中,code为返回的错误代码,code=0 表示转换成功,无错误。
例:val('12',a,code) 若a为实型,a的结果为:1.2000000000E+01;若a为整型,a的结果为:12
(5) 布尔型标准函数
[1] odd(x)
作用:判断自变量x的奇偶特性,其中x为整型。奇数为true,偶数为false。
例:odd(13) 结果:true ;odd(10)结果:false 。
[2] eof(x)
作用:判断文件x是否处于结束状态。其中x为文件型变量。文件结束为true,否则为false 。
[3] eoln(x)
作用:判断文件x是否处于行结束状态。其中x为文件型变量。行结束为true,否则为false 。
(6) 顺序类型函数
[1] pred(x)
作用:求x的前一个量值,其中x为字符型、布尔型、整型、枚举型、子界型等有序类型。
例:pred(6)=5 ;pred('b')='a' ;pred(true)=false ; pred(false)=true
[2] 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单元中。下面补充一些常用标准函数和过程。
[1] clrscr 过程 在crt单元
格式:clrscr 作用:清文本屏幕,并将光标移到屏幕左上角。
[2] delay 过程 在crt单元
格式:delay(ms) 作用:延迟ms毫秒数,其中ms为word型。
[2] gotoxy 过程 在crt单元
格式:gotoxy(x,y) 作用:称光标到y行x列上,其中x,y为byte型。
[3] sound 过程 在crt单元
格式:sound(hz) 作用:按hz(word型)指定的频率发音,调用该过程后会一直响,直到调用nosound过程将其关闭。
[4] nosound 过程 在crt单元
格式:nosound 作用:关闭扬声器。
[5] readkey 函数 在crt单元
格式:readkey 作用:从键盘读入一个字符,函数类型结果为char。
[6] exit 过程 在system单元
格式:exit 作用:退出当前过程或模块。
[7] halt 过程 在system单元
格式:halt 作用:停止程序执行。
[8] 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)。
[9] 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的帮助文件。
[10] read或readln过程 在system单元
格式:read(f,v1,v2,...,vn)或readln(f,v1,v2,..vn) 其中f为文件型变量,标准输入文件input(如键盘输入)时可省,v1,v2,...,vn为变量名表。
作用:从标准输入文件(如键盘输入)或磁盘文件中读入数据到变量中,多个变量时,要用逗号分隔。 read与readln的区别是:readln会掉丢当前输入行中多余的数据。而read不会,多余的数据可留待下一个read或readln使用。
[11] write或writeln过程 在system单元
格式:write(f,v1,v2,...,vn)或writeln(f,v1,v2,...,vn) 其中f为文件型变量,标准输出文件OUTPUT(如显示器)可省,v1,v2,...,vn为表达式,且每个表达式的必须有唯一确定值,类型为标准类型。write与writeln区别是:writeln输完所有数据项后,光标自动移动到下一行,即自动换行。
表达式
PASCAL中表达式是由常量、变量、函数、运算符及圆括号(只能用圆括号)连接起来的算式。与普通的算术运算式不同,表达式书写必须符合PASCAL语言规定。语法图如下:
例如:数学式子: 的PASCAL表达式为:abs(a-sqtr(c+1))/(a*b)+d
PASCAL中运算的优先顺序如下:
(1) 括号内表达式优先处理
(2) 函数
(3) NOT
(4) AND,*,/,DIV,MOD
(5) +,-,OR
(6) <,<=,=,>,>=,<>,IN
注:同一个子表达式中,同一优先级的运算按从左到右的次序进行。而且不能用中括号和大括号,只能用圆括号。
例如: 下面表达式中,假设x:=2;y:=2:i:=1;请读者分析其优先顺序,为什么?
( x = sqr(2)) or not(y>0) and (( x-y ) /i <> 0 )
一个较完全的PASCAL程序结构
一个较完整和PASC程序结构如下:
program 程序名(程序参数表)
{$n+.....}(编译开关)
uses (使用单元)
label
标号说明;
const
常量说明;
type
类型说明;
var
变量说明;
function
函数说明;
procedure
过程说明;
begin
语句;
...
语句;
end .
Free Pascal扩充了数值位数
[编辑本段]free pascal官方网站及下载地址
free pascal官方网站:www.freepascal.org
free pascal官方ftp下载网站:ftp://ftp.freepascal.org/pub/fpc/dist
free pascal2.0.4官方ftp下载地址:ftp://ftp.freepascal.org/pub/fpc/dist/i386-win32-2.0.4/fpc-2.0.4.i386-win32.exe
free pascal2.2.0官方ftp下载地址:ftp://ftp.freepascal.org/pub/fpc/dist/i386-win32-2.2.0/fpc-2.2.0.i386-win32.exe
[编辑本段]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