Free Pascal 简要语法书.docx

上传人:b****6 文档编号:7725455 上传时间:2023-01-26 格式:DOCX 页数:24 大小:68.60KB
下载 相关 举报
Free Pascal 简要语法书.docx_第1页
第1页 / 共24页
Free Pascal 简要语法书.docx_第2页
第2页 / 共24页
Free Pascal 简要语法书.docx_第3页
第3页 / 共24页
Free Pascal 简要语法书.docx_第4页
第4页 / 共24页
Free Pascal 简要语法书.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Free Pascal 简要语法书.docx

《Free Pascal 简要语法书.docx》由会员分享,可在线阅读,更多相关《Free Pascal 简要语法书.docx(24页珍藏版)》请在冰豆网上搜索。

Free Pascal 简要语法书.docx

FreePascal简要语法书

FreePascal简要语法书

一、基本结构

一个FP程序一般可以分为程序首部(Program语句)、程序说明(常量、变量、自定义函数过程)和程序主体(Begin到End.)三部分。

语句间用分号“;”分隔,一般一行写一条语句,程序最后用End.(句点)结束。

基本框架如下:

Program程序名(参数);

Label

标号说明;

Const

常量说明;

Type

类型说明;

Var

变量说明;

Function

函数说明;

Procedure

过程说明;

Begin

程序主体;

End.

用一个实例表示:

数据交换(exchange)。

输入两个整数a,b(-30000

输入文件(exchange.in)有一行,用空格分开的两个整数;输出文件(exchange.out)有一行,用空格分开的两个整数,顺序和输入数据相反。

Programexchange;

Const

fin=’exchange.in’;

fout=’exchange.out’;

Var

a,b:

integer;

Procedureinit;

begin

assign(input,fin);

assign(output,fout);

reset(input);

rewrite(output);

end;

Procedureswap(varx,y:

integer);

var

t:

integer;

begin

t:

=x;

x:

=b;

b:

=t;

end;

Begin

init;

readln(a,b);

swap(a,b);

writeln(a,b);

close(input);

close(output);

End.

二、程序说明部分

1.常量定义(const)

常量名=常量数据;

Const

e=2.7182818;{Realtypeconstant.}

a=2;{Ordinal(Integer)typeconstant.}

c=’4’;{Charactertypeconstant}

s=’Thisisaconstantstring!

’;{Stringtypeconstant}

s=chr(32)

ls=SizeOf(Longint);

ti:

array[1..3]ofLongint=(1,2,3);

tj:

array[1..3][1..2]ofinteger((1,3),(1,2),(1,1));

2.类型说明(type)

类型名=类型

类型说明;

Type

point=record

x,y,z:

real;

color:

integer;

end;

junk=setofchar;

Days=(Mon,Tue,Wed,Thu,Fri,Sat,Sun);

WorkDays:

Setofdays;

3.变量定义

变量名(多个变量名用逗号分开):

变量类型;

var

i:

integer;

e:

real;

c:

char;

s:

string;

sn:

array[1..12]ofinteger;

p:

point;

变量类型

i.整数类型

ii.实数类型

iii.布尔类型

TypeRange

Boolean1true、false

iv.字符类型

TypeRange

char1

String默认最大255个字符

4.自定义函数

function函数名(形式参数表):

返回类型;

函数的说明部分

begin

函数主体;

……

函数名:

=返回值;

end;

functionmax(x,y:

integer):

integer;

var

m:

integer;

begin

ifx>ythenm:

=xelsem:

=y;

max:

=m;

end;

当函数被赋值后,可以用exit直接退出函数,回到主程序。

5.自定义过程

procedure过程名(形式参数表);

过程说明部分;

begin

过程主体;

……

end;

Procedureswap(varx,y:

integer);

var

t:

integer;

begin

t:

=x;

x:

=b;

b:

=t;

end;

可以用过程exit直接退出过程,回到主程序。

例题:

Programex1;

Var

a:

_______;

b:

________;

c:

_________;

Begin

a:

=10;

b:

=2;

c:

=a/b;

writeln(c);

end.

 

三、表达式的书写:

在程序中的表达式书写方式与数学书写方式有一些区别:

1.数学运算符号:

+-*/divmod

div表示整除运算例13div4=3

mod表示取余运算例13mod4=1(moddiv为运算符号前后必须留空白)

2.关系运算符号:

><<==><>

关系运算的结果为真假值例5>7=false

<>表示不等于例8<>9=____________

3.逻辑运算符号:

notandor

not将关系表达式的结果取反not(5>7)=____________

and连接两个关系表达式,当这两个关系表达式的结果为真,整个表达式结果才为真

or连接连接两个关系表达式,当这两个关系表达式有一个的结果为真,整个表达式结果就为真

》》练习:

表示x在[5,10]之间

a,b,c代表三边,表示a,b,c构成了等腰三角形,等边三角形

表示x是偶数

xyz代表一个三位数,设计公式分别计算出x,y,z的值

4.标准函数

一些比较复杂的运算,不能简单的使用以上运算符号表示,我们采用函数来计算;特别注意:

函数的应用范围

Abs(x)函数值为x的绝对值

Sqr(x)函数值为x的平方

Int(x)函数值为x的整数部分

Sqrt(x)函数值为x的平方根

Random函数值为0-1之间的随机小数

Random(x)函数值为0-x之间的随机整数

Trunc(x)舍去实数x的小数部分,并转换为整型

Round(x)对实数x作四舍五入,并转换为整型

chr(x)函数值为整数x所对应的ascⅡ字符

ord(x)函数值为字符x所对应的数值

5.表达式的书写规则

所有表达式内容必要写在同一行

只能使用合法的运算符号,不能省略任何符号

只能使用小括号,可以多次使用

注意表达式计算时的优先计算顺序

》》练习题:

改写一下表达式

y3+2y2+5y-7

一元二次方程求根公式

四。

程序语句(每个完整的语句结束后,使用分号表示表示当前语句结束)

a)顺序语句

i.赋值语句变量:

=表达式;

ii.输入语句read(变量名表);readln(变量名表);

iii.输出语句write(输出项);writeln(输出项);

iv.注释{块注释}//行注释

例:

(程序片断)

Programjuxing;

var

l,h,s:

integer;

begin

readln(l,h);

s:

=l*h;

writeln(‘s=‘,s);

end.

》》练习:

阅读程序写答案

x:

=4;

y:

=5;

x:

=x+y;

y:

=x+y;

writeln(‘x=’,x,’y=’,y);

上机练习题:

●输入半径,求球的表面积和体积

●从键盘输入两个整数,交换后输出

●输入两个整数,利用绝对值函数,输出其中较大的一个

●编写程序,随机产生一个三位自然数,分离出它的百位、十位和各位数字,并求和。

 

b)分支语句

i.if条件then语句1;

if条件then语句1else语句2;

若条件为真,则执行语句1;否则执行语句2

ii.case表达式of

常数表1:

语句1;

常数表2:

语句2;

……

常数表n:

语句n;

else语句n+1

end

根据表达式的值,选择由哪个语句执行。

iii.语句可以用begin..end构成复合语句,在复合语句中,可以再放入分支语句,称为“分支嵌套”

》》练习:

程序片断填空

read(a);

if__________then

writeln(‘是偶数’)

else

writeln(‘不是偶数’);

上机练习

●输入3个数,求最大值

●输入月份年份,输出该月天数

●设计一个自动收银的计算器,当购物在200元以内(含200)按九折付款,超出200元,200以内(含200)按九折付款,200以外部分按七折付款

 

c)循环语句

i.for循环变量:

=初值to终值do循环体语句;

for循环变量:

=初值downto终值do循环体语句;

ii.while布尔表达式do循环体语句

iii.repeat

语句1

语句2;

……

语句n;

until布尔表达式;

iv.两个在循环中常用过程:

break和continue

break:

退出本层循环;

continue:

结束本次循环,进入下一次循环

v.for循环和while循环的循环语句体可以用begin..end围起来,构成复合语句。

如果复合语句中,再放入循环,称为“循环嵌套”

例题:

输入自然数n,输出n个“*”

Programex_for;

Var

i,n:

integer;

Begin

readln(n);

fori:

=1to___do

write(‘*’);

End.

例题:

用循环实现1+2+3+4+…+n

Programex_for;

Var

s,i,n:

integer;

Begin

s:

=0;

readln(n);

fori:

=1tondo

s:

=__________;

writeln(‘s=‘,s);

End.

上机练习

Ex12.pas

读入n([1,30000])值,计算输出s的值

S=1+3+5+……+n

输入样例ex12.in只有一行

5

输出样例ex12.ou只有一行

9

Ex13.pas

读入([1,10])n值,计算输出n!

的值

n!

=1*2*3*4……*n

输入样例ex13.in只有一行

5

输出样例ex13.ou

120

Ex14.pas

读入n([1,10])值,分别输出1!

,2!

,3!

,……n!

输入样例ex14.in只有一行

5

输出样例ex14.ou共有n行

1

2

6

24

120

 

Ex15.pas

读入一个正整数([0,30000]),输出它各位数之和。

输入样例:

ex15.in

4589

输出样例:

ex15.ou

26

Ex16.pas

从n个整数中输出最大的数。

Ex16.in共有两行,第一行n([1,100]),第二行是这n个数([-30000,30000])

Ex16.ou共一行,最大的数

输入样例:

3

4595-12

输出样例:

95

5.数组结构

a)数组:

定义一组具有相同功能,相同名称的变量

i.定义

1.type

数组类型=array[下标范围]of数组元素类型;

var

数组变量:

数组类型;

2.var

数组变量:

array[下标范围]of数组元素类型;

type

arrtype=array[1..100]ofinteger;

var

arr1:

arrtype;

arr2:

array[1..100]ofinteger;

arr3:

array[‘a’..’z’]ofinteger;

arr4:

array[0..10,0..30]ofchar;

ii.数组的基本操作

var

arr:

array[1..10]ofinteger;

i,key:

integer;//key是需要操作的数据

1.赋值

fori:

=1to10doarr[i]:

=i*i;

2.查找(查找key的值在数组的哪个位置)

functionfind(arr:

arrayofinteger,key:

integer):

integer;

var

i:

integer;

begin

find:

=-1;//如果key不在数组中,则返回-1

fori:

=1to10do

ifarr[i]=keythenbegin

find:

=i;

break;

end;

end;

3.删除(删除指定的元素,剩下的元素前移,数组长度-1)

4.插入(在指定位置k插入元素,先将k..n的元素后移,再插入元素。

注意考虑数组是否越界)

5.排序(输入一组数据放在a[1..n]中,将它们按从低到高的次序排列)

a)选择排序

思路:

从数组中选择一个最小的值,把它和第一个数交换;从剩下的数据中,再找最小值,和第二个数交换……

fori:

=1ton-1dobegin

min:

=i//min存放最小数的位置

forj:

=i+1tondo

ifa[j]

=j

t:

=a[i];

a[i]:

=a[min];

a[min]:

=t;

end;

b)冒泡排序

思路:

两两比较,大数放在后面,一轮下来(比较n-1次),最大的数放在最后;再对剩下的n-1个数进行比较……

fori:

=1ton-1do

forj:

=1ton-ido

ifa[j+1]

t:

=a[j];

a[j]:

=a[j+1];

a[j+1]:

=t;

end;

c)插入排序

思路:

把数组分成左右两部分,对两部分分别排序,再把以排好序的两部分插入到一个数组中,使整体有序。

d)快速排序

思路:

把元素插入到原数组中,使元素左边的数都比它小,右边的数都比它大。

从第一个数据a[1]开始插入,从左开始,找到第一个比a[1]大的数据a[i];从右开始,找到第一个比a[1]小的数据a[j],交换a[i]和a[j],直到i>=j,交换a[1]和a[j],完成第一次插入。

……

例:

对a[l..r]使用快速排序

procedurequicksort(a[l..r]);

var

s:

integer;

begin

ifl

s:

=partition(a[l..r]);//s是一个插入点

quicksort(a[l..s-1]);

quicksort(a[s+1..l]);递归对左右数据快排

end;

end;

functionpartition(a[l..r]):

integer;

begin

p:

=a[l];

i:

=l;

j:

=r+1;

repeat

repeati:

=i+1untila[i]>=p;

repeatj:

=j-1untila[j]<=p;

swap(a[i],a[j]);

untili>=j

swap(a[i],a[j]);

swap(a[l],a[j]);

partition:

=j;

end;

注:

以上是伪代码,编程时需要根据语法规则作改变

b)特殊数组:

字符串

i.var

st:

string;

ii.字符串在内存中占有的空间是它的最大长度+1个字节

iii.第一个字节用来存放赋值后字符串变量的实际长度(<=最大长度),可用0下标来访问;如ord(a[0])返回值该字符串的长度

iv.该字符串变量中每一个字符都又相应的下标。

可以通过下标访问单个字符。

类似字符串数组。

 

6.文件读写

a)常用过程

i.assign(input,fin):

将fin和标准输入设备关联,以后的输入将从fin中寻找

ii.assign(output,fout):

将fout和标准输出设备关联,以后将数据输出到fout

iii.reset(input):

初始化输入文件让文件变量指向文件的开始处

iv.rewrite(output):

初始化输出文件让文件变量指向文件的开始处

v.close(input)或close(output):

关闭文件使用完文件后一定要关闭文件(无论读写,否则数据丢失)

附录一:

保留字

absoluteelsenilsetandendnot

shlarrayfileobjectshrasmfor

ofstringbeginfunctiononthenbreak

gotooperatortocaseifortype

constimplementationpackedunitconstructorin

procedureuntilcontinueinheritedprogramuseson

destructorinlinerecordvardivinterfaceraise

reintroducewhiledolabelrepeatwithdownto

modselfxorasfinalizationlibrary

threadvarclassfinallytryexceptinitializationproperty

exportsisdisposefalsetrueexitnew

附录二:

编译错误说明

下面列出在编译程序时可能出现的错误,在集成环境下,将自动加载源程序并定位于出错处。

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数据段过长

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

附录三:

运行时错误

运行错误是指程序运行时出现的错误,当发生时,显示如下信息:

RUNTIMEERRORNNNNATXXXX:

YYYY

其中,nnnn是运行错误代码,xxxx是错误发生的程序段,yyyy是错误地址偏移。

1无效Dos功能号

2文件末找到

3路径未找到

4打开文件过多

5禁止文件存取

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1