free pascal 是什么
Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。
目前,该项目的网站为www.freepascal.org,最新版本为2系列。
此前被广泛使用的PASCAL编译器普遍为Turbo Pascal & Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。
虽然Free Pascal尽量设计得和Turbo Pascal接近,但是由于以下的两个原因,两者之间还是有一些区别的:
1. Free Pascal是一个32位的编译器,而Turbo Pascal只是16位编译器;
2. Free Pascal是一个跨平台的编译器,而Turbo Pascal只在windows上使用。
如果你的代码是遵守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。
下面是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,因此要求程序中的文件名和系统中的文件名一样。
关于free pascal的实用性
1、““学好了编程就能把自己心中所想用电脑表达出来,可学了两年FP后发现编程只是做些题而已””有这种想法,说明free pascal没有学好。写不出诗能怪字不好写?写诗的功夫都在诗外。编程语言只是一个表达工具。说明还不能对fpc运用自如。说明你现在的能力,用pascal对电脑的大多数资源都不能操控,觉得束手。2、“接触了易语言(那个号称中文编程的),并且似乎有了些那种可以“自己创造”的感觉”恰恰说明你不是要自己创造,而是要更好“自己山寨”。易语言就是本地化支持更好、可用的方便控件和环境、文档更清晰。3、图灵完备的语言环境(包括易、pascal)本质都是一样的。里面的算法原理本质一样。你学其中一个也就在学另一个。为什么学一个会做另一个不会做?说明会做的那个你也没学原理。只是学着使用。就像用一个音箱。你学了个开电源调音量就说会创造了,没学电磁原理。举个例说明原理的重要。老外一个20岁的小伙,他先用C写了一个BASIC编译器,然后用自己写BASIC写了这个BASIC编译器的新版,以后他的编译器就自己编译自己,逐渐加入对图形、数据库、高精计算、游戏影音等一些库。他开发的这个语言现在什么可以做。。他会觉得自己的当年这个简陋basic语言没实用性吗?这也就是近年从无到有的FreeBASIC语言。
请问Free Pascal与Turbo Pascal的区别。它们能通用吗?
turbo pascal:Pascal是一门编程语言,而Turbo Pascal/Free Pascal是Pascal程序的编译系统.。 Pascal只是一门语言,而Turbo Pascal/Free Pascal是编译器,这两个是不能比较的 。 你可以把两个语言放在一起比较,或者两个编译器放在一起比较 。 在中国的信息学奥林匹克竞赛中,过去比较常用的Pascal编程工具是Turbo Pascal。Turbo Pascal是DOS下的一种16位编程工具,在Delphi出现之前,它是世界上最多人使用的Pascal编程工具,拥有编译速度极快的先进编译器和功能强大而又简便易用的集成开发环境(IDE),在微机程序员中广为流行,正是它的出现奠定了Pascal在DOS/Windows平台上不可动摇的根基,现在常见的版本有Turbo Pascal 5.5、Turbo Pascal 6.0和Borland Turbo Pascal with Objects 7.0。Turbo Pascal 6.0与Turbo Pascal 5.5相比,主要是IDE更为强大,而其程序设计功能改变不大,只是增加了一些新的功能,例如可以内嵌asm汇编语句等。而Borland Turbo Pascal with Objects 7.0(简称Borland Pascal 7.0)则有了新的飞跃,首先是IDE进一步加强,提供了程序浏览器,然后是程序设计功能有了很大的提升,新增了一些十分有用的标准子程序,支持比较完善的面向对象程序设计功能,并提供了DOS实模式、DOS保护模式和Windows模式三种程序编译模式,能够编写出可以使用扩充内存(XMS)的保护模式应用程序或者在Windows 3.x下运行的Windows程序,另外还提供了一个对象窗口库(OWL),使用它可以快速的开发出具有一致的视窗界面(DOS或Windows 3.x)的应用程序。Borland Pascal 7.0在1992年推出,是Turbo Pascal系列在DOS下的最后版本。Free Pascal 现在,随着Turbo Pascal逐渐被淘汰,全国信息学奥林匹克竞赛决赛(NOI)和国际信息学奥林匹克竞赛(IOI)已经指定Free Pascal为比赛使用的Pascal编程工具。Free Pascal是由一个国际组织开发的32/64位Pascal编程工具,属于自由软件,可用于各种操作系统。根据编译选项的不同,它可以使用Turbo Pascal兼容语法、Delphi 语法或者其它语法进行编写程序。由于它拥有32/64位的编译器,而且一直在更新发展中,因此它的功能比Borland Pascal更加强大,拥有许多现代程序设计的特征。但它对程序员的吸引力比不上拥有VCL和CLX的Delphi和Kylix。 Free Pascal是一个在多种版本Pascal和Delphi下的产物,目前比较成熟的版本是由FreePascal. org发布的2.2.4版本(最新版本为2.4.4,但在使用的时候,2.4.4经常会莫名其妙的中止编译),由于是Pascal上的改版,在FP里加入了很多以前没有的东西,例如:FillChar系列内存块赋值语句,用Power代替了**(乘方),但是**还是可以使用。 另外FP加强了与内存的互容性,增大对内存的支持,FP里的内存限制是TP和BP里的将近上万倍。 FP还进一步加强了单元支持、面向对象程序设计的支持、显卡(声卡)的支持、图形高级覆盖的支持、Windows\Linux\OS/2\..等众多系统的支持。在FP的较稳定版本中,可以方便的利用Win32编译模式,编译出Windows应用程序,与Delphi的功能相当。同时对动态连接库、控件、数据库、文件、网络、OpenGL的深入支持,使得 FP 在各种 Pascal 编译系统中脱颖而出。 更值得提出的是,FP支持Delphi及C++的部分语言,例如:A+=2这样的C Style语言,在FP里完美支持。 FP中支持单目、双目操作符,即所有版本的Pascal的符号和“@”等特殊符号。 FP 支持运算符重载。 FP现为竞赛推荐工具。 最新发布版本为 2011 年 5月 22 日发布的 2.4.4。 最新 bugfix 版本为 svn repo 里的 2.4.3。
free pascal 是什么
free pascal是pascal编程软件的一种。。。其余的还有其他不同版本比如说Turbo Pascal ,Visual Pascal等等。。。
Pascal是一种计算机通用的高级程序设计语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。
其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构。尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计语言之一,NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。
其余的可以去百度知道搜pacal即可^^
[noip]Lazarus与free的异同,要详细的解说!
怎么个详细法.
1. Lazarus的设计目标是应用Free Pascal,所以所有凡是Free Pascal能运行的平台,Lazarus都可以运行。最新版本能运行于Linux,Win32和FreeBSD。整个界面的外观和操作和Delphi IDE一样,因此,如果你会使用Delphi的话,用起Lazarus IDE来就一定能得心应手了。
Lazarus是一个用于FreePascal的快速应用开发(RAD)的面向对象的Pascal集成开发环境(IDE)。Lazarus 对于窗口管理来说是中性的。可以工作在KDE(1.13版本)下,也可以工作在GNOME(1.23版本)或其他窗口管理器(MVM、 WindowMaker)。Lazarus的设计目标是应用Free Pascal,所以所有凡是Free Pascal能运行的平台,Lazarus也可以运行。最新版本能运行于Linux,Win9x/2000/xp和FreeBSD。Lazarus的工作界面、外观和操作和Borland 的Delphi IDE非常相似,所不同的是Lazarus 是完全的自由软件。Lazarus 可以直接移植Delphi的代码。Lazarus的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Lazarus这种先进开发环境的编程语言。
由于Lazarus为开放的IDE,且在linux下表现良好,目前被中国计算机学会指定为NOI系列竞赛的Pascal语言推荐IDE。
在Linux中,Lazarus的图形用户接口(GUI) 由以下几个部分组成:
窗口系统--组织显示屏上的图形输出并执行基本的文本和绘图功能。
窗口管理器--负责对窗口的操作(比如最小化、最大化、关闭按钮的形状,窗口边框外观等)以及输入焦点的管理。
工具包--带有明确定义的编程界面的常规库。
Lazarus对系统软件、硬件要求都不高:
硬件方面:Intel Pentium 200MHz、32MB内存、100MB硬盘空间。
软件方面:内核(Kernel)在2.2以上,Qt库1.44 以上,XFree86 3.6 以上。
此软件的官方网站地址:http://www.lazarus.freepascal.org/
C中delete和free有什么区别?
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
我们先看一看malloc/free和new/delete如何实现对象的动态内存管理,见下例。
class Obj
{
public :
Obj(void){ cout < < “Initialization” < < endl; }
~Obj(void){ cout < < “Destroy” < < endl; }
void Initialize(void){ cout < < “Initialization” < < endl; }
void Destroy(void){ cout < < “Destroy” < < endl; }
};
void UseMallocFree(void)
{
Obj *a = (obj *)malloc(sizeof(obj)); // 申请动态内存
a-> Initialize(); // 初始化
//…
a-> Destroy(); // 清除工作
free(a); // 释放内存
}
void UseNewDelete(void)
{
Obj *a = new Obj; // 申请动态内存并且初始化
//…
delete a; // 清除并且释放内存
}
类Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。函数UseMallocFree中,由于malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成初始化与清除工作。函数UseNewDelete则简单得多。
所以我们不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。
既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete必须配对使用,malloc/free也一样。
free pascal习题
题1:
问题描述:
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:
有一个数字串: 312,当N=3,K=1时会有以下两种分法:
1)3*12=36
2)31*2=62
这时,符合题目要求的结果是: 31*2=62
现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。
输入:
程序的输入共有两行:
第一行共有2个自然数N,K (6<=N<=10,1<=K<=6)
第二行是一个长度为N的数字串。
输出:
结果显示在屏幕上,相对于输入,应输出所求得的最大乘积(一个自然数)。
样例:
输入
4 2
1231
输出
62
题2:
问题描述:
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们己知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙" 中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。
输入:
输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表来“龙”开头的字母。你可以假定以此字母开头的“龙" 一定存在。
输出:
只需输出以此字母开头的最长的“龙”的长度
样例:
输入
5
at
touch
cheat
choose
tact
a
输出
23 (连成的“龙”为atoucheatactactouchoose)
题3:
问题描述:
设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0。如下图所示(见样例):
A
0 0 0 0 0 0 0 0
0 0 13 0 0 6 0 0
0 0 0 0 7 0 0 0
0 0 0 14 0 0 0 0
0 21 0 0 0 4 0 0
0 0 15 0 0 0 0 0
0 14 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B
某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
输入:
输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个
表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
输出:
只需输出一个整数,表示2条路径上取得的最大的和。
样例:
输入
8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0
输出
67
配平:
小猪初三了,学了化学反应方程式。化学反应方程式中最有技术含量的一步应该说是配平了。但小猪是个nc,一次配平要30分钟,这大大减低了他做作业的效率。他找了你,希望你能帮帮他。 一个化学反应方程式的反应物包含n项,生成物m项。每项包含若干中元素(大写字母和小写字母组合)和数字,比如“H2O”,“Zn”等。你的任务是使左右两边每种元素的个数相等。如: 元素为 左O2 H2 右 H2O 输出 1 2 2 此时左边共有两个氧原子,四个氢原子,右边也有两个氧原子,四个氢原子。
输入:第一行包含2个数n,m。接下来n行每行一个长度不超过100的字符串,表示反应物,然后m行每行一个长度不超过100的字符串,表示生成物。
输出:n+m行。第i行表示第i个化学式包含的个数。
样例输入:1 3KMnO4K2MnO4MnO2O2
样例输出:2111
样例输入:1 3 KMnO4 K2MnO4 MnO2 O2
样例输出:2 1 1 1
单词接龙:
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们己知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙" 中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。
输入:
输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表来“龙”开头的字母。你可以假定以此字母开头的“龙" 一定存在。
输出:
只需输出以此字母开头的最长的“龙”的长度
样例
输入
5
at
touch
cheat
choose
tact
a
输出
23
就酱~
free pascal 中的各种函数及其意义
(1)自变量必须为整型的标准函数:
(A)前趋函数:Pred(x),函数结果类型为整型,如:Pred(4)=3
(B)后继函数:Succ(x),函数结果类型为整型,如:Succ(4)=5
(C)奇函数:odd(x),结果为布尔型。如:Odd(13)=True
(D)字符函数:Chr(x)其中x为ASCII码,函数结果为字符型。如:Chr(65)='A'
(2)自变量为整型(或实型),但函数值类型为实型的标准函数;
(A)平方根函数:Sqrt(x)
(B)整数函数:Int(x) 取整数部分,如:INT(3.85)= 3.0
(C)小数函数:Frac(x)
(D)正弦函数:Sin(x)
(E)余弦函数:Cos(x)
(F)反正切函数:Arctan(x),单位为弧度
Pascal中无正切函数,用Sin(x)/ Cos(x)代替
(G)指数函数:Exp(x),即求ex
(H)对数函数:Ln(X),即求x的自然对数logex
幂运算 ∵ xy=eylnx , ∴ xy =Exp(y*ln(x)
注意:在FreePascal中,幂的表示: xy==power(x,y) 或 xy=x**y
(I)随机函数:Random(x:word),无x时,函数值取[0,1)之间的随机小数;有x 且为Word类型时,函数值取[0,x)之间的随机整数。前面加上:Randomize语句。
(J)圆周率函数PI=3.1415926536
(3)自变量为整型(或实型),但函数值类型与x一致的标准函数
(A)Abs(x):绝对值函数,如:Abs(-2)=2 Abs(-2.0)=2.0000000000E+00
(B)Sqr(x):平方函数如,如:Sqr(4)=16 Sqr(4.0)= 1.6000000000E+01
(4)自变量为整型(或实型),但函数值类型为整型的标准函数
(A)Trunc(x):取整数部分,如:Trunc(3.85)=3
(B)Round(x):四舍五入,如:Round(2.8)=3 Round(-2.8)=-3
(5)加1函数:inc(x) 如:inc(5)=6,inc(5,8)=13
(6)减1函数 dec(x) 如:dec(5)=4 dec 5,3)=2
文件函数:
(1) Eof(f)或 Seekeof(f)未读到文件结束符“Chr(26) ”或 “Ctrl+Z”时,函数值为false; 读到文件结束符时,函数值为true;
(2) Eoln(f)或SeekEolf(f)未读到行结束符“Chr(13) ”时,函数值为false; 读到行结束符或文件结束符时,函数值为true;