版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Delphi程序設計教程授課教師:白濤jsjbt@新疆農(nóng)業(yè)大學計算機與信息工程學院信息系統(tǒng)教研室第2章Delphi的語法基礎2.1保留字與標識符
2.1.1保留字
2.1.2標識符
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運算符與表達式
2.4.1算術運算符
2.4.2位運算符
2.4.3字符串運算符2.5常用函數(shù)與過程
2.5.1數(shù)學運算函數(shù)
2.5.2字符處理函數(shù)
2.5.3日期時間函數(shù)
2.5.4順序類型函數(shù)2.6語句
2.6.1語句的書寫規(guī)則
2.6.2語句格式中的符號約定
2.6.3賦值語句
2.6.4注釋語句習題2
2.1保留字與標識符2.1.1保留字和指令字ObjectPascal語言中定義了65個保留字(ReservedWords),它們具有特殊的含義,不可以用來作為標識符。也就是說它們是由系統(tǒng)定義的具有特定意義的單詞,用戶不可以在編程時重新定義或做他用。具體單詞如下:此外,ObjectPascal語言中還定義了39個指令字(Directives),它們也具有特殊的含義,只是當用戶重新定義了這些指令字后,在作用域內它們就失去了原來的意義了。具體如下:說明:盡管private、protected、public、published和automated是指令字,但是要將它們當作保留字來看待,不要定義與它們同名的標識符。同樣,at和on也具有特殊的含義,也不要定義與它們同名的標識符。此外,ObjectPascal是不區(qū)分大小寫的。當然,在Delphi集成開發(fā)環(huán)境的代碼編輯器中,將以黑體顯示保留字和指令字。所以,我們在定義標識符的時候注意不要與這些以黑體字顯示的單詞一樣。2.1.2標識符ObjectPascal語言使用的是ASCII碼字符集,包括字母A~Z、a~z、數(shù)字0~9和其他的一些標準字符。下面的單個字符作為特殊符號存在:#$&'()*+,?./:;<=>@[]^{}另外,有些字符對也作為單個的特殊符號存在,具體有:(*(.*).)..//:=<=>=<>其中,左中括號“[”等價于“(.”,右中括號“]”等價于“.)”,左大括號“{”等價于“(*”,右大括號“)”等價于“*}”。在Pascal語言中,標識符(Identifiers)用來標志常量、變量、類型、屬性、對象、過程、函數(shù)、程序、單元、庫和組件庫等。標識符分為標準標識符和自定義標識符兩類。1.標準標識符標準標識符是ObjectPascal語言系統(tǒng)預先分配給標準函數(shù)、標準過程、標準類型、標準變量以及標準文件使用的標識符,如:False(標準常量)、Char(標準類型)、Eof(標準函數(shù))、Get(標準過程)、Input(標準文件)等。2.自定義標識符自定義標識符是程序員根據(jù)程序設計的需要為自己定義的常量、變量、類型、函數(shù)、過程以及所編寫的程序所取的名字。說明:標識符可以由任意長的一個不帶空格的字符串組成,但是只有前面的255個字符有效。標識符的第一個字符必須是字母或下劃線,其余字符可以是字母、數(shù)字或下劃線。自定義標識符不能與保留字相同,同時應盡量避免與標準標識符同名,以免發(fā)生混淆。自定義標識符必須先定義或說明,然后才能在程序中使用。3.限定標識符由于ObjectPascal程序中可以引用多個單元,而各個單元中的全程變量、函數(shù)、過程等可能會同名,所以在程序中引用它們時需要使用限定標識符來區(qū)分它們。也就是使用在另一個地方定義的標識符,需要限定標識符。限定標識符的格式為: 標識符1.標識符2其中標識符1限定標識符2。限定符可以嵌套,如Form1.Button1.Click表示調用Form1窗體Button1的Click方法。一般標識符可以由一個或多個具有適當意義的英文單詞組成。ObjectPascal語言對于字母的大小寫不敏感。當然,字符串中的大小寫字母是需要分清的。在編寫程序的時候要保持一定的風格,不要有時候全部大寫標識符,另一些時候又實行大小寫混寫。建議同學將標識符中每個英文單詞的首位字母大寫,其余字母小寫。2.1.3注釋ObjectPascal語言中的注釋有下面三種形式:?組合符號“{”與“}”的成對使用表示它們之間的內容為注釋部分。?組合符號“(*”與“*)”的成對使用表示它們之間的內容為注釋部分。?符號“//”的單個使用表示所在行的該符號之后的內容為注釋。注意:?注釋符“{”與“}”、“(*”與“*)”在使用時不支持注釋的嵌套,而且必須成對使用。?建議對于單行和少量幾行的注釋使用符號“//”,對于大塊注釋使用“{”和“}”或“(*”和“*)”。?有時可以利用注釋在代碼中形成一個醒目的標志。比如利用注釋符號形成一個矩形方框,在其中可以添加一些重要的說明文字。在注釋符“{”或“(*”后緊接著的是一個美元符號“$”時,表示該句是一個編譯器指令,它與普通的注釋不同,通常用來對編譯過程進行設置。
例如:programProject1;{$APPTYPECONSOLE}//編譯器指令//////////////////////////////////////本例程用來說明注釋符的使用//////////////////////////////////////begin{下面的這條語句將字符串1和字符串2緊接著在屏幕上輸出}Writeln('String0'(*字符串1*)+'String1');//字符串2Writeln('按下回車鍵<Enter>退出。');Readln;end.運行結果如下:String0String1上面的注釋文字“(*字符串1*)”實際上位于語句Writeln(‘String0’+’String1’);之間,但是對編譯結果沒有影響。因為在編譯的時候,編譯器首先會將所有的注釋去除,然后再進行語法分析。
2.2數(shù)據(jù)類型
描述客觀事物的數(shù)、字符以及所有能輸入到計算機中并被計算機程序加工處理的符號的集合稱為數(shù)據(jù)。數(shù)據(jù)的一個重要特征就是其所屬的數(shù)據(jù)類型,數(shù)據(jù)類型不僅確定了該類型數(shù)據(jù)的表示形式和取值范圍,而且還確定了數(shù)據(jù)所能參加的各種運算。ObjectPascal語言的數(shù)據(jù)類型比較豐富,圖2-1中列舉了一些預定義好的數(shù)據(jù)類型。此外,還可以通過數(shù)據(jù)類型聲明語句在預定義數(shù)據(jù)類型的基礎上定義新的數(shù)據(jù)類型。1.簡單數(shù)據(jù)類型簡單數(shù)據(jù)類型(Simple)包括有序數(shù)據(jù)類型(ordinal)和實數(shù)數(shù)據(jù)類型(real)。有序數(shù)據(jù)類型包括下面的一些數(shù)據(jù)類型:(1)整數(shù)類型整數(shù)類型(integer)包括了表2-1中的各種類型。(2)字符類型基本的字符類型(character)包括AnsiChar和WideChar兩種。AnsiChar類型的數(shù)據(jù)具有一個字節(jié),與擴展的ANSI字符集對應。WideChar類型的數(shù)據(jù)為雙字節(jié),與Unicode字符集對應。通用的字符類型為Char,與AnsiChar類型相同。與其相關的函數(shù):在獲取字符類型數(shù)據(jù)的字節(jié)數(shù)時使用SizeOf函數(shù)。此外,可以使用函數(shù)Chr返回一個整型數(shù)對應的字符,也可以使用Ord返回一個字符的序數(shù)。(3)布爾類型布爾類型(Boolean)包括以下四種:Boolean、ByteBool、WordBool和LongBool。ObjectPascal語言預定義了兩個常量標識符False和True,可以為Boolean類型的數(shù)據(jù)賦值為False或True,對應的序數(shù)值為0和1。當ByteBool、WordBool和LongBool類型的數(shù)據(jù)為0時,可以認為是False;當不為0時,可以認為是True。(4)枚舉類型
枚舉類型(enumerated)是由一組有序的標識符組成的,它是通過枚舉表示其值的標識符來定義的有序集合。形式如下:
typetypeName=(val1,...,valn)例如:
typeccolor=(red,blue,green,yellow,white,black);VarC:cclolor;枚舉類型的性質:
屬有序類型,序號從0開始,序號小的元素小于序號大的。但首元素無前趨,末元素無后繼。
同一枚舉元素不能在多個枚舉類型中出現(xiàn)。例:type//錯:兩個枚舉類型定義中都有carriagevehicle=(bike,carriage,motor);
car=(bus,carriage,lorry);枚舉類型只能進行賦值運算和關系運算。枚舉變量的值只能用賦值語句獲得,不能讀寫,也不能直接輸出,要用序號和選擇語句相配合來輸出。例:VarYColor:(red,green,blue);……caseord(Ycolor)of0:memo1.lines.add('Red');1:memo1.lines.add('Green');2:memo1.lines.add('blue');end(5)子界類型子界類型(subrange)為某個有序類型的子集。定義的語法:<常量1>..<常量2>例:type//定義子界類型Month和DayMonth=1..12;//宿主類型為整型Day=Sun..Sat;//宿主為已定義的枚舉類型注意:
1.子界類型適合于其宿主類型的所有運算,但受其上下界的限制。2.類型定義和變量定義可合二為一:Typesomeletter=‘a(chǎn)’..‘d’;VarCh1,Ch2:someletter;可合寫為:VarCh1,Ch2:‘a(chǎn)’..‘d’;
實數(shù)類型適用于實數(shù)類型的運算符有:算術運算:+、-、*、/關系運算:=、<>、<、>、<=、>=2.字符串類型字符串類型(String)主要包括表2-3中的3種類型:字符串類型說明的語法格式為:
VAR<類型標識符>:String[長度]注意:程序中一般是用String,而很少直接用ShortString或ANSIString來說明字符串變量。String類型與ANSIString類型完全等價3.結構類型結構類型(Struct)包括集合類型(set)、數(shù)組類型(array)、記錄類型(record)、文件類型(file)、類類型(class)、類引用類型(classreference)和接口類型(interface)等。(1)集合類型
集合類型(set)由有序類型的一些數(shù)值組成,這個有序類型就是集合的基類型。集合類型定義的語法格式為:
Type <類型名>=Setof<基類型>注意:在ObjectPascal中集合的元素個數(shù)不能超過256個。集合中的元素沒有先后順序的關系,相同的元素也不能出現(xiàn)在同一個集合中。通常先定義一個子界型,用來聲明集合類型。例: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中,一個集合類型變量的取值,可是基類型所有元素按不同組合而成的子集,也可是全集。若有n個元素的集合,則可取2n個不同組合的子集。(2)數(shù)組類型
數(shù)組類型(array)的數(shù)據(jù)為某一類相同類型的元素按一定的順序組成的序列,包括靜態(tài)數(shù)組和動態(tài)數(shù)組兩種?,F(xiàn)在Delphi支持動態(tài)數(shù)組,也就是說數(shù)組可以動態(tài)分配存儲空間。
1.靜態(tài)數(shù)組所謂靜態(tài)數(shù)組就是定義后,其大小不再改變的數(shù)組,定義的語法形式為:
Type
<數(shù)組標識符>=ARRAY[下標類型]OF<元素類型>例如:
typeMyArray=array[1..100]ofChar;//一維數(shù)組typeTMatrix=array[1..10]ofarray[1..50]ofReal;//兩維數(shù)組
TypeTMatrix=array[1..10,1..50]ofReal;//與上面的兩維數(shù)組相同說明:其中“下標類型”指定了數(shù)組類型變量的分量個數(shù)、分量的排列次序及其下標的數(shù)據(jù)類型,它可以是任何順序類型,如整數(shù)型、字符型、布爾型和枚舉型等;“元素類型”是數(shù)組中各個元素的類型,它可以是任何類型。數(shù)組可以是多維的,每一維的下標類型指明了元素的數(shù)目。數(shù)組可以在每一維中用所有下標類型的數(shù)值來存取其中的元素。多維數(shù)組各個下標可以是不同的基類型。2.動態(tài)數(shù)組動態(tài)數(shù)組沒有固定的大小和長度,在為數(shù)組的元素賦值或調用標準函數(shù)SetLength時,系統(tǒng)才為數(shù)組分配內存。定義的語法形式為:
Type<數(shù)組類型標識符>=ARRAYOF<基類型>動態(tài)數(shù)組的下標都是整數(shù),并且是從0開始的。
多維動態(tài)數(shù)組用嵌套的ARRAYOF結構來定義:例如:varMyFlexibleArray:arrayofReal;//定義動態(tài)數(shù)組varms:arrayofarrayofstring;//定義二維動態(tài)數(shù)組可以通過過程SetLength來為動態(tài)數(shù)組指定空間大小:例如:SetLength(MyFlexibleArray,20);//為動態(tài)數(shù)組指定空間大小其中數(shù)組MyFlexibleArray的索引值為0~19。(3)記錄類型
記錄類型(record)是一組不同類型元素的集合,用來表示一個具體的實物。其中的元素稱為域。在記錄類型中為每個域指定了一個名稱和數(shù)據(jù)類型(數(shù)據(jù)類型可以是對象Pascal語言中預定義的類型,也可以是程序員自定義的類型)。
定義記錄類型的語法格式為:RECORD<標識符1>:<類型1>;<標識符2>:<類型2>;......END;要引用記錄中的一個字段,可以使用限定標識符的格式。也就是在記錄名與字段名(該字段說明的變量標識符)間用原點符號連接。類和對象可以看作是記錄類型的擴展。Delphi庫趨向于用類替代記錄類型,不過WindowsAPI中定義了許多記錄類型。記錄類型中允許包含variant域,它表示多個域能公用同一內存區(qū),而且域可以是不同類型。variant記錄類型的應用不符合類型安全原則,因此不提倡在編程中使用,初學者更是如此。(4)文件類型文件類型的定義中并沒有定義其元素的個數(shù),語法格式為:Type
<標識符>=FILEOF<類型標識符>;注意:若省略了OF和類型標識符,則這個類型代表無類型的文件。定義了文件類型后,就能打開一個與這個結構相應的物理文件、向文件中寫入整數(shù)、或者從文件中讀取當前的值。
(5)類類型
類類型也稱類或對象類型。類是包括了繼承權(即類繼承)、字段(即記錄或對象中的元素)、方法和屬性等內容的結構。類的實例稱為對象,類的字段、方法即屬性稱為類的成員。4.指針類型指針類型變量用于保存內存地址,在說明時必須說明所指向的變量的類型。聲明的語法格式為:TYPE<指針類型名>=^<類型名>其中<類型名>是指針所指向的數(shù)據(jù)類型。在聲明了指針變量后,系統(tǒng)并未為其分配內存,指針變量也未初始化。使用標準函數(shù)new可以解決該問題。Dispose函數(shù)是new函數(shù)的逆過程,通過使用new函數(shù)獲得的內存空間必須使用dispose函數(shù)來釋放。注意:1.@運算符放在變量的前面可以獲取變量的地址2.^運算符放在數(shù)據(jù)類型的前面表示定義該類型的一個指針類型;如果放在一個指針的后面,則獲取該指針指向的地址空間的內容3.無類型指針的定義P:Pointer;無類型指針僅包含一個內存地址,可以指向任何類型的數(shù)據(jù)。5.過程與函數(shù)類型(procedure)
Pascal中的例程有兩種形式:過程和函數(shù)。理論上說,過程是你要求計算機執(zhí)行的操作,函數(shù)是能返回值的計算。兩者突出的不同點在于:函數(shù)能返回計算結果,即有一個返回值,而過程沒有。兩種類型的例程都可以帶多個給定類型的參數(shù)。6.可變類型(variant)可變類型(variant)主要用于實際操作類型變化或編譯時類型不能確定的情況。定義的語法格式為:
<變量名>:VARIANT可變類型的變量在創(chuàng)建后,總被初始化為Unassigned的值,表示還沒有賦值??勺冾愋涂梢园齀nt64、結構類型和指針類型之外的所有類型,但其自身不能包含自身。在表達式和賦值語句中,可變類型的變量可以和整數(shù)、實數(shù)、字符串、布爾類型以及其它的可變類型等混合使用,編譯器將自動進行類型轉換。本次課導讀常量和變量運算符和表達式常用函數(shù)和過程語句三種程序結構結合例程講解控件
2.3常量與變量在程序的執(zhí)行過程中其值保持不變,稱為常量;在程序的執(zhí)行過程中其值可以被改變的稱為變量。2.3.1常量1.常量和常量表達式常量在程序中有兩種形式,第一種就是值本身(直接常量),第二種是用常量名表示的常量(符號常量),這需要在程序中定義。在ObjectPascal中還允許使用常量表達式,也就是在編譯時就可以計算的表達式。2.定義符號常量
定義符號常量有兩種類型:純常量(TrueConstants)和類型常量(TypedConstants)。⑴純常量的定義純常量的值在定義之后就不再變化,定義純常量的語法格式為:
CONST<常量標識符>=<常量或常量表達式>關鍵字CONST可以定義多個常量。例如:Constpi=3.1415926⑵類型常量的定義類型常量可以保存數(shù)組、記錄、過程以及指針等類型的值。定義類型常量的語法格式為:
CONST<常量標識符>:<類型>=<值>例如:constPi:Double=3.1415926;類型常量的用法同變量完全一樣,可以對類型常量重新賦值。2.3.2變量1.標準數(shù)據(jù)類型變量的定義變量定義的格式為:
VAR<變量名列表>:<類型>;變量名之間用(,)分隔。一個VAR語句可以定義多個不同類型的變量。不同的位置變量的作用范圍不同。var
s,t,r:string;I,j:integer;flag:Boolean;2.自定義類型變量的定義對自定義類型的變量,必須先有類型的定義,然后才能定義變量。如:在程序的說明部分中定義枚舉類型Color的定義: TypeColor=(Red,Blue,Green,Yellow,Orange);則可以利用Color類型定義變量: VARFirstColor:Color;3.變量的初始化在函數(shù)或過程內部定義的變量稱為局部變量,其余的稱為全局變量。全局變量在定義時就可以進行初始化,其語法是:
VAR<變量名列表>:<類型>=<常量表達式>;同時定義多個全局變量時,不能進行初始化,另外對文件類型和可變類型的變量也不能初始化。沒有初始化的全局變量在編譯時被賦值0,而局部變量(不能初始化)的值在賦值前是隨機的。
2.4運算符和表達式ObjectPascal語言中的運算符(Operators)有:
@、not、^、*、/、div、mod、and、shl、shr、as、+、-、or、xor、=、>、<、<>、<=、>=、in和is等。按照操作數(shù)數(shù)目的多少來分,運算符分為下面兩類:單目運算符(UnaryOperator)和雙目運算符(BinaryOperator)。1.算術運算符算術運算符對浮點數(shù)和整數(shù)進行加、減、乘、除和取模運算,如表2-5所示。注意:其中+和-運算符還可以作為單目運算符,放在在浮點數(shù)或整數(shù)前,分別表示正數(shù)和負數(shù)。此外,+運算符還可以用在字符串的運算表達式中,可以將兩個字符串接在一起。+、-和*運算符還可以用在集合運算表達式中。2.邏輯運算符邏輯運算符對邏輯類型的操作數(shù)進行運算,數(shù)據(jù)結果也為邏輯類型,如表2-6所示。3.位運算符位運算符對整型的數(shù)據(jù)進行按位操作,所得結果也為整型數(shù)據(jù),如表2-7所示。4.字符串運算符加號(+)還可以作為字符串運算符,它可以將兩個字符串聯(lián)接在一起。如果兩個字符串都是短字符串,那么在結果字符串長度超過255個字符的情況下,只有前面255個字符有效。
在復雜的表達式中,各種運算符的優(yōu)先級分別如下:?第一級(最高):@、not?第二級:*、/、div、mod、and、shl、shr、as?第三級:+、-、or、xor?第四級(最低):=、<>、<、>、<=、>=、in、is
2.5語句語句由保留字、屬性、函數(shù)、運算符以及能夠生成Delphi編輯器可識別指令的符號組成。2.5.1語句的書寫規(guī)則ObjectPascal程序語句的書寫比較自由,可以把多個語句放在一行程序中,也可以一個語句分多行寫,只要遵守一個規(guī)則:每個語句必須以分號“;”結束即可。最簡單的語句是一個什么也不做的“空語句”:2.5.2幾種常見的語句在ObjectPascal語言中,我們先了解一下幾種類型的語句:1.聲明語句1)常量的聲明形式如下列所示:
constPI=3.1415926535897932385;2)在基本數(shù)據(jù)類型的基礎上,還可以利用保留字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);//將邏輯表達式的結果賦值為一個變量Hue1:=[Blue,Succ(C)];//將一個子集賦值為一個變量I:=Sqr(J)-I*K;//將一個表達式的結果賦值為一個變量Shortint(MyChar):=122;//給類型轉換后的變量賦值MyString[I]:='A';//給數(shù)組的一個元素賦值TMyObject.SomeProperty:=True;//給對象的屬性賦值
Delphi組件屬性的賦值⑴屬性賦值給屬性賦值的語法格式為:<對象.屬性>:=<屬性值>⑵組件屬性的重要類別有些對象本身就是對象,如Font屬性,設置這些對象屬性可以使用下列的方法:
Edit1.Font.Size:=24;{設置字體的大小} Edit1.Font.Color:=ClRed;{設置字體的顏色}⑶同時設置一個對象的多個屬性若要同時設置一個對象的多個屬性時,可使用With語句。語法格式:
withlabel1do
begincaption:=‘歡迎使用!';font.Color:=clred;
end;3.復合語句首尾使用begin和end括起來一組語句稱為復合語句。復合語句可以嵌套使用,也允許空的復合語句出現(xiàn),也就是在begin和end之間沒有其他語句。例如:beginZ:=X;X:=Y;Y:=Z;beginend;end;
2.6標準函數(shù)例舉
ObjectPascal把常用的一些運算定義為系統(tǒng)標準函數(shù)。2.5.2
數(shù)學運算函數(shù)1.絕對值函數(shù)絕對值函數(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ù)和對數(shù)函數(shù)指數(shù)函數(shù)的定義:functionExp(x:Real):Real;對數(shù)函數(shù)的定義:functionLn(x:Real):Real;7.隨機函數(shù)
隨機函數(shù)的定義:functionRandom[(Range:Integer)];8.π函數(shù)函數(shù)定義為:functionPi:Extended;2.5.2字符處理函數(shù)1.大小寫轉換函數(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ù)值與字符串轉換(1)過程Str用來將數(shù)值型數(shù)據(jù)轉換成字符串,其過程定義為:procedureStr(X[:Width[:Decimals]];varS);(2)過程Val用來將字符串轉換成數(shù)值型數(shù)據(jù),其過程定義為:procedureVal(S;varV;varCode:Integer);(3)
函數(shù)IntToStr用來將整型數(shù)據(jù)轉換成字符串,其函數(shù)定義為:functionIntToStr(Value:Integer):string;overload;(4)函數(shù)FloatToStr用來將實型數(shù)據(jù)轉換成字符串,其函數(shù)定義為:functionFloatToStr(Value:Extended):string;
(5)函數(shù)StrToInt用來將數(shù)字字符串轉換成整型數(shù)值,其函數(shù)定義為:functionStrToInt(constS:string):Integer;
(6)函數(shù)StrToFloat用來將數(shù)字字符串轉換成實型數(shù)值,其函數(shù)定義為:functionStrToFloat(constS:string):Extended;(7)函數(shù)IntToHex用來將10進制整數(shù)轉換成或16進制格式,其函數(shù)定義為:functionIntToHex(Value:Integer;Digits:Integer):string;10.ASCII轉換為字符函數(shù)Chr用來將ASCII碼值轉換成字符,其函數(shù)定義為:functionChr(X:Byte):Char;11.格式化函數(shù)函數(shù)Format用來將字符串按照指定的格式返回,故稱格式化函數(shù)。其函數(shù)定義為:functionFormat(constFormat:string;constArgs:arrayofconst):string;類型和格式信息由字符“%”開頭,格式如下:%[〈參數(shù)位置〉:][-][〈所占寬度〉][.〈小數(shù)位數(shù)〉]〈類型〉2.5.3日期時間函數(shù)1.日期與時間函數(shù)
函數(shù)Now用來返回系統(tǒng)當前的日期和時間,其函數(shù)定義為:functionNow:TDateTime;2.日期函數(shù)
函數(shù)Date用來返回系統(tǒng)當前的日期,其函數(shù)定義為:functionDate:TDateTime;3.時間函數(shù)函數(shù)Time用來返回系統(tǒng)當前的時間,其函數(shù)定義為:functionTime:TDateTime;4.轉換函數(shù)(1)函數(shù)DateToStr、TimeToStr、DateTimeToStr可以分別將日期和時間(TdateTime類型)轉換成字符串,其函數(shù)定義分別為:functionDateToStr(Date:TDateTime):string;functionTimeToStr(Time:TDateTime):string;functionDateTimeToStr(DateTime:TDateTime):string;(2)函數(shù)EncodeDate與過程DecodeDate可以在TdateTime類型的日期值與整型的年、月、日之間互相轉換,其定義分別為:functionEncodeDate(Year,Month,Day:Word):TDateTime;procedureDecodeDate(Date:TdateTime,varYear,Month,Day:Word);
(3)函數(shù)EncodeTime與過程DecodeTime可以在TdateTime類型的時間值與整型的小時、分、秒、毫秒之間互相轉換,其定義分別為:functionEncodeTime(Hour,Min,Sec,MSec:Word):TDateTime;procedureDecodeTime(Time:TdateTime,varHour,Min,Sec,MSec:Word);5.星期函數(shù)函數(shù)DayOfWeek用來返回日期所對應的星期數(shù),其函數(shù)定義為:functionDayOfWeek(Date:TDateTime):Integer;6.日期與時間的格式函數(shù)FormatDateTime用來處理日期與時間的格式。其函數(shù)定義為:functionFormatDateTime(constFormat:String;DateTime:TDateTime):String;2.5.4順序類型函數(shù)1.順序類型2.順序函數(shù)(1)序數(shù)函數(shù)Ord返回數(shù)據(jù)的序數(shù),其定義為:functionOrd(X):Longint;(2)前趨函數(shù)Pred返回數(shù)據(jù)的前趨值,其定義為:functionPred(X);(3)后繼函數(shù)Succ返回數(shù)據(jù)的后繼值,其定義為:functionSucc(X);(4)首序數(shù)函數(shù)Low返回順序型數(shù)據(jù)取值集合中的第一個值(序數(shù)最?。涠x為:functionLow(X);(5)末序數(shù)函數(shù)High返回順序型數(shù)據(jù)取值集合中的最末一個值(序數(shù)最大),其定義為:functionHigh(X);
2.7順序結構順序結構是程序設計中最簡單、最常用的基本結構。在個結構中,各操作塊(簡稱塊,對于程序中的“程序段”)按照出現(xiàn)的先后順序以此執(zhí)行。它是任何程序的基本結構,即使在選擇結構或循環(huán)結構中,也常以順序結構為其子結構。
2.8選擇結構選擇結構是根據(jù)所給定的條件成立(真)與否(假),而決定從各實際可能的不同分支中選擇執(zhí)行某一分支的相應操作的結構。在Delphi中,實現(xiàn)選擇結構的是IF語句和Case語句。這兩種語句又稱為條件語句,條件語句的功能就是根據(jù)表達式的值有選擇地執(zhí)行一組語句。2.8.1IF語句
1.單分支的條件語句單分支條件語句的語法格式為:
IFe1THEN<語句1>;其中e1為Boolean表達式。單分支的條件語句的含義為當e1的值為真時,執(zhí)行<語句1>,當e1的值為假時,則執(zhí)行<語句1>下面的語句。2.雙分支的條件語句雙分支條件語句的語法格式為:
IFe1THEN<語句1>ELSE<語句2>;其中e1為Boolean表達式。雙分支的條件語句的含義為當e1的值為真時,執(zhí)行<語句1>,當e1的值為假時,則執(zhí)行<語句2>。3.嵌套形式的條件語句嵌套形式條件語句的語法格式為:IFe1THEN<語句1>ELSEIFe2THEN<語句2>......ELSEIFenTHEN<語句n>ELSE<語句0>;2.8.2CASE語句CASE語句在很多情況下可以代替嵌套IF語句,去實現(xiàn)不同情況的選擇,其語法格式為:CASEe1OFx1:<語句1>;x2:<語句2>;......xn:<語句n>;[ELSE<語句>;]END;注意:e1可以是任何返回值為有序類型(整型、字符型、布爾型、枚舉型、子界型)的表達式,而x1~xn可以是一個數(shù)、一個定義過的變量或其它常量表達式,但必須是與e1兼容的有序類型。CASE語句的含義為,當e1的值與x1,x2,...,xn相同時,就執(zhí)行它后面的語句,否則執(zhí)行ELSE后面的<語句>。
2.9循環(huán)結構在程序設計中,從某處開始有規(guī)律地反復執(zhí)行某一程序塊的現(xiàn)象稱為“循環(huán)”,完成這一功能的程序結構稱為“循環(huán)結構”,而其中重復執(zhí)行的程序塊稱為“循環(huán)體”。ObjectPascal提供的循環(huán)結構語句有3鐘,它們分別是:While語句、Repeat語句以及For語句。2.9.1While(當型循環(huán))語句當需要多次執(zhí)行某一個(或一組)語句或一個程序段時,ObjectPascal提供三種可供選用的重復語句:WHILE、REPEAT和FOR語句。While語句的語法格式為:
WHILE<e1>DO[<語句>];當條件為真時,執(zhí)行循環(huán)<語句>。1.Break(強制退出循環(huán))語句Break語句用于從For語句、While語句或Repeat語句中強行退出。2.Continue(強制縮短循環(huán))語句Continue語句用于從For語句、While語句或Repeat語句中強行結束本次循環(huán),開始下一次循環(huán)。2.9.2Repeat(直到型循環(huán))語句Repeat語句就是重復一個代碼塊的執(zhí)行,直到滿足條件為止。這種循環(huán)的執(zhí)行次數(shù)是不確定的,其語法格式為:REPEAT<語句>;UNTIL<條件表達式>;<語句>被稱為循環(huán)體。由于REPEAT語句是先執(zhí)行循環(huán)體,再對表達式求值,所以REPEAT語句至少執(zhí)行循環(huán)體一次。2.9.3For(計數(shù)型循環(huán))語句1.FOR語句的一般形式For語句的語法格式為:
FORvar1:=exp1TO/DOWNTOexp2DO[<語句>];
這里exp1為初值表達式,exp2為終值表達式。在執(zhí)行FOR語句的過程中,初值表達式和終值表達式只計算一次,F(xiàn)OR語句執(zhí)行規(guī)定次數(shù)的循環(huán)。2.FOR語句的嵌套FOR語句的循環(huán)體還可以是一個FOR語句,從而構成多重循環(huán)。3.使用FOR語句的注意事項(1)在循環(huán)體內不能改變循環(huán)變量的值(2)循環(huán)變量的值在循環(huán)結束后不再確定4.三種循環(huán)語句的關系對已知循環(huán)次數(shù)的情形,可以使用FOR語句;對循環(huán)次數(shù)未知,而只知道循環(huán)的執(zhí)行條件時,可以使用REPEAT語句或WHILE語句。若至少執(zhí)行一次循環(huán)體,則用REPEAT語句,否則使用WHILE語句。實際上FOR語句也可以表示為REPEAT語句或WHILE語句。過程與函數(shù)過程的分類、創(chuàng)建、調用函數(shù)的創(chuàng)建、調用參數(shù)傳遞函數(shù)與過程的重載嵌套與遞歸變量的作用域
2.10過程與函數(shù)過程和函數(shù)都是能夠完成某個(或某些)特定功能的程序段,它們在語法功能上相當于一個簡單語句,也就是說在簡單語句出現(xiàn)的地方,都可以使用過程或函數(shù)。過程和函數(shù)統(tǒng)稱為例程,它們都是可以在程序中調用的實現(xiàn)特定功能的獨立語句塊,其區(qū)別在于函數(shù)可返回值,而過程則沒有。Delphi本身提供了大量的內部例程,可以在程序中直接使用;用戶也可以自定義例程或直接調用WindowsAPI函數(shù)。2.10.1過程Delphi的過程分為標準過程與自定義過程兩種。標準過程是指系統(tǒng)內部定義的過程,無需編寫代碼,即可直接調用。而自定義過程則由用戶自行編寫代碼以完成指定的操作,它包括事件過程與通用過程兩類。事件過程依附與對象,是Delphi應用程序的主體,當該對象響應指定事件時被執(zhí)行。通用過程告訴應用程序如何完成一項指定的任務。1.事件過程的創(chuàng)建和調用(1)事件過程的創(chuàng)建在對象觀察器(ObjectInspector)中選擇指定對象(控件),然后在事件(Events)選項卡中選擇指定的事件名稱,并用鼠標雙擊其右邊的空白區(qū)域,Delphi將自動產(chǎn)生一個默認的事件過程。一個事件過程也可以被多個對象、多個事件共享。其方法是:首先為其中的一個對象事件建立事件過程,然后在創(chuàng)建其他對象的事件過程時,從事件名稱右邊的下拉列表中選擇已經(jīng)建立的事件過程名即可。(2)事件過程的調用我們可以在過程代碼中調用已經(jīng)創(chuàng)建的事件過程。如為按鈕Button3創(chuàng)建獨立的OnClick事件過程來調用已經(jīng)存在的Button1Click事件過程:ProcedureTEorml.Button3Click(Sender:Tobject);beginForml.ButtonlClick(Sender);end;上述調用語句中的實際參數(shù)Sender還可以改為Forml.Button3,即:Forml.ButtonlClick(Forml.Button3);2.通用過程的語法格式通用過程在調用之前必須首先定義,定義一個通用過程也稱為過程聲明。過程聲明要按照Delphi的語法,通用過程的語法格式與事件過程相仿,其一般形式為:Procedure<過程名>[(<形參表>)][<局部聲明>]begin[<語句列>];end;以保留字Procedure開頭的第一行,稱為過程首部,其余部分稱為過程體。(1)過程首部<過程名>使用與變量名相同的命名規(guī)則。一個過程只能有一個唯一的過程名。<行參表>由若干個形式參數(shù)組成,它指明了從調用過程傳遞給過程的實參(實際參數(shù))個數(shù)和類型。所有的形式參數(shù)必須說明類型(有點像變量說明),相同類型的行參之間用逗號隔開,不同類型的行參之間用分號隔開。形參說明的格式為:
[Var|Const]<行參名>:<類型>I.變量參數(shù)若要將一個值從過程傳遞給調用者,則必須在定義它們時使用變量參數(shù)。在被調用的過程的形參表中的有關形參前加上保留字VAR定義變量參數(shù)。變量參數(shù)按傳址方式傳遞參數(shù),形參在過程中所作的改變,推出程序后將影響實參的值II.值參數(shù)值參數(shù)可以像過程的本地變量一樣使用,其初值來自過程調用時的實參數(shù),對值參數(shù)的修改并不影響實參數(shù)。值參數(shù)是按傳值方式傳遞參數(shù)的,形參在過程中所作的改變,推出程序后不影響實參的值。III.常量參數(shù)常量參數(shù)可以像局部的只讀變量來使用,其初值來自過程調用時的實參數(shù),實參數(shù)必須是一個表達式,且表達式的類型不能是文件類型或包含文件的其它結構類型。在被調用的過程的形參表中的有關形參前加上保留字CONST。不允許在過程中給常量參數(shù)賦值,并且常量參數(shù)不能作為實參數(shù)傳遞給另一個過程或函數(shù)。(2)過程體過程體是一個程序段,由<局部聲明>部分與可執(zhí)行部分組成。<局部聲明>部分用來聲明該過程中所使用的類型、常量、變量,這些類型、常量、變量的作用范圍只限于該過程內部,與過程體外的同名對象無關。在<局部聲明>部分還可以包含另一個過程或函數(shù)聲明(稱為內嵌的過程或函數(shù))??蓤?zhí)行部分由begin開始,以end結束,end后面要緊根一個分號。
3.通用過程的調用通用過程的調用通過過程語句來完成,過程語句的格式如下:
過程名(<實參表>);
如果過程沒有形參時,過程語句的格式如下:
過程名;或
過程名();通用過程只能在其作用域內進行調用。通用過程的作用域在其聲明之后。2.10.2函數(shù)
函數(shù)是子程序的另一種形式,當子程序的執(zhí)行返回一個值時,使用函數(shù)就比較簡單。Delphi提供了許多內部函數(shù),如Sqrt、Cos或Format。當在程序中需要多次用到某一公式或要處理某一函數(shù)關系,而又沒有現(xiàn)成的內部函數(shù)可以使用時,Delphi允許編寫用戶自定義的函數(shù)。
1.函數(shù)的語法格式與過程一樣,函數(shù)也是一個獨立的程序段,可讀取參數(shù)、執(zhí)行一系列語句并改變其參數(shù)的值。與過程不同的是,函數(shù)具有返回值。函數(shù)的語法格式為:
Function<函數(shù)名>[(<形參表>)]:<返回類型>;[<局部聲明>]begin[<語法列>];end;以保留字Function開頭的第一行,稱為函數(shù)首部,其余部分稱為函數(shù)體。
2.函數(shù)的調用函數(shù)的調用比較簡單,可以像使用Delphi內部函數(shù)一樣來調用函數(shù),即在與函數(shù)返回值兼容的表達式中按下述格式調用:
<函數(shù)名>(<實參表>)與通用過程相同,函數(shù)只能在其作用域內進行調用,函數(shù)的作用域在其聲明之后。函數(shù)可以沒有參數(shù),在調用無參函數(shù)時不發(fā)生虛實結合,調用無參函數(shù)得到一個固定的值。
2.10.3幾個概念1.形式參數(shù)與實際參數(shù)過程定義頭語句:
Procedure過程名(形式參數(shù))函數(shù)定義頭語句:
Function函數(shù)名(形式參數(shù)):函數(shù)類型過程調用:過程名(實參數(shù))函數(shù)調用:函數(shù)名(實參數(shù))【注】寫在表達式中例:定義過程:Proceduretestsub(r:Integer,aa:Real,re:Boolean,cc:String,x:Int64)調用過程:testsub(18,cj,rr,“Test”,bm)2.參數(shù)傳遞方式(1)變量參數(shù)使用保留字var,傳遞方式為“按地址傳遞”,如果在過程或函數(shù)中改變形參變量的值,將同時影響實參變量的值。
(2)常量參數(shù)使用保留字Const,無論實參是否變量,常量參數(shù)在過程中總是被當作常量,其值不能被改變。
(3)值參數(shù)參數(shù)前面如果沒有保留字,傳遞方式為“按值傳遞”,如果在過程或函數(shù)中改變形參變量的值,則所作變動不會影響實參變量。
(4)外部參數(shù)使用保留字out,傳遞方式為“按地址傳遞”,當調用含有外部參數(shù)的過程或函數(shù)時,所引用的實參變量的值將被舍棄,形參變量僅被用來作為一個容器來存儲過程或函數(shù)執(zhí)行的中間結果。
3.使用缺省參數(shù)
在聲明過程或函數(shù)時,可以給形參指定一個缺省值,指定缺省值的方法是:在形參的類型后面使用“=”,并給出一個具體的值(常量)。如:ProcedureMyprocedure(x:Real,y:Real=10);begin…end;對上述過程,下面的兩個調用語句是等效的:Myprocedure(a,10);Myprocedure(a);應該注意的是,在過程或函數(shù)定義中,不能讓前面的形參有缺省值,而后面的形參沒有。4.函數(shù)與過程的重載
在Delphi中,允許有名字相同而參數(shù)不同的過程或函數(shù),這就是過程和函數(shù)的重載(Overload)。注意:在定義有默認參數(shù)的重載函數(shù)和過程時,必須讓系統(tǒng)能從參數(shù)中區(qū)分出應該調用哪一個函數(shù)或過程,否則該定義是非法的。
5.嵌套與遞歸(1)過程或函數(shù)的嵌套在過程或函數(shù)的定義中,過程體或函數(shù)體的開始部分可以包含局部變量的定義,主要用于定義在本過程或函數(shù)中用到的局部變量,若在其中定義了其它的過程或函數(shù),則稱為過程或函數(shù)的嵌套。嵌套必須是完全包容的,不允許部分嵌套或交叉嵌套。嵌套可以是多層的,但只有同一層的過程或函數(shù)才能相互調用,另外外層的過程或函數(shù)也可以調用內層的過程或函數(shù)。(2)過程或函數(shù)的遞歸在過程或函數(shù)中調用自身稱為遞歸調用,如果一個過程或函數(shù)直接調用自身,稱為直接遞歸;內層過程或函數(shù)調用外層或同層之間的相互調用稱為間接遞歸。6.變量的作用域
(1)公有變量與私有變量在單元的接口部分聲明的變量屬于公有變量,可以被其他單元引用。在單元的實現(xiàn)(implementation)部分聲明的變量屬于私有變量,不能被其他單元引用。(2)全程變量與局部變量在單元中的過程或函數(shù)中聲明的變量,其有效范圍僅限于該子程序本身,屬于局部變量。而在子程序之前,implementation之后聲明的變量可以為本單元中的所有子程序(過程或函數(shù))引用,因此又屬于全程變量。
全程變量在程序的TYPE區(qū)域定義,在整個程序中有效。變量作用域的實際情況要復雜得多,大體上有下列幾種情況:1.在一個單元的Private部分定義的任何數(shù)據(jù)和方法在其它單元中看不到,也不能使用;2.在一個單元的interface部分定義的任何數(shù)據(jù)和方法都可被其它單元使用;3.在一個單元的Public部分定義的任何數(shù)據(jù)和方法都可被其它單元使用;訪問其它單元中公共方法的格式為: 窗體名.公共方法名4.在一個單元的Implemantation定義的數(shù)據(jù)(和方法)是本單元的公有部分;5.在一個函數(shù)或者過程內部定義的數(shù)據(jù)(和方法)只能在其內部使用。
2.11Delphi的程序結構
一個Delphi應用程序對應一個工程,從程序結構的角度來看,它由一個主程序與若干個單元組成。
2.11.1主程序在Delphi的集成開發(fā)環(huán)境中,通過項目的方式對應用程序開發(fā)過程中的各類文件進行組織和管理。與所開發(fā)的應用程序有關的文件都組織在一個項目中,項目中的一些文件是在設計階段產(chǎn)生的,另一些是在項目編譯和連接后產(chǎn)生的。
工程文件是一個項目的主程序。在工程文件中,列出了該項目所使用的所有單元文件。通過單元文件的列表,編譯器將分別編譯每個單元文件,最后連接成可執(zhí)行的文件(.EXE)或動態(tài)連接庫(.DLL)工程文件.Dpr窗體.dfm,單元.pas等文件編譯可執(zhí)行文件.EXE動態(tài)鏈接庫.DLL主程序的結構:
programProject1;{說明工程名}uses {指定工程中使用的單元,含無窗體單元}Forms,Unit1in'UNIT1.PAS'{Form1};{$R*.RES} {連接資源文件}begin {主程序塊開始}Application.Initialize;{初始化}Application.CreateForm(TForm1,Form1); {生成窗體}Application.Run; {運行程序}end.{主程序塊結束}2.11.2單元文件一個Delphi程序包括幾個程序單元。其一為主程序單元(如標準工程的工程文件),其它為子程序單元。窗體都有相應單元,但單元未必對應窗體。單元構成:名稱:默認為Unit1、Unit2,……;接口部分:單元間可互訪該部分實現(xiàn)部分:包括了Pascal代碼可選部分:Initialization和finalization,分別在程序啟 動和終止時執(zhí)行。Unit
單元名;Interface//接口部分Uses
需要訪問的其它單元,包括定義類和組件的標準單元以及其它自定義單元
;Type
類、類型的定義;(類中有許多不同的成員,包括過程、函數(shù)、全局變量、數(shù)據(jù)類型等)Var
變量的定義;Implementation//實現(xiàn)部分{編譯偽
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級物理上冊第二章物質世界的尺度質量和密度三學生實驗:探究-物質的密度第2課時測量物質的密度教案新版北師大版
- 六年級英語上冊Unit3Myweekendplan第三課時教案人教PEP版
- 2025委托開發(fā)合同簡單版
- 第12課 新文化運動(分層作業(yè))(解析版)
- 2024年贊助合同:酒店活動贊助協(xié)議
- 第2單元 近代化的早期探索與民族危機的加?。ˋ卷·知識通關練)(解析版)
- 2025年克孜勒蘇州從業(yè)資格證貨運考試答案
- 2025年梧州從業(yè)資格證考試答案貨運
- 2025年呼倫貝爾貨運從業(yè)資格證考試模擬考試題庫
- 2025餐飲公司特許經(jīng)營區(qū)域代理合同范本與餐飲公司章程范本
- 《阿爾茨海默病康復》課件
- 2022-2023學年福建省泉州市惠安縣三年級(上)期末數(shù)學試卷
- 校企聯(lián)合實驗室的運營與維護
- 統(tǒng)編版語文2024-2025學年六年級上冊語文期末專題訓練:字音字形(有答案)
- 機器人課件模板下載
- 江蘇省蘇州市2023-2024學年高二上學期期末學業(yè)質量陽光指標調研試題 物理 含答案
- 2024年安防監(jiān)控系統(tǒng)技術標準與規(guī)范
- 軟件正版化概念培訓
- 2024-2025學年人教版道法八年級上冊 第一學期期末測試卷01
- 運輸公司安全生產(chǎn)隱患排查制度
- 譯林新版(2024)七年級英語上冊Unit 5 Reading課件
評論
0/150
提交評論