Free Pascal

Free Pascal

專業Pascal編譯器
Free Pascal(全稱FPK Pascal)是一個32位和64位專業Pascal編譯器。它可以在多個處理器架構中運行:Intel x86,AMD64/x86-64,PowerPC32/64,SPARC和 ARM。它支持的操作系統有Linux,FreeBSD,Haiku,Mac OS X/iOS/Darwin,DOS,Windows32/64/CE,OS/2,MorphOS,Nintendo GBA,Nintendo DS和 Nintendo Wii。另外,在JVM,MIPS和Motorola 68k處理器架構或操作系統中使用的Free Pascal正在研發開發版本。在全國信息學奧林匹克大賽(簡稱NOI)中,Pascal是被采用的三種編程語言之一。[2]由于它具有良好的結構程序設計特性,特别适合于學生掌握自頂向下逐步求精的結構化程序設計思想和方法,并能構建出良好的程序設計風格和習慣,因此,Pascal是在NOI中最受選手青睐的語言。同樣,許多大學都把Pascal作為一門重要的信息學語言來進行授課。[1]
  • 中文名:
  • 外文名:Free Pascal
  • 别名:
  • 語言标準:ANSI Pascal
  • 支持平台:Windows、Linux、Mac、FreeBSD等
  • 最新版本:2.6.4

簡介

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字符串變量

外部文件鍊接函數

名字

類型

功能

assign

過程

将一個外部文件賦予文件變量

close

過程

關閉一個一打開的文件

eof

函數

确認文件是否結束

erase

過程

删除一個外部文件

rename

過程

重命名一個外部文件

reset

過程

打開一個已存在的文件

rewrite

過程

建立一個新文件并打開

名字

類型

功能

append

過程

打開已存在的文件從尾部添加

eoln

函數

确認文件是否行結束

read

過程

從文本文件讀取變量

readln

過程

從文本文件讀取變量并換行

write

過程

從文本文件寫入變量

writeln

過程

從文本文件寫入變量并換行

名字

類型

功能

read

過程

從類型文件讀取變量

write

過程

從類型文件寫入變量

filepos

函數

返回指定文件位置

filesize

函數

返回文件長度

seek

過程

将指針移動到指定位置

表達式

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。

相關詞條

相關搜索

其它詞條