白濤老師Delp課件第二章_第1頁
白濤老師Delp課件第二章_第2頁
白濤老師Delp課件第二章_第3頁
白濤老師Delp課件第二章_第4頁
白濤老師Delp課件第二章_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Delphi程序設(shè)計(jì)教程授課教師:白濤jsjbt@新疆農(nóng)業(yè)大學(xué)計(jì)算機(jī)與信息工程學(xué)院信息系統(tǒng)教研室第2章Delphi的語法基礎(chǔ)2.1保留字與標(biāo)識(shí)符

2.1.1保留字

2.1.2標(biāo)識(shí)符

2.1.3指令符2.2數(shù)據(jù)類型

2.2.1數(shù)值型數(shù)據(jù)

2.2.2字符數(shù)據(jù)2.2.3布爾型數(shù)據(jù)2.3常量與變量

2.3.1常量

2.3.2變量2.4運(yùn)算符與表達(dá)式

2.4.1算術(shù)運(yùn)算符

2.4.2位運(yùn)算符

2.4.3字符串運(yùn)算符2.5常用函數(shù)與過程

2.5.1數(shù)學(xué)運(yùn)算函數(shù)

2.5.2字符處理函數(shù)

2.5.3日期時(shí)間函數(shù)

2.5.4順序類型函數(shù)2.6語句

2.6.1語句的書寫規(guī)則

2.6.2語句格式中的符號(hào)約定

2.6.3賦值語句

2.6.4注釋語句習(xí)題2

2.1保留字與標(biāo)識(shí)符2.1.1保留字和指令字ObjectPascal語言中定義了65個(gè)保留字(ReservedWords),它們具有特殊的含義,不可以用來作為標(biāo)識(shí)符。也就是說它們是由系統(tǒng)定義的具有特定意義的單詞,用戶不可以在編程時(shí)重新定義或做他用。具體單詞如下:此外,ObjectPascal語言中還定義了39個(gè)指令字(Directives),它們也具有特殊的含義,只是當(dāng)用戶重新定義了這些指令字后,在作用域內(nèi)它們就失去了原來的意義了。具體如下:說明:盡管private、protected、public、published和automated是指令字,但是要將它們當(dāng)作保留字來看待,不要定義與它們同名的標(biāo)識(shí)符。同樣,at和on也具有特殊的含義,也不要定義與它們同名的標(biāo)識(shí)符。此外,ObjectPascal是不區(qū)分大小寫的。當(dāng)然,在Delphi集成開發(fā)環(huán)境的代碼編輯器中,將以黑體顯示保留字和指令字。所以,我們?cè)诙x標(biāo)識(shí)符的時(shí)候注意不要與這些以黑體字顯示的單詞一樣。2.1.2標(biāo)識(shí)符ObjectPascal語言使用的是ASCII碼字符集,包括字母A~Z、a~z、數(shù)字0~9和其他的一些標(biāo)準(zhǔn)字符。下面的單個(gè)字符作為特殊符號(hào)存在:#$&'()*+,?./:;<=>@[]^{}另外,有些字符對(duì)也作為單個(gè)的特殊符號(hào)存在,具體有:(*(.*).)..//:=<=>=<>其中,左中括號(hào)“[”等價(jià)于“(.”,右中括號(hào)“]”等價(jià)于“.)”,左大括號(hào)“{”等價(jià)于“(*”,右大括號(hào)“)”等價(jià)于“*}”。在Pascal語言中,標(biāo)識(shí)符(Identifiers)用來標(biāo)志常量、變量、類型、屬性、對(duì)象、過程、函數(shù)、程序、單元、庫和組件庫等。標(biāo)識(shí)符分為標(biāo)準(zhǔn)標(biāo)識(shí)符和自定義標(biāo)識(shí)符兩類。1.標(biāo)準(zhǔn)標(biāo)識(shí)符標(biāo)準(zhǔn)標(biāo)識(shí)符是ObjectPascal語言系統(tǒng)預(yù)先分配給標(biāo)準(zhǔn)函數(shù)、標(biāo)準(zhǔn)過程、標(biāo)準(zhǔn)類型、標(biāo)準(zhǔn)變量以及標(biāo)準(zhǔn)文件使用的標(biāo)識(shí)符,如:False(標(biāo)準(zhǔn)常量)、Char(標(biāo)準(zhǔn)類型)、Eof(標(biāo)準(zhǔn)函數(shù))、Get(標(biāo)準(zhǔn)過程)、Input(標(biāo)準(zhǔn)文件)等。2.自定義標(biāo)識(shí)符自定義標(biāo)識(shí)符是程序員根據(jù)程序設(shè)計(jì)的需要為自己定義的常量、變量、類型、函數(shù)、過程以及所編寫的程序所取的名字。說明:標(biāo)識(shí)符可以由任意長的一個(gè)不帶空格的字符串組成,但是只有前面的255個(gè)字符有效。標(biāo)識(shí)符的第一個(gè)字符必須是字母或下劃線,其余字符可以是字母、數(shù)字或下劃線。自定義標(biāo)識(shí)符不能與保留字相同,同時(shí)應(yīng)盡量避免與標(biāo)準(zhǔn)標(biāo)識(shí)符同名,以免發(fā)生混淆。自定義標(biāo)識(shí)符必須先定義或說明,然后才能在程序中使用。3.限定標(biāo)識(shí)符由于ObjectPascal程序中可以引用多個(gè)單元,而各個(gè)單元中的全程變量、函數(shù)、過程等可能會(huì)同名,所以在程序中引用它們時(shí)需要使用限定標(biāo)識(shí)符來區(qū)分它們。也就是使用在另一個(gè)地方定義的標(biāo)識(shí)符,需要限定標(biāo)識(shí)符。限定標(biāo)識(shí)符的格式為: 標(biāo)識(shí)符1.標(biāo)識(shí)符2其中標(biāo)識(shí)符1限定標(biāo)識(shí)符2。限定符可以嵌套,如Form1.Button1.Click表示調(diào)用Form1窗體Button1的Click方法。一般標(biāo)識(shí)符可以由一個(gè)或多個(gè)具有適當(dāng)意義的英文單詞組成。ObjectPascal語言對(duì)于字母的大小寫不敏感。當(dāng)然,字符串中的大小寫字母是需要分清的。在編寫程序的時(shí)候要保持一定的風(fēng)格,不要有時(shí)候全部大寫標(biāo)識(shí)符,另一些時(shí)候又實(shí)行大小寫混寫。建議同學(xué)將標(biāo)識(shí)符中每個(gè)英文單詞的首位字母大寫,其余字母小寫。2.1.3注釋ObjectPascal語言中的注釋有下面三種形式:?組合符號(hào)“{”與“}”的成對(duì)使用表示它們之間的內(nèi)容為注釋部分。?組合符號(hào)“(*”與“*)”的成對(duì)使用表示它們之間的內(nèi)容為注釋部分。?符號(hào)“//”的單個(gè)使用表示所在行的該符號(hào)之后的內(nèi)容為注釋。注意:?注釋符“{”與“}”、“(*”與“*)”在使用時(shí)不支持注釋的嵌套,而且必須成對(duì)使用。?建議對(duì)于單行和少量幾行的注釋使用符號(hào)“//”,對(duì)于大塊注釋使用“{”和“}”或“(*”和“*)”。?有時(shí)可以利用注釋在代碼中形成一個(gè)醒目的標(biāo)志。比如利用注釋符號(hào)形成一個(gè)矩形方框,在其中可以添加一些重要的說明文字。在注釋符“{”或“(*”后緊接著的是一個(gè)美元符號(hào)“$”時(shí),表示該句是一個(gè)編譯器指令,它與普通的注釋不同,通常用來對(duì)編譯過程進(jìn)行設(shè)置。

例如:programProject1;{$APPTYPECONSOLE}//編譯器指令//////////////////////////////////////本例程用來說明注釋符的使用//////////////////////////////////////begin{下面的這條語句將字符串1和字符串2緊接著在屏幕上輸出}Writeln('String0'(*字符串1*)+'String1');//字符串2Writeln('按下回車鍵<Enter>退出。');Readln;end.運(yùn)行結(jié)果如下:String0String1上面的注釋文字“(*字符串1*)”實(shí)際上位于語句Writeln(‘String0’+’String1’);之間,但是對(duì)編譯結(jié)果沒有影響。因?yàn)樵诰幾g的時(shí)候,編譯器首先會(huì)將所有的注釋去除,然后再進(jìn)行語法分析。

2.2數(shù)據(jù)類型

描述客觀事物的數(shù)、字符以及所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序加工處理的符號(hào)的集合稱為數(shù)據(jù)。數(shù)據(jù)的一個(gè)重要特征就是其所屬的數(shù)據(jù)類型,數(shù)據(jù)類型不僅確定了該類型數(shù)據(jù)的表示形式和取值范圍,而且還確定了數(shù)據(jù)所能參加的各種運(yùn)算。ObjectPascal語言的數(shù)據(jù)類型比較豐富,圖2-1中列舉了一些預(yù)定義好的數(shù)據(jù)類型。此外,還可以通過數(shù)據(jù)類型聲明語句在預(yù)定義數(shù)據(jù)類型的基礎(chǔ)上定義新的數(shù)據(jù)類型。1.簡單數(shù)據(jù)類型簡單數(shù)據(jù)類型(Simple)包括有序數(shù)據(jù)類型(ordinal)和實(shí)數(shù)數(shù)據(jù)類型(real)。有序數(shù)據(jù)類型包括下面的一些數(shù)據(jù)類型:(1)整數(shù)類型整數(shù)類型(integer)包括了表2-1中的各種類型。(2)字符類型基本的字符類型(character)包括AnsiChar和WideChar兩種。AnsiChar類型的數(shù)據(jù)具有一個(gè)字節(jié),與擴(kuò)展的ANSI字符集對(duì)應(yīng)。WideChar類型的數(shù)據(jù)為雙字節(jié),與Unicode字符集對(duì)應(yīng)。通用的字符類型為Char,與AnsiChar類型相同。與其相關(guān)的函數(shù):在獲取字符類型數(shù)據(jù)的字節(jié)數(shù)時(shí)使用SizeOf函數(shù)。此外,可以使用函數(shù)Chr返回一個(gè)整型數(shù)對(duì)應(yīng)的字符,也可以使用Ord返回一個(gè)字符的序數(shù)。(3)布爾類型布爾類型(Boolean)包括以下四種:Boolean、ByteBool、WordBool和LongBool。ObjectPascal語言預(yù)定義了兩個(gè)常量標(biāo)識(shí)符False和True,可以為Boolean類型的數(shù)據(jù)賦值為False或True,對(duì)應(yīng)的序數(shù)值為0和1。當(dāng)ByteBool、WordBool和LongBool類型的數(shù)據(jù)為0時(shí),可以認(rèn)為是False;當(dāng)不為0時(shí),可以認(rèn)為是True。(4)枚舉類型

枚舉類型(enumerated)是由一組有序的標(biāo)識(shí)符組成的,它是通過枚舉表示其值的標(biāo)識(shí)符來定義的有序集合。形式如下:

typetypeName=(val1,...,valn)例如:

typeccolor=(red,blue,green,yellow,white,black);VarC:cclolor;枚舉類型的性質(zhì):

屬有序類型,序號(hào)從0開始,序號(hào)小的元素小于序號(hào)大的。但首元素?zé)o前趨,末元素?zé)o后繼。

同一枚舉元素不能在多個(gè)枚舉類型中出現(xiàn)。例:type//錯(cuò):兩個(gè)枚舉類型定義中都有carriagevehicle=(bike,carriage,motor);

car=(bus,carriage,lorry);枚舉類型只能進(jìn)行賦值運(yùn)算和關(guān)系運(yùn)算。枚舉變量的值只能用賦值語句獲得,不能讀寫,也不能直接輸出,要用序號(hào)和選擇語句相配合來輸出。例:VarYColor:(red,green,blue);……caseord(Ycolor)of0:memo1.lines.add('Red');1:memo1.lines.add('Green');2:memo1.lines.add('blue');end(5)子界類型子界類型(subrange)為某個(gè)有序類型的子集。定義的語法:<常量1>..<常量2>例:type//定義子界類型Month和DayMonth=1..12;//宿主類型為整型Day=Sun..Sat;//宿主為已定義的枚舉類型注意:

1.子界類型適合于其宿主類型的所有運(yùn)算,但受其上下界的限制。2.類型定義和變量定義可合二為一:Typesomeletter=‘a(chǎn)’..‘d’;VarCh1,Ch2:someletter;可合寫為:VarCh1,Ch2:‘a(chǎn)’..‘d’;

實(shí)數(shù)類型適用于實(shí)數(shù)類型的運(yùn)算符有:算術(shù)運(yùn)算:+、-、*、/關(guān)系運(yùn)算:=、<>、<、>、<=、>=2.字符串類型字符串類型(String)主要包括表2-3中的3種類型:字符串類型說明的語法格式為:

VAR<類型標(biāo)識(shí)符>:String[長度]注意:程序中一般是用String,而很少直接用ShortString或ANSIString來說明字符串變量。String類型與ANSIString類型完全等價(jià)3.結(jié)構(gòu)類型結(jié)構(gòu)類型(Struct)包括集合類型(set)、數(shù)組類型(array)、記錄類型(record)、文件類型(file)、類類型(class)、類引用類型(classreference)和接口類型(interface)等。(1)集合類型

集合類型(set)由有序類型的一些數(shù)值組成,這個(gè)有序類型就是集合的基類型。集合類型定義的語法格式為:

Type <類型名>=Setof<基類型>注意:在ObjectPascal中集合的元素個(gè)數(shù)不能超過256個(gè)。集合中的元素沒有先后順序的關(guān)系,相同的元素也不能出現(xiàn)在同一個(gè)集合中。通常先定義一個(gè)子界型,用來聲明集合類型。例:type SomeInts=77..277;TintSet=setofSomeInts;也可一步寫成:TintSet=Setof77..277;

VarASet,BSet:TintSet;集合類型的聲明和變量的聲明也可合二為一:VarYaoSet:Setof'a'..'z';也可用枚舉類型來聲明集合例如:TypeColor=(Red,Green,Blue);ColorSet=SetofColor;VarYaoColorSet:ColorSet;變量YaoColorSet的可能取值為:[];(空集)[Red];[Green];[Blue];[Red,Green];[Red,Blue];[Green,Blue];[Red,Green,Blue];

Pascal中,一個(gè)集合類型變量的取值,可是基類型所有元素按不同組合而成的子集,也可是全集。若有n個(gè)元素的集合,則可取2n個(gè)不同組合的子集。(2)數(shù)組類型

數(shù)組類型(array)的數(shù)據(jù)為某一類相同類型的元素按一定的順序組成的序列,包括靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組兩種?,F(xiàn)在Delphi支持動(dòng)態(tài)數(shù)組,也就是說數(shù)組可以動(dòng)態(tài)分配存儲(chǔ)空間。

1.靜態(tài)數(shù)組所謂靜態(tài)數(shù)組就是定義后,其大小不再改變的數(shù)組,定義的語法形式為:

Type

<數(shù)組標(biāo)識(shí)符>=ARRAY[下標(biāo)類型]OF<元素類型>例如:

typeMyArray=array[1..100]ofChar;//一維數(shù)組typeTMatrix=array[1..10]ofarray[1..50]ofReal;//兩維數(shù)組

TypeTMatrix=array[1..10,1..50]ofReal;//與上面的兩維數(shù)組相同說明:其中“下標(biāo)類型”指定了數(shù)組類型變量的分量個(gè)數(shù)、分量的排列次序及其下標(biāo)的數(shù)據(jù)類型,它可以是任何順序類型,如整數(shù)型、字符型、布爾型和枚舉型等;“元素類型”是數(shù)組中各個(gè)元素的類型,它可以是任何類型。數(shù)組可以是多維的,每一維的下標(biāo)類型指明了元素的數(shù)目。數(shù)組可以在每一維中用所有下標(biāo)類型的數(shù)值來存取其中的元素。多維數(shù)組各個(gè)下標(biāo)可以是不同的基類型。2.動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組沒有固定的大小和長度,在為數(shù)組的元素賦值或調(diào)用標(biāo)準(zhǔn)函數(shù)SetLength時(shí),系統(tǒng)才為數(shù)組分配內(nèi)存。定義的語法形式為:

Type<數(shù)組類型標(biāo)識(shí)符>=ARRAYOF<基類型>動(dòng)態(tài)數(shù)組的下標(biāo)都是整數(shù),并且是從0開始的。

多維動(dòng)態(tài)數(shù)組用嵌套的ARRAYOF結(jié)構(gòu)來定義:例如:varMyFlexibleArray:arrayofReal;//定義動(dòng)態(tài)數(shù)組varms:arrayofarrayofstring;//定義二維動(dòng)態(tài)數(shù)組可以通過過程SetLength來為動(dòng)態(tài)數(shù)組指定空間大?。豪纾篠etLength(MyFlexibleArray,20);//為動(dòng)態(tài)數(shù)組指定空間大小其中數(shù)組MyFlexibleArray的索引值為0~19。(3)記錄類型

記錄類型(record)是一組不同類型元素的集合,用來表示一個(gè)具體的實(shí)物。其中的元素稱為域。在記錄類型中為每個(gè)域指定了一個(gè)名稱和數(shù)據(jù)類型(數(shù)據(jù)類型可以是對(duì)象Pascal語言中預(yù)定義的類型,也可以是程序員自定義的類型)。

定義記錄類型的語法格式為:RECORD<標(biāo)識(shí)符1>:<類型1>;<標(biāo)識(shí)符2>:<類型2>;......END;要引用記錄中的一個(gè)字段,可以使用限定標(biāo)識(shí)符的格式。也就是在記錄名與字段名(該字段說明的變量標(biāo)識(shí)符)間用原點(diǎn)符號(hào)連接。類和對(duì)象可以看作是記錄類型的擴(kuò)展。Delphi庫趨向于用類替代記錄類型,不過WindowsAPI中定義了許多記錄類型。記錄類型中允許包含variant域,它表示多個(gè)域能公用同一內(nèi)存區(qū),而且域可以是不同類型。variant記錄類型的應(yīng)用不符合類型安全原則,因此不提倡在編程中使用,初學(xué)者更是如此。(4)文件類型文件類型的定義中并沒有定義其元素的個(gè)數(shù),語法格式為:Type

<標(biāo)識(shí)符>=FILEOF<類型標(biāo)識(shí)符>;注意:若省略了OF和類型標(biāo)識(shí)符,則這個(gè)類型代表無類型的文件。定義了文件類型后,就能打開一個(gè)與這個(gè)結(jié)構(gòu)相應(yīng)的物理文件、向文件中寫入整數(shù)、或者從文件中讀取當(dāng)前的值。

(5)類類型

類類型也稱類或?qū)ο箢愋?。類是包括了繼承權(quán)(即類繼承)、字段(即記錄或?qū)ο笾械脑兀?、方法和屬性等?nèi)容的結(jié)構(gòu)。類的實(shí)例稱為對(duì)象,類的字段、方法即屬性稱為類的成員。4.指針類型指針類型變量用于保存內(nèi)存地址,在說明時(shí)必須說明所指向的變量的類型。聲明的語法格式為:TYPE<指針類型名>=^<類型名>其中<類型名>是指針?biāo)赶虻臄?shù)據(jù)類型。在聲明了指針變量后,系統(tǒng)并未為其分配內(nèi)存,指針變量也未初始化。使用標(biāo)準(zhǔn)函數(shù)new可以解決該問題。Dispose函數(shù)是new函數(shù)的逆過程,通過使用new函數(shù)獲得的內(nèi)存空間必須使用dispose函數(shù)來釋放。注意:1.@運(yùn)算符放在變量的前面可以獲取變量的地址2.^運(yùn)算符放在數(shù)據(jù)類型的前面表示定義該類型的一個(gè)指針類型;如果放在一個(gè)指針的后面,則獲取該指針指向的地址空間的內(nèi)容3.無類型指針的定義P:Pointer;無類型指針僅包含一個(gè)內(nèi)存地址,可以指向任何類型的數(shù)據(jù)。5.過程與函數(shù)類型(procedure)

Pascal中的例程有兩種形式:過程和函數(shù)。理論上說,過程是你要求計(jì)算機(jī)執(zhí)行的操作,函數(shù)是能返回值的計(jì)算。兩者突出的不同點(diǎn)在于:函數(shù)能返回計(jì)算結(jié)果,即有一個(gè)返回值,而過程沒有。兩種類型的例程都可以帶多個(gè)給定類型的參數(shù)。6.可變類型(variant)可變類型(variant)主要用于實(shí)際操作類型變化或編譯時(shí)類型不能確定的情況。定義的語法格式為:

<變量名>:VARIANT可變類型的變量在創(chuàng)建后,總被初始化為Unassigned的值,表示還沒有賦值??勺冾愋涂梢园齀nt64、結(jié)構(gòu)類型和指針類型之外的所有類型,但其自身不能包含自身。在表達(dá)式和賦值語句中,可變類型的變量可以和整數(shù)、實(shí)數(shù)、字符串、布爾類型以及其它的可變類型等混合使用,編譯器將自動(dòng)進(jìn)行類型轉(zhuǎn)換。本次課導(dǎo)讀常量和變量運(yùn)算符和表達(dá)式常用函數(shù)和過程語句三種程序結(jié)構(gòu)結(jié)合例程講解控件

2.3常量與變量在程序的執(zhí)行過程中其值保持不變,稱為常量;在程序的執(zhí)行過程中其值可以被改變的稱為變量。2.3.1常量1.常量和常量表達(dá)式常量在程序中有兩種形式,第一種就是值本身(直接常量),第二種是用常量名表示的常量(符號(hào)常量),這需要在程序中定義。在ObjectPascal中還允許使用常量表達(dá)式,也就是在編譯時(shí)就可以計(jì)算的表達(dá)式。2.定義符號(hào)常量

定義符號(hào)常量有兩種類型:純常量(TrueConstants)和類型常量(TypedConstants)。⑴純常量的定義純常量的值在定義之后就不再變化,定義純常量的語法格式為:

CONST<常量標(biāo)識(shí)符>=<常量或常量表達(dá)式>關(guān)鍵字CONST可以定義多個(gè)常量。例如:Constpi=3.1415926⑵類型常量的定義類型常量可以保存數(shù)組、記錄、過程以及指針等類型的值。定義類型常量的語法格式為:

CONST<常量標(biāo)識(shí)符>:<類型>=<值>例如:constPi:Double=3.1415926;類型常量的用法同變量完全一樣,可以對(duì)類型常量重新賦值。2.3.2變量1.標(biāo)準(zhǔn)數(shù)據(jù)類型變量的定義變量定義的格式為:

VAR<變量名列表>:<類型>;變量名之間用(,)分隔。一個(gè)VAR語句可以定義多個(gè)不同類型的變量。不同的位置變量的作用范圍不同。var

s,t,r:string;I,j:integer;flag:Boolean;2.自定義類型變量的定義對(duì)自定義類型的變量,必須先有類型的定義,然后才能定義變量。如:在程序的說明部分中定義枚舉類型Color的定義: TypeColor=(Red,Blue,Green,Yellow,Orange);則可以利用Color類型定義變量: VARFirstColor:Color;3.變量的初始化在函數(shù)或過程內(nèi)部定義的變量稱為局部變量,其余的稱為全局變量。全局變量在定義時(shí)就可以進(jìn)行初始化,其語法是:

VAR<變量名列表>:<類型>=<常量表達(dá)式>;同時(shí)定義多個(gè)全局變量時(shí),不能進(jìn)行初始化,另外對(duì)文件類型和可變類型的變量也不能初始化。沒有初始化的全局變量在編譯時(shí)被賦值0,而局部變量(不能初始化)的值在賦值前是隨機(jī)的。

2.4運(yùn)算符和表達(dá)式ObjectPascal語言中的運(yùn)算符(Operators)有:

@、not、^、*、/、div、mod、and、shl、shr、as、+、-、or、xor、=、>、<、<>、<=、>=、in和is等。按照操作數(shù)數(shù)目的多少來分,運(yùn)算符分為下面兩類:單目運(yùn)算符(UnaryOperator)和雙目運(yùn)算符(BinaryOperator)。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符對(duì)浮點(diǎn)數(shù)和整數(shù)進(jìn)行加、減、乘、除和取模運(yùn)算,如表2-5所示。注意:其中+和-運(yùn)算符還可以作為單目運(yùn)算符,放在在浮點(diǎn)數(shù)或整數(shù)前,分別表示正數(shù)和負(fù)數(shù)。此外,+運(yùn)算符還可以用在字符串的運(yùn)算表達(dá)式中,可以將兩個(gè)字符串接在一起。+、-和*運(yùn)算符還可以用在集合運(yùn)算表達(dá)式中。2.邏輯運(yùn)算符邏輯運(yùn)算符對(duì)邏輯類型的操作數(shù)進(jìn)行運(yùn)算,數(shù)據(jù)結(jié)果也為邏輯類型,如表2-6所示。3.位運(yùn)算符位運(yùn)算符對(duì)整型的數(shù)據(jù)進(jìn)行按位操作,所得結(jié)果也為整型數(shù)據(jù),如表2-7所示。4.字符串運(yùn)算符加號(hào)(+)還可以作為字符串運(yùn)算符,它可以將兩個(gè)字符串聯(lián)接在一起。如果兩個(gè)字符串都是短字符串,那么在結(jié)果字符串長度超過255個(gè)字符的情況下,只有前面255個(gè)字符有效。

在復(fù)雜的表達(dá)式中,各種運(yùn)算符的優(yōu)先級(jí)分別如下:?第一級(jí)(最高):@、not?第二級(jí):*、/、div、mod、and、shl、shr、as?第三級(jí):+、-、or、xor?第四級(jí)(最低):=、<>、<、>、<=、>=、in、is

2.5語句語句由保留字、屬性、函數(shù)、運(yùn)算符以及能夠生成Delphi編輯器可識(shí)別指令的符號(hào)組成。2.5.1語句的書寫規(guī)則ObjectPascal程序語句的書寫比較自由,可以把多個(gè)語句放在一行程序中,也可以一個(gè)語句分多行寫,只要遵守一個(gè)規(guī)則:每個(gè)語句必須以分號(hào)“;”結(jié)束即可。最簡單的語句是一個(gè)什么也不做的“空語句”:2.5.2幾種常見的語句在ObjectPascal語言中,我們先了解一下幾種類型的語句:1.聲明語句1)常量的聲明形式如下列所示:

constPI=3.1415926535897932385;2)在基本數(shù)據(jù)類型的基礎(chǔ)上,還可以利用保留字type自定義一些數(shù)據(jù)類型,例如:typeMyType=Array[1..100]ofreal;3)利用保留字var可以聲明已存在數(shù)據(jù)類型的變量,例如:varX,Y:Integer;M:MyType;2.賦值語句賦值語句的形式如下:

variable:=expression例如:Done:=(I>=1)and(I<100);//將邏輯表達(dá)式的結(jié)果賦值為一個(gè)變量Hue1:=[Blue,Succ(C)];//將一個(gè)子集賦值為一個(gè)變量I:=Sqr(J)-I*K;//將一個(gè)表達(dá)式的結(jié)果賦值為一個(gè)變量Shortint(MyChar):=122;//給類型轉(zhuǎn)換后的變量賦值MyString[I]:='A';//給數(shù)組的一個(gè)元素賦值TMyObject.SomeProperty:=True;//給對(duì)象的屬性賦值

Delphi組件屬性的賦值⑴屬性賦值給屬性賦值的語法格式為:<對(duì)象.屬性>:=<屬性值>⑵組件屬性的重要類別有些對(duì)象本身就是對(duì)象,如Font屬性,設(shè)置這些對(duì)象屬性可以使用下列的方法:

Edit1.Font.Size:=24;{設(shè)置字體的大小} Edit1.Font.Color:=ClRed;{設(shè)置字體的顏色}⑶同時(shí)設(shè)置一個(gè)對(duì)象的多個(gè)屬性若要同時(shí)設(shè)置一個(gè)對(duì)象的多個(gè)屬性時(shí),可使用With語句。語法格式:

withlabel1do

begincaption:=‘歡迎使用!';font.Color:=clred;

end;3.復(fù)合語句首尾使用begin和end括起來一組語句稱為復(fù)合語句。復(fù)合語句可以嵌套使用,也允許空的復(fù)合語句出現(xiàn),也就是在begin和end之間沒有其他語句。例如:beginZ:=X;X:=Y;Y:=Z;beginend;end;

2.6標(biāo)準(zhǔn)函數(shù)例舉

ObjectPascal把常用的一些運(yùn)算定義為系統(tǒng)標(biāo)準(zhǔn)函數(shù)。2.5.2

數(shù)學(xué)運(yùn)算函數(shù)1.絕對(duì)值函數(shù)絕對(duì)值函數(shù)定義:functionAbs(x);2.平方與平方根函數(shù)平方函數(shù)的定義:functionSqr(x:Extended):Extended;平方根函數(shù)的定義:functionSqrt(x:Extended):Extended;3.三角函數(shù)functionSin(x:Extended):Extended;functionCos(x:Extended):Extended;functionArcTan(x:Extended):Extended;4.整數(shù)部分與小數(shù)部分

取整數(shù)函數(shù)的定義:functionInt(x:Extended):Extended;

取小數(shù)函數(shù)的定義:functionFrac(x:Extended):Extended;6.指數(shù)函數(shù)和對(duì)數(shù)函數(shù)指數(shù)函數(shù)的定義:functionExp(x:Real):Real;對(duì)數(shù)函數(shù)的定義:functionLn(x:Real):Real;7.隨機(jī)函數(shù)

隨機(jī)函數(shù)的定義:functionRandom[(Range:Integer)];8.π函數(shù)函數(shù)定義為:functionPi:Extended;2.5.2字符處理函數(shù)1.大小寫轉(zhuǎn)換函數(shù)其函數(shù)定義分別為:functionLowerCase(constS:string):string;functionUpperCase(constS:string):string;2.比較先后順序函數(shù)其函數(shù)定義分別為:functionCompareStr(constS1,S2:string):Integer;functionCompareText(constS1,S2:string):Integer;3.合并字符串其過程定義為:procedureAppendStr(varDest:string;constS:string);其函數(shù)定義為:functionConcat(s1[,s2,...,sn]:string):string;4.查找字符串函數(shù)其函數(shù)定義為:functionPos(Substr:string;S:string):Integer;5.求字符串長度函數(shù)其函數(shù)定義為:functionLength(S):Integer;6.截取子字符串函數(shù)其函數(shù)定義為:functionCopy(S;Index,Count:Integer):string;7.刪除子字符串過程其過程定義為:procedureDelete(varS:string;Index,Count:Integer);8.插入子字符串過程其過程定義為:procedureInsert(Source:string;varS:string;Index:Integer);9.數(shù)值與字符串轉(zhuǎn)換(1)過程Str用來將數(shù)值型數(shù)據(jù)轉(zhuǎn)換成字符串,其過程定義為:procedureStr(X[:Width[:Decimals]];varS);(2)過程Val用來將字符串轉(zhuǎn)換成數(shù)值型數(shù)據(jù),其過程定義為:procedureVal(S;varV;varCode:Integer);(3)

函數(shù)IntToStr用來將整型數(shù)據(jù)轉(zhuǎn)換成字符串,其函數(shù)定義為:functionIntToStr(Value:Integer):string;overload;(4)函數(shù)FloatToStr用來將實(shí)型數(shù)據(jù)轉(zhuǎn)換成字符串,其函數(shù)定義為:functionFloatToStr(Value:Extended):string;

(5)函數(shù)StrToInt用來將數(shù)字字符串轉(zhuǎn)換成整型數(shù)值,其函數(shù)定義為:functionStrToInt(constS:string):Integer;

(6)函數(shù)StrToFloat用來將數(shù)字字符串轉(zhuǎn)換成實(shí)型數(shù)值,其函數(shù)定義為:functionStrToFloat(constS:string):Extended;(7)函數(shù)IntToHex用來將10進(jìn)制整數(shù)轉(zhuǎn)換成或16進(jìn)制格式,其函數(shù)定義為:functionIntToHex(Value:Integer;Digits:Integer):string;10.ASCII轉(zhuǎn)換為字符函數(shù)Chr用來將ASCII碼值轉(zhuǎn)換成字符,其函數(shù)定義為:functionChr(X:Byte):Char;11.格式化函數(shù)函數(shù)Format用來將字符串按照指定的格式返回,故稱格式化函數(shù)。其函數(shù)定義為:functionFormat(constFormat:string;constArgs:arrayofconst):string;類型和格式信息由字符“%”開頭,格式如下:%[〈參數(shù)位置〉:][-][〈所占寬度〉][.〈小數(shù)位數(shù)〉]〈類型〉2.5.3日期時(shí)間函數(shù)1.日期與時(shí)間函數(shù)

函數(shù)Now用來返回系統(tǒng)當(dāng)前的日期和時(shí)間,其函數(shù)定義為:functionNow:TDateTime;2.日期函數(shù)

函數(shù)Date用來返回系統(tǒng)當(dāng)前的日期,其函數(shù)定義為:functionDate:TDateTime;3.時(shí)間函數(shù)函數(shù)Time用來返回系統(tǒng)當(dāng)前的時(shí)間,其函數(shù)定義為:functionTime:TDateTime;4.轉(zhuǎn)換函數(shù)(1)函數(shù)DateToStr、TimeToStr、DateTimeToStr可以分別將日期和時(shí)間(TdateTime類型)轉(zhuǎn)換成字符串,其函數(shù)定義分別為:functionDateToStr(Date:TDateTime):string;functionTimeToStr(Time:TDateTime):string;functionDateTimeToStr(DateTime:TDateTime):string;(2)函數(shù)EncodeDate與過程DecodeDate可以在TdateTime類型的日期值與整型的年、月、日之間互相轉(zhuǎn)換,其定義分別為:functionEncodeDate(Year,Month,Day:Word):TDateTime;procedureDecodeDate(Date:TdateTime,varYear,Month,Day:Word);

(3)函數(shù)EncodeTime與過程DecodeTime可以在TdateTime類型的時(shí)間值與整型的小時(shí)、分、秒、毫秒之間互相轉(zhuǎn)換,其定義分別為:functionEncodeTime(Hour,Min,Sec,MSec:Word):TDateTime;procedureDecodeTime(Time:TdateTime,varHour,Min,Sec,MSec:Word);5.星期函數(shù)函數(shù)DayOfWeek用來返回日期所對(duì)應(yīng)的星期數(shù),其函數(shù)定義為:functionDayOfWeek(Date:TDateTime):Integer;6.日期與時(shí)間的格式函數(shù)FormatDateTime用來處理日期與時(shí)間的格式。其函數(shù)定義為:functionFormatDateTime(constFormat:String;DateTime:TDateTime):String;2.5.4順序類型函數(shù)1.順序類型2.順序函數(shù)(1)序數(shù)函數(shù)Ord返回?cái)?shù)據(jù)的序數(shù),其定義為:functionOrd(X):Longint;(2)前趨函數(shù)Pred返回?cái)?shù)據(jù)的前趨值,其定義為:functionPred(X);(3)后繼函數(shù)Succ返回?cái)?shù)據(jù)的后繼值,其定義為:functionSucc(X);(4)首序數(shù)函數(shù)Low返回順序型數(shù)據(jù)取值集合中的第一個(gè)值(序數(shù)最?。?,其定義為:functionLow(X);(5)末序數(shù)函數(shù)High返回順序型數(shù)據(jù)取值集合中的最末一個(gè)值(序數(shù)最大),其定義為:functionHigh(X);

2.7順序結(jié)構(gòu)順序結(jié)構(gòu)是程序設(shè)計(jì)中最簡單、最常用的基本結(jié)構(gòu)。在個(gè)結(jié)構(gòu)中,各操作塊(簡稱塊,對(duì)于程序中的“程序段”)按照出現(xiàn)的先后順序以此執(zhí)行。它是任何程序的基本結(jié)構(gòu),即使在選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)中,也常以順序結(jié)構(gòu)為其子結(jié)構(gòu)。

2.8選擇結(jié)構(gòu)選擇結(jié)構(gòu)是根據(jù)所給定的條件成立(真)與否(假),而決定從各實(shí)際可能的不同分支中選擇執(zhí)行某一分支的相應(yīng)操作的結(jié)構(gòu)。在Delphi中,實(shí)現(xiàn)選擇結(jié)構(gòu)的是IF語句和Case語句。這兩種語句又稱為條件語句,條件語句的功能就是根據(jù)表達(dá)式的值有選擇地執(zhí)行一組語句。2.8.1IF語句

1.單分支的條件語句單分支條件語句的語法格式為:

IFe1THEN<語句1>;其中e1為Boolean表達(dá)式。單分支的條件語句的含義為當(dāng)e1的值為真時(shí),執(zhí)行<語句1>,當(dāng)e1的值為假時(shí),則執(zhí)行<語句1>下面的語句。2.雙分支的條件語句雙分支條件語句的語法格式為:

IFe1THEN<語句1>ELSE<語句2>;其中e1為Boolean表達(dá)式。雙分支的條件語句的含義為當(dāng)e1的值為真時(shí),執(zhí)行<語句1>,當(dāng)e1的值為假時(shí),則執(zhí)行<語句2>。3.嵌套形式的條件語句嵌套形式條件語句的語法格式為:IFe1THEN<語句1>ELSEIFe2THEN<語句2>......ELSEIFenTHEN<語句n>ELSE<語句0>;2.8.2CASE語句CASE語句在很多情況下可以代替嵌套IF語句,去實(shí)現(xiàn)不同情況的選擇,其語法格式為:CASEe1OFx1:<語句1>;x2:<語句2>;......xn:<語句n>;[ELSE<語句>;]END;注意:e1可以是任何返回值為有序類型(整型、字符型、布爾型、枚舉型、子界型)的表達(dá)式,而x1~xn可以是一個(gè)數(shù)、一個(gè)定義過的變量或其它常量表達(dá)式,但必須是與e1兼容的有序類型。CASE語句的含義為,當(dāng)e1的值與x1,x2,...,xn相同時(shí),就執(zhí)行它后面的語句,否則執(zhí)行ELSE后面的<語句>。

2.9循環(huán)結(jié)構(gòu)在程序設(shè)計(jì)中,從某處開始有規(guī)律地反復(fù)執(zhí)行某一程序塊的現(xiàn)象稱為“循環(huán)”,完成這一功能的程序結(jié)構(gòu)稱為“循環(huán)結(jié)構(gòu)”,而其中重復(fù)執(zhí)行的程序塊稱為“循環(huán)體”。ObjectPascal提供的循環(huán)結(jié)構(gòu)語句有3鐘,它們分別是:While語句、Repeat語句以及For語句。2.9.1While(當(dāng)型循環(huán))語句當(dāng)需要多次執(zhí)行某一個(gè)(或一組)語句或一個(gè)程序段時(shí),ObjectPascal提供三種可供選用的重復(fù)語句:WHILE、REPEAT和FOR語句。While語句的語法格式為:

WHILE<e1>DO[<語句>];當(dāng)條件為真時(shí),執(zhí)行循環(huán)<語句>。1.Break(強(qiáng)制退出循環(huán))語句Break語句用于從For語句、While語句或Repeat語句中強(qiáng)行退出。2.Continue(強(qiáng)制縮短循環(huán))語句Continue語句用于從For語句、While語句或Repeat語句中強(qiáng)行結(jié)束本次循環(huán),開始下一次循環(huán)。2.9.2Repeat(直到型循環(huán))語句Repeat語句就是重復(fù)一個(gè)代碼塊的執(zhí)行,直到滿足條件為止。這種循環(huán)的執(zhí)行次數(shù)是不確定的,其語法格式為:REPEAT<語句>;UNTIL<條件表達(dá)式>;<語句>被稱為循環(huán)體。由于REPEAT語句是先執(zhí)行循環(huán)體,再對(duì)表達(dá)式求值,所以REPEAT語句至少執(zhí)行循環(huán)體一次。2.9.3For(計(jì)數(shù)型循環(huán))語句1.FOR語句的一般形式For語句的語法格式為:

FORvar1:=exp1TO/DOWNTOexp2DO[<語句>];

這里exp1為初值表達(dá)式,exp2為終值表達(dá)式。在執(zhí)行FOR語句的過程中,初值表達(dá)式和終值表達(dá)式只計(jì)算一次,F(xiàn)OR語句執(zhí)行規(guī)定次數(shù)的循環(huán)。2.FOR語句的嵌套FOR語句的循環(huán)體還可以是一個(gè)FOR語句,從而構(gòu)成多重循環(huán)。3.使用FOR語句的注意事項(xiàng)(1)在循環(huán)體內(nèi)不能改變循環(huán)變量的值(2)循環(huán)變量的值在循環(huán)結(jié)束后不再確定4.三種循環(huán)語句的關(guān)系對(duì)已知循環(huán)次數(shù)的情形,可以使用FOR語句;對(duì)循環(huán)次數(shù)未知,而只知道循環(huán)的執(zhí)行條件時(shí),可以使用REPEAT語句或WHILE語句。若至少執(zhí)行一次循環(huán)體,則用REPEAT語句,否則使用WHILE語句。實(shí)際上FOR語句也可以表示為REPEAT語句或WHILE語句。過程與函數(shù)過程的分類、創(chuàng)建、調(diào)用函數(shù)的創(chuàng)建、調(diào)用參數(shù)傳遞函數(shù)與過程的重載嵌套與遞歸變量的作用域

2.10過程與函數(shù)過程和函數(shù)都是能夠完成某個(gè)(或某些)特定功能的程序段,它們?cè)谡Z法功能上相當(dāng)于一個(gè)簡單語句,也就是說在簡單語句出現(xiàn)的地方,都可以使用過程或函數(shù)。過程和函數(shù)統(tǒng)稱為例程,它們都是可以在程序中調(diào)用的實(shí)現(xiàn)特定功能的獨(dú)立語句塊,其區(qū)別在于函數(shù)可返回值,而過程則沒有。Delphi本身提供了大量的內(nèi)部例程,可以在程序中直接使用;用戶也可以自定義例程或直接調(diào)用WindowsAPI函數(shù)。2.10.1過程Delphi的過程分為標(biāo)準(zhǔn)過程與自定義過程兩種。標(biāo)準(zhǔn)過程是指系統(tǒng)內(nèi)部定義的過程,無需編寫代碼,即可直接調(diào)用。而自定義過程則由用戶自行編寫代碼以完成指定的操作,它包括事件過程與通用過程兩類。事件過程依附與對(duì)象,是Delphi應(yīng)用程序的主體,當(dāng)該對(duì)象響應(yīng)指定事件時(shí)被執(zhí)行。通用過程告訴應(yīng)用程序如何完成一項(xiàng)指定的任務(wù)。1.事件過程的創(chuàng)建和調(diào)用(1)事件過程的創(chuàng)建在對(duì)象觀察器(ObjectInspector)中選擇指定對(duì)象(控件),然后在事件(Events)選項(xiàng)卡中選擇指定的事件名稱,并用鼠標(biāo)雙擊其右邊的空白區(qū)域,Delphi將自動(dòng)產(chǎn)生一個(gè)默認(rèn)的事件過程。一個(gè)事件過程也可以被多個(gè)對(duì)象、多個(gè)事件共享。其方法是:首先為其中的一個(gè)對(duì)象事件建立事件過程,然后在創(chuàng)建其他對(duì)象的事件過程時(shí),從事件名稱右邊的下拉列表中選擇已經(jīng)建立的事件過程名即可。(2)事件過程的調(diào)用我們可以在過程代碼中調(diào)用已經(jīng)創(chuàng)建的事件過程。如為按鈕Button3創(chuàng)建獨(dú)立的OnClick事件過程來調(diào)用已經(jīng)存在的Button1Click事件過程:ProcedureTEorml.Button3Click(Sender:Tobject);beginForml.ButtonlClick(Sender);end;上述調(diào)用語句中的實(shí)際參數(shù)Sender還可以改為Forml.Button3,即:Forml.ButtonlClick(Forml.Button3);2.通用過程的語法格式通用過程在調(diào)用之前必須首先定義,定義一個(gè)通用過程也稱為過程聲明。過程聲明要按照Delphi的語法,通用過程的語法格式與事件過程相仿,其一般形式為:Procedure<過程名>[(<形參表>)][<局部聲明>]begin[<語句列>];end;以保留字Procedure開頭的第一行,稱為過程首部,其余部分稱為過程體。(1)過程首部<過程名>使用與變量名相同的命名規(guī)則。一個(gè)過程只能有一個(gè)唯一的過程名。<行參表>由若干個(gè)形式參數(shù)組成,它指明了從調(diào)用過程傳遞給過程的實(shí)參(實(shí)際參數(shù))個(gè)數(shù)和類型。所有的形式參數(shù)必須說明類型(有點(diǎn)像變量說明),相同類型的行參之間用逗號(hào)隔開,不同類型的行參之間用分號(hào)隔開。形參說明的格式為:

[Var|Const]<行參名>:<類型>I.變量參數(shù)若要將一個(gè)值從過程傳遞給調(diào)用者,則必須在定義它們時(shí)使用變量參數(shù)。在被調(diào)用的過程的形參表中的有關(guān)形參前加上保留字VAR定義變量參數(shù)。變量參數(shù)按傳址方式傳遞參數(shù),形參在過程中所作的改變,推出程序后將影響實(shí)參的值II.值參數(shù)值參數(shù)可以像過程的本地變量一樣使用,其初值來自過程調(diào)用時(shí)的實(shí)參數(shù),對(duì)值參數(shù)的修改并不影響實(shí)參數(shù)。值參數(shù)是按傳值方式傳遞參數(shù)的,形參在過程中所作的改變,推出程序后不影響實(shí)參的值。III.常量參數(shù)常量參數(shù)可以像局部的只讀變量來使用,其初值來自過程調(diào)用時(shí)的實(shí)參數(shù),實(shí)參數(shù)必須是一個(gè)表達(dá)式,且表達(dá)式的類型不能是文件類型或包含文件的其它結(jié)構(gòu)類型。在被調(diào)用的過程的形參表中的有關(guān)形參前加上保留字CONST。不允許在過程中給常量參數(shù)賦值,并且常量參數(shù)不能作為實(shí)參數(shù)傳遞給另一個(gè)過程或函數(shù)。(2)過程體過程體是一個(gè)程序段,由<局部聲明>部分與可執(zhí)行部分組成。<局部聲明>部分用來聲明該過程中所使用的類型、常量、變量,這些類型、常量、變量的作用范圍只限于該過程內(nèi)部,與過程體外的同名對(duì)象無關(guān)。在<局部聲明>部分還可以包含另一個(gè)過程或函數(shù)聲明(稱為內(nèi)嵌的過程或函數(shù))??蓤?zhí)行部分由begin開始,以end結(jié)束,end后面要緊根一個(gè)分號(hào)。

3.通用過程的調(diào)用通用過程的調(diào)用通過過程語句來完成,過程語句的格式如下:

過程名(<實(shí)參表>);

如果過程沒有形參時(shí),過程語句的格式如下:

過程名;或

過程名();通用過程只能在其作用域內(nèi)進(jìn)行調(diào)用。通用過程的作用域在其聲明之后。2.10.2函數(shù)

函數(shù)是子程序的另一種形式,當(dāng)子程序的執(zhí)行返回一個(gè)值時(shí),使用函數(shù)就比較簡單。Delphi提供了許多內(nèi)部函數(shù),如Sqrt、Cos或Format。當(dāng)在程序中需要多次用到某一公式或要處理某一函數(shù)關(guān)系,而又沒有現(xiàn)成的內(nèi)部函數(shù)可以使用時(shí),Delphi允許編寫用戶自定義的函數(shù)。

1.函數(shù)的語法格式與過程一樣,函數(shù)也是一個(gè)獨(dú)立的程序段,可讀取參數(shù)、執(zhí)行一系列語句并改變其參數(shù)的值。與過程不同的是,函數(shù)具有返回值。函數(shù)的語法格式為:

Function<函數(shù)名>[(<形參表>)]:<返回類型>;[<局部聲明>]begin[<語法列>];end;以保留字Function開頭的第一行,稱為函數(shù)首部,其余部分稱為函數(shù)體。

2.函數(shù)的調(diào)用函數(shù)的調(diào)用比較簡單,可以像使用Delphi內(nèi)部函數(shù)一樣來調(diào)用函數(shù),即在與函數(shù)返回值兼容的表達(dá)式中按下述格式調(diào)用:

<函數(shù)名>(<實(shí)參表>)與通用過程相同,函數(shù)只能在其作用域內(nèi)進(jìn)行調(diào)用,函數(shù)的作用域在其聲明之后。函數(shù)可以沒有參數(shù),在調(diào)用無參函數(shù)時(shí)不發(fā)生虛實(shí)結(jié)合,調(diào)用無參函數(shù)得到一個(gè)固定的值。

2.10.3幾個(gè)概念1.形式參數(shù)與實(shí)際參數(shù)過程定義頭語句:

Procedure過程名(形式參數(shù))函數(shù)定義頭語句:

Function函數(shù)名(形式參數(shù)):函數(shù)類型過程調(diào)用:過程名(實(shí)參數(shù))函數(shù)調(diào)用:函數(shù)名(實(shí)參數(shù))【注】寫在表達(dá)式中例:定義過程:Proceduretestsub(r:Integer,aa:Real,re:Boolean,cc:String,x:Int64)調(diào)用過程:testsub(18,cj,rr,“Test”,bm)2.參數(shù)傳遞方式(1)變量參數(shù)使用保留字var,傳遞方式為“按地址傳遞”,如果在過程或函數(shù)中改變形參變量的值,將同時(shí)影響實(shí)參變量的值。

(2)常量參數(shù)使用保留字Const,無論實(shí)參是否變量,常量參數(shù)在過程中總是被當(dāng)作常量,其值不能被改變。

(3)值參數(shù)參數(shù)前面如果沒有保留字,傳遞方式為“按值傳遞”,如果在過程或函數(shù)中改變形參變量的值,則所作變動(dòng)不會(huì)影響實(shí)參變量。

(4)外部參數(shù)使用保留字out,傳遞方式為“按地址傳遞”,當(dāng)調(diào)用含有外部參數(shù)的過程或函數(shù)時(shí),所引用的實(shí)參變量的值將被舍棄,形參變量僅被用來作為一個(gè)容器來存儲(chǔ)過程或函數(shù)執(zhí)行的中間結(jié)果。

3.使用缺省參數(shù)

在聲明過程或函數(shù)時(shí),可以給形參指定一個(gè)缺省值,指定缺省值的方法是:在形參的類型后面使用“=”,并給出一個(gè)具體的值(常量)。如:ProcedureMyprocedure(x:Real,y:Real=10);begin…end;對(duì)上述過程,下面的兩個(gè)調(diào)用語句是等效的:Myprocedure(a,10);Myprocedure(a);應(yīng)該注意的是,在過程或函數(shù)定義中,不能讓前面的形參有缺省值,而后面的形參沒有。4.函數(shù)與過程的重載

在Delphi中,允許有名字相同而參數(shù)不同的過程或函數(shù),這就是過程和函數(shù)的重載(Overload)。注意:在定義有默認(rèn)參數(shù)的重載函數(shù)和過程時(shí),必須讓系統(tǒng)能從參數(shù)中區(qū)分出應(yīng)該調(diào)用哪一個(gè)函數(shù)或過程,否則該定義是非法的。

5.嵌套與遞歸(1)過程或函數(shù)的嵌套在過程或函數(shù)的定義中,過程體或函數(shù)體的開始部分可以包含局部變量的定義,主要用于定義在本過程或函數(shù)中用到的局部變量,若在其中定義了其它的過程或函數(shù),則稱為過程或函數(shù)的嵌套。嵌套必須是完全包容的,不允許部分嵌套或交叉嵌套。嵌套可以是多層的,但只有同一層的過程或函數(shù)才能相互調(diào)用,另外外層的過程或函數(shù)也可以調(diào)用內(nèi)層的過程或函數(shù)。(2)過程或函數(shù)的遞歸在過程或函數(shù)中調(diào)用自身稱為遞歸調(diào)用,如果一個(gè)過程或函數(shù)直接調(diào)用自身,稱為直接遞歸;內(nèi)層過程或函數(shù)調(diào)用外層或同層之間的相互調(diào)用稱為間接遞歸。6.變量的作用域

(1)公有變量與私有變量在單元的接口部分聲明的變量屬于公有變量,可以被其他單元引用。在單元的實(shí)現(xiàn)(implementation)部分聲明的變量屬于私有變量,不能被其他單元引用。(2)全程變量與局部變量在單元中的過程或函數(shù)中聲明的變量,其有效范圍僅限于該子程序本身,屬于局部變量。而在子程序之前,implementation之后聲明的變量可以為本單元中的所有子程序(過程或函數(shù))引用,因此又屬于全程變量。

全程變量在程序的TYPE區(qū)域定義,在整個(gè)程序中有效。變量作用域的實(shí)際情況要復(fù)雜得多,大體上有下列幾種情況:1.在一個(gè)單元的Private部分定義的任何數(shù)據(jù)和方法在其它單元中看不到,也不能使用;2.在一個(gè)單元的interface部分定義的任何數(shù)據(jù)和方法都可被其它單元使用;3.在一個(gè)單元的Public部分定義的任何數(shù)據(jù)和方法都可被其它單元使用;訪問其它單元中公共方法的格式為: 窗體名.公共方法名4.在一個(gè)單元的Implemantation定義的數(shù)據(jù)(和方法)是本單元的公有部分;5.在一個(gè)函數(shù)或者過程內(nèi)部定義的數(shù)據(jù)(和方法)只能在其內(nèi)部使用。

2.11Delphi的程序結(jié)構(gòu)

一個(gè)Delphi應(yīng)用程序?qū)?yīng)一個(gè)工程,從程序結(jié)構(gòu)的角度來看,它由一個(gè)主程序與若干個(gè)單元組成。

2.11.1主程序在Delphi的集成開發(fā)環(huán)境中,通過項(xiàng)目的方式對(duì)應(yīng)用程序開發(fā)過程中的各類文件進(jìn)行組織和管理。與所開發(fā)的應(yīng)用程序有關(guān)的文件都組織在一個(gè)項(xiàng)目中,項(xiàng)目中的一些文件是在設(shè)計(jì)階段產(chǎn)生的,另一些是在項(xiàng)目編譯和連接后產(chǎn)生的。

工程文件是一個(gè)項(xiàng)目的主程序。在工程文件中,列出了該項(xiàng)目所使用的所有單元文件。通過單元文件的列表,編譯器將分別編譯每個(gè)單元文件,最后連接成可執(zhí)行的文件(.EXE)或動(dòng)態(tài)連接庫(.DLL)工程文件.Dpr窗體.dfm,單元.pas等文件編譯可執(zhí)行文件.EXE動(dòng)態(tài)鏈接庫.DLL主程序的結(jié)構(gòu):

programProject1;{說明工程名}uses {指定工程中使用的單元,含無窗體單元}Forms,Unit1in'UNIT1.PAS'{Form1};{$R*.RES} {連接資源文件}begin {主程序塊開始}Application.Initialize;{初始化}Application.CreateForm(TForm1,Form1); {生成窗體}Application.Run; {運(yùn)行程序}end.{主程序塊結(jié)束}2.11.2單元文件一個(gè)Delphi程序包括幾個(gè)程序單元。其一為主程序單元(如標(biāo)準(zhǔn)工程的工程文件),其它為子程序單元。窗體都有相應(yīng)單元,但單元未必對(duì)應(yīng)窗體。單元構(gòu)成:名稱:默認(rèn)為Unit1、Unit2,……;接口部分:單元間可互訪該部分實(shí)現(xiàn)部分:包括了Pascal代碼可選部分:Initialization和finalization,分別在程序啟 動(dòng)和終止時(shí)執(zhí)行。Unit

單元名;Interface//接口部分Uses

需要訪問的其它單元,包括定義類和組件的標(biāo)準(zhǔn)單元以及其它自定義單元

;Type

類、類型的定義;(類中有許多不同的成員,包括過程、函數(shù)、全局變量、數(shù)據(jù)類型等)Var

變量的定義;Implementation//實(shí)現(xiàn)部分{編譯偽

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論