Free Pascal 简要语法书
一、基本结构
一个FP程序一般可以分为程序首部(Program语句)、程序说明(常量、变量、自定义函数过程)和程序主体(Begin到End.)三部分。语句间用分号“;”分隔,一般一行写一条语句,程序最后用End.(句点)结束。基本框架如下:
Program 程序名(参数);
Label
标号说明;
Const
常量说明;
Type
类型说明;
Var
变量说明;
Function
函数说明;
Procedure
过程说明;
Begin
程序主体;
二、程序说明部分
1.常量定义(const)
常量名=常量数据;
2.类型说明(type)
类型名=类型
类型说明;
3.变量定义
变量名(多个变量名用逗号分开):变量类型;
变量类型
i.整数类型
ii.实数类型
iii.布尔类型
Type Range
Boolean 1 true、false
iv.字符类型
Type Range
char 1
String 默认最大255个字符
4.自定义函数
function 函数名(形式参数表):返回类型;
函数的说明部分
begin
函数主体;
……
函数名:=返回值;
end;
function max(x,y:integer):integer;
var
m:integer;
begin
if x>y then m:=x else m:=y;
max:=m;
end;
当函数被赋值后,可以用exit 直接退出函数,回到主程序。
5.自定义过程
procedure 过程名(形式参数表);
过程说明部分;
begin
过程主体;
……
end;
可以用过程exit 直接退出过程,回到主程序。
例题:
Program ex1;
Var
a:_______;
b:________;
c:_________;
Begin
a:=10;
b:=2;
c:=a/b;
writeln(c);
end.
三、表达式的书写:在程序中的表达式书写方式与数学书写方式有一些区别:
1.数学运算符号:+ - * / div mod
div 表示整除运算例13 div 4=3
mod 表示取余运算例13 mod 4=1(mod div 为运算符号前后必须留空白)
2.关系运算符号:> < <= => <>
关系运算的结果为真假值例5>7=false
<>表示不等于例8<>9=____________
3. 逻辑运算符号:not and or
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所对应的数值
所有表达式内容必要写在同一行
只能使用合法的运算符号,不能省略任何符号
只能使用小括号,可以多次使用
注意表达式计算时的优先计算顺序
》》练习题:改写一下表达式
y3+2y2+5y-7
一元二次方程求根公式
四。程序语句(每个完整的语句结束后,使用分号表示表示当前语句结束)
a)顺序语句
i.赋值语句变量:=表达式;
ii.输入语句read(变量名表);readln(变量名表);
iii.输出语句write(输出项);writeln(输出项);
iv.注释{ 块注释} // 行注释
例:(程序片断)
Program juxing;
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 语句1 else 语句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个“*”
Program ex_for;
Var
i,n:integer;
Begin
readln(n);
for i:=1 to ___do
write(‘*’);
End.
用循环实现1+2+3+4+…+nProgram ex_for;
Var
s,i,n:integer;
Begin
s:=0;
readln(n);
for i:=1 to n do
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
45 95 -12
输出样例:
95
5.数组结构
a)数组:定义一组具有相同功能,相同名称的变量
i.定义
1.type
数组类型=array[下标范围] of 数组元素类型;
var
数组变量:数组类型;
2.var
数组变量:array[下标范围] of 数组元素类型;
ii.数组的基本操作
var
arr:array[1..10] of integer;
i,key:integer; //key是需要操作的数据
1.赋值
for i:=1 to 10 do arr[i]:=i*i;
2.查找(查找key的值在数组的哪个位置)
3.删除(删除指定的元素,剩下的元素前移,数组长度-1)
4.插入(在指定位置k插入元素,先将k..n的元素后移,再插入元素。
注意考虑数组是否越界)
5.排序(输入一组数据放在a[1..n]中,将它们按从低到高的次序排列)
a)选择排序
思路:从数组中选择一个最小的值,把它和第一个数交换;从剩
下的数据中,再找最小值,和第二个数交换……
思路:两两比较,大数放在后面,一轮下来(比较n-1次),最
大的数放在最后;再对剩下的n-1个数进行比较……
c)插入排序
思路:把数组分成左右两部分,对两部分分别排序,再把以排好
序的两部分插入到一个数组中,使整体有序。
d)快速排序
思路:把元素插入到原数组中,使元素左边的数都比它小,右边
的数都比它大。从第一个数据a[1]开始插入,从左开始,找到第
一个比a[1]大的数据a[i];从右开始,找到第一个比a[1]小的数
据a[j],交换a[i]和a[j],直到i>=j,交换a[1]和a[j],完成第一
次插入。……
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) :关闭文件使用完文件后一定要关闭文件(无论读写,否则数据丢失)
附录一:保留字
absolute else nil set and end not
shl array file object shr asm for
of string begin function on then break goto operator to case if or type const implementation packed unit constructor in procedure until continue inherited program uses on destructor inline record var div interface raise reintroduce while do label repeat with downto mod self xor as finalization library
threadvar class finally try except initialization property exports is dispose false true exit new
附录二:编译错误说明
下面列出在编译程序时可能出现的错误,在集成环境下,将自动加载源程序并定位于出错处。
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定义
53 EXTRN定义过多
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 缺有序变量
105 INLINE错
106 缺字符表达式
107 重定位项过多
112 CASE常量越界
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 缺释放方法标识符
154 FAIL只允许在构造方法内使用155 无效的操作符和操作数组合
156 缺内存引用
l57 不能加减可重定位符号158 无效寄存器组合
159 未激活286/287指令160 无效符号引用161 代码生成错162 缺ASM
附录三:运行时错误
运行错误是指程序运行时出现的错误,当发生时,显示如下信息:
RUNTIME ERROR NNNN AT XXXX:YYYY
其中,nnnn是运行错误代码,xxxx是错误发生的程序段,yyyy是错误地址偏移。
1 无效Dos功能号
2 文件末找到
3 路径未找到
4 打开文件过多
5 禁止文件存取
6 无效文件句柄
12 无效文件存取代码
15 无效驱动器号
16 不能删除当前日录
17 不能跨驱动器改文件名
I/O错误100 磁盘读错误
101 磁盘写错误
102 文件变量末赋值
103 文件未打开
104 文件未用输入方式打开
105 文件末用输出方式打开
106 无效数字格式,严重错误
150 磁盘写保护
15l 未知单元
152 驱动器未准备好
153 未知命令
154 数据CRC校验错
155 驱动器请求的结构长度错156 磁盘定位错
157 未知媒介类型
158 扇区末找到
159 打印机缺纸
160 设备写失败
161 设备读失败
162 硬件故障
致命错误200 被零除
20l 范围检查错
202 堆栈溢出错
203 堆溢出错
204 无效指针操作
205 浮点上溢出
206 浮点下溢出
207 无效浮点运算
208 未安装覆盖管理程序
209 覆盖文件读错
210 对象未初始化
2ll 调用抽象方法
212 流登计错
213 集合下标越界
214 集合溢出
习题
1. 猴子选大王
n 只猴子围成一圈从1报数,数到k 的猴子出列;下一只猴子又从1开始报数……最后剩下的猴子将成为这个猴群的王。 输入:一行两个数,用空格分开n 和k
输出:只有一个数,最后留下的猴子(大王)的序号 例:
输入:5 3 输出:4
2. 高精度计算
两个大数a,b (a ,b<10100),输出它们差的绝对值。尽量提高效率,减少运算次数。 输入:两行,每行一个大数 输出:一行,大数差的绝对值 例:
输入:12345678901234567890 12345678901234567899 输出:9
3. 进制转换
实现二进制、十进制和十六进制之间的相互转换。
输入:一行,一个整数后紧跟一个字母。字母为B ,表示这是一个二进制数;D 表示十进制数;H 表示十六进制数。
输出:三行。第一行为二进制数,数后用B 表示;第二行为十进制数,数后用D 表示;第三行为十六进制数,用H 表示。 例:
输入: 1011B 输出: 1011B 11D CH
4. 二维矩阵乘法
矩阵乘法是在作图形变换时常用的工具。矩阵Cij=Aik ×Bkj 的运算规则如下:
∑==k
z zy xz xy b a c 1
*
???
??
?
?
????
???=21
98765432
143A ????
??????=65432132B
??
???
?????????=?????????????
?++=??????????++=++==16131007664492822b *a b *a b *a c b *a b *a b *a c b *a b *a b *a c 32332232123132321322121211123113211211111142
C
输入:i +k +2行。第一行是第一个矩阵的大小i 行,k 列,用空格分开;接着i 行,每
行k 个数据,构成第一个矩阵;接着第i +2行两个数据,第二矩阵的大小k 行,j 列;接下来k 行,每行j 个数据,构成第二个矩阵。
输出:i 行。每行j 个数据,为结果矩阵。数据用空格分开。 例: 输入: 4 3 1 2 3 4 5 6 7 8 9 0 1 2 3 2 1 2 3 4 5 6 输出: 22 28 49 64 76 100 13 16
5. 螺旋矩阵
输入一个正奇数n ,输出n ×n 的螺旋矩阵,左上角从1开始,到中心n 2结束。。 输入:一个正奇数n
输出:n 行,每行n 个数据,构成螺旋矩阵。 例: 输入:5 输出: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
一、单项选择题(共10 题,每题1.5 分,共计15 分。每题有且仅有一个正确答案.)。13届普及组一、单项选择题:(每题1.5分) 1. D 2. D 3. C 4. B 5. B 6.B 7. B 8. C 9. C 10. A 11. C 12. A 13. A 14. A 15. B 16. D 17. C 18. D 19. A 20. A 1.在以下各项中,()不是CPU的组成部分。 A.控制器 B.运算器 C.寄存器 D.主板 2.在关系数据库中,存放在数据库中的数据的逻辑结构以()为主。 A.二叉树 B.多叉树 C.哈希表 D.二维表 3.在下列各项中,只有()不是计算机存储容量的常用单位。 A.Byte B.KB C.UB D.TB 4.ASCII码的含义是()。 A.二→十进制转换码 B.美国信息交换标准代码 C.数字的二进制编码 D.计算机可处理字符的唯一编码 5.一个完整的计算机系统应包括()。 A.系统硬件和系统软件 B.硬件系统和软件系统 C.主机和外部设备 D.主机、键盘、显示器和辅助存储器 6.IT的含义是()。 A.通信技术 B.信息技术 C.网络技术 D.信息学 7.LAN的含义是()。 A.因特网 B.局域网 C.广域网 D.城域网 8.冗余数据是指可以由其它数据导出的数据。例如,数据库中已存放了学生的数学、语文和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看作冗余数据。冗余数据往往会造成数据的不一致。例如,上面4个数据如果都是输入的,由于操作错误使总分不等于三科成绩之和,就会产生矛盾。下面关于冗余数据的说法中,正确的是()。 A.应该在数据库中消除一切冗余数据 B.用高级语言编写的数据处理系统,通常比用关系数据库编写的系统更容易消除冗余数据 C.为了提高查询效率,在数据库中可以保留一些冗余数据,但更新时要做相容性检验 D.做相容性检验会降低效率,可以不理睬数据库中的冗余数据 9.在下列各软件,不属于NOIP竞赛(复赛)推荐使用的语言环境有()。A.gcc B.g++ C.Turbo C D.Free Pascal
Freepascall资料详解 一、TP和FP的功能区别 1.Free Pascal理论上可以使用4GB(2^32byte)的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制),这是因为Free Pascal使用的是32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB (2^16byte)的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。但这并不是说,你可以随意定义很大的数组了,因为光读入200MB的数据就会让你的程序超时了(因为现在的7200转硬盘和133的系统总线速度决定了读取数据的速度也就100MB/秒)。 2.在Free Pascal中,如果用assign给标准输入输出文件变量input和output指定了文件,在程序结束之前一定要用close关闭input和output,否则输出文件可能不能被正确的写入。这个问题是近几年NOIP竞赛和省队训练、选拔中选手常犯的错误。尤其是程序非正常结束之前(如halt)会忘记。 3.如果用Rewrite打开文件,那么文件就只能被写入了。如果需要读取这个文件,要对文件执行Reset。所以,在Free Pascal中最好不要对一个文件同时进行读写操作。 4.在Free Pascal中,集合中的元素都是4个字节长的。 5.表达式执行的顺序是不确定的。比如对于表达式a:=g(2)+f(3); 不保证g(2)一定在f(3)之前执行。 6.函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pascal中添加了函数重载功能。 7.PROTECTED,PUBLIC,PUBLISHED,TRY,FINALLY,EXCEPT,RAISE成为了关键字,因此不能作为函数和过程的名字;而FAR,NEAR不再是关键字了,原因是Free Pascal是32位系统,不再需要这些关键字。 二、FP的新增功能 1.函数可以返回复杂的类型,比如记录和数组。 如: type arrtype=array[1..100] of longint;{必须要先定义数组基类型} var i,j,k,n:longint; a:arrtype; function sort(a:arrtype;n:longint):arrtype; var i,j,k:longint; begin for i:=1 to n-1 do for j:=i+1 to n do if a>a[j] then begin k:=a; a:=a[j]; a[j]:=k;
动态规划 一、背包问题 1、0/1背包[问题背景及描述] Bessie 正在减肥,所以她规定每天不能吃超过C (10 <= C <= 35,000)卡路里的食物。农民John 在戏弄她,在她面前放了B (1 <= B <= 21) 捅食物。每桶内都有某个单位卡路里(范围:1..35,000)的食物(不一定相同)。Bessie 没有自控能力,一旦她开始吃一个桶中的食物,她就一定把这桶食物全部吃完。Bessie 对于组合数学不大在行。请确定一个最优组合,使得可以得到最多的卡路里,并且总量不超过C。例如,总量上限是40卡路里,6 桶食物分别含有7, 13, 17, 19, 29, 和31卡路里的食物。Bessie可以吃7 + 31 = 38卡路里,但是可以获取得更多:7 + 13 + 19 = 39卡路里。没有更好的组合了。 [输入] 共两行。 第一行,两个用空格分开的整数:C 和 B 第二行,B个用空格分开的整数,分别表示每桶中食物所含的卡路里。 [输出] 共一行,一个整数,表示Bessie能获得的最大卡路里,使她不违反减肥的规则。 [输入样例] 40 6 7 13 17 19 29 31 [样例输出] 39 2、固定次数的0/1背包 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件体积是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。V〈30000,n〈100,n[i]〈50。 输入输出格式: 第1行,两个用空格分开的整数:v 和n 第2—n+1行,每件体积是c[i],价值是w[i],最多有n[i]件可用 [输入样例] 40 2 10 20 5 20 30 6 [样例输出] 80 3、重复背包货币系统money 母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。[In their own
Free Pascal错误一览表1、 Run Time Errors 运行错误(A)DOS 错误代码: 1:无效DoS功能号 2:文件末找到3:路径未找到4:打开文件过多 5:禁止文件存取 6:无效文件句柄 12:无效文件存取代码 15:无效驱动器号 16:不能删除当前日录 17:不能跨驱动器改文件名(B)I/O错误100:磁盘读错 误 101:磁盘写错 误 102:文件变量 末赋值 103:文件未打 开 104:文件未用 输入方式打开 105:文件末用 输出方式打开 106:无效数字 格式 (C)严重错误 150:磁盘写保 护 15l:未知单元 152:驱动器未 准备好 153:未知命令 154:数据CRC 校验错 155:驱动器请 求的结构长度 错 156:磁盘定位 错 157:未知媒介 类型 158:扇区末找 到 159:打印机缺 纸 160:设备写失 败
161:设备读失败 162:硬件故障(D)致命错误200:被零除20l:范围检查错 202:堆栈溢出错 203:堆溢出错204:无效指针操作 205:浮点上溢出 206:浮点下溢出 207:无效浮点运算208:未安装覆 盖管理程序 209:覆盖文件 读错 210:对象未初 始化 211:调用抽象 方法 212:流登计错 213:集合下标 越界 214:集合溢出 215:算术上溢 错误 216:存取非法 217:控制-C 218:授权指令 219:无效的TY PECAST 220:无效的变 体TYPECAST 221:无效的变 体操作 222:没有变体 方法调用DISPA TCHER 223:不能建立 变体数组 224:变体不包 含数组 225:变体数组 边界错误 226:TLS初始化 错误 2、编译错误对照表
FP调试及其他注意事项 事先说明:调试并不是万能药,FP的调试系统有时并不稳定,如果感觉异常,或者变量一值处于无意义的随机值,或者F7单步模式下它拒绝进入自定义的函数或过程,一般需要你新启动FP再次开始重新调试,如果尝试多次仍然不行,那需要你重新安装Free pascal了,操作方法:先卸载FP,然后手工删除你FP的安装目录(一般是如C盘或D盘下的整个FPC文件夹),然后重新安装FP。1.确定fp处于Debug (调试)模式下,否则将可能无法显示一些诸如越界等错误。 1查看修改方法:Options菜单下-->Mode...后面是否为Debug如果不是,请单击修改为Debug。 2.调试说明A:设置要观察变量:一般用Ctrl+F7可以添加需要查看的变量,也可以单击Debug菜单下-->Watches打开watches窗口右击进行添加修改删除。可以直接添加变量名,也可添加数组名观察整个数组,甚至可以直接加a[i]的这种形式,观察数组中的某个元素。 B:调试方法(均在run菜单下):
F7单步模式,每次执行一条语句(确切的说是屏幕上的一行),运行时会在watches 窗口更新变量的值以供观察。 F8步进模式,每次执行一条语句,但不会深入到自定义的过程或函数中(F7会进入函数过程执行),只在主程序中按行调试执行。 F4Goto Cursor执行到光标处:调试前先将光标停在某行,然后按F4,程序自动在F4处停止,然后可以继续使用F7或F8进行调试,可以省下很多的时间。 复赛解题步骤
1、读题 2、构思策略方法 3、模拟样例数据 4、推举是否存在反例能推翻构思,如果是重新读题构思 5、建立数据结构,估算数据范围。 6、编制程序,使程序通过编译。 7、测试样例。 8、调试程序 根据源代码设计数据,尽可能让程序执行到每条语句(所有分支)。 调试数据选择: a样例b手工构造随机数据c边界数据d特殊构造数据 调试方法: (1)静态查错,直接即观察源代码,需要时打草稿。(不要一出错就跟踪) (2)动态跟踪,F7+Watches(仅在无法在静态差错中找到错误) 9、检查程序,调节优化,估算时间、空间使用情况,根据需要修改程序。 10、检查细节:输入文件名、文件夹。
FreePascal中的编译器选项 FreePascal中的编译器选项 2010-10-09 18:32:29| 分类: Win32Program |举报 |字号订阅编译器选项: 普通选项: -h 该选项将把所有的命令行选项列出来,然后退出程序 -? 同-H一样的,在分屏显示 -i 这个选项显示编译器版权信息,你能给一个选项,类似下面-ixxx D 返回编译器的日期 V 返回编译器版本 SO 返回编译器的系统版本 SP 返回编译器所选的处理器 TO 返回编译目标系统 TP 返回编译后目标处理器 -l 在标准出上显示Free Pascal的LOGO,同时告诉你Free Pascal的版本号 -n 告诉编译器并不要读入默认的配置文件,你仍
然可以通过@选项来使用配置文件编译器返回的信息: -vxxx xxx可以是下面的: e: 默认的选项,只显示错误 i: 只显示普通的信息 w: 显示警告 n: 显示注意 h: 显示提醒 l: 使用百分比显示错误行的位置 u: 显示加载的单元名称 t: 显示程序试图打开的文件 p: 显示过程和函数的名称 c: 告诉编译器警告你当它处理有条件时 m: 显示被定义的宏 d: 显示其它的调试信息 a: 显示所有的可能的信息 0: 不要任何信息. 当你想不使用配置文件中的默认设置时有用 b: 显示所有所有声明的过程如果一个重载函数出现错误 x: 输出一些执行信息(只对Win32系统游) r: Rhide/GCC兼容模式: 将错误整理以便RHIDE能够使用
V: 创建一个包含有很多调试信息的fpcdebug.txt,主要是给编译器开发者的关于路径及文件的选项 -exxx xxx指明可执行文件as (the assembler)和ld (the linker)的路径. -FaXYZ 在系统单元后但是在其他单元之前加载单元XYZ . XYZ 是一个用逗号分隔的单元名称列表. 只能用于程序,并且和把XYZ放在USES语句的一条效果一致. -FcXXX 设置输入代码页to XXX.还在试验中. -FD 和-e 一样. -Fexxx 将错误写入文件名为xxx的文件. -FExxx 将单元和可执行文件输出到目录xxx ,而不是当前目录. -Fixxx 将xxx作为包含文件的搜索目录 . -Flxxx 将xxx作为library查找路径, 被传给连接器. -FLxxx