




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi簡介
Delphi7.0開發環境應用程式開發過程應用程式的組成
Delphi概述1.1Delphi簡介
Delphi的發展歷史;
Delphi的特點;
面向對象編程的基本知識;
Windows編程的基本知識。Delphi是一種方便、快捷的Windows應用程式開發工具,為程式員提供了全新的可視化編程環境。本節主要介紹以下幾方面的內容:1.1.1Delphi的發展史
隨著Windows操作系統的推出,為了解決Windows編程存在的問題,Inprise公司(原Borland公司)開發了可視化的軟體開發工具——Delphi,至今已經曆了七代產品的發展歷程。Delphi1幾乎與Windows95同時發行。Delphi1可以看做是 TurboPascal的Windows版,它為使用Pascal語言的用戶提供了 一個可視化的編程環境。但仍然屬於16位的開發環境。
Delphi2支持32位編程,並且增加了數據模組等多種高效的數據重 用功能。
Delphi3
改進了集成開發環境,對組件庫進行了許多增強,完全支持 ActiveX控件及其創建,它是一個比較成熟的版本,受 到了廣泛好評,大大鞏固Delphi作為Windows應用程式開發工 具的地位。
Delphi4、Delphi5、Delphi6不斷改進以前版本的不足,增加新的功能, 對開發環境也不斷改進和完善,特別是不斷增加新組件,以適於 網路開發的需要。
Delphi7又在以前的基礎上進行了加強,是目前的最新版本。1.1.2Delphi的特點
“真正的程式員用C,聰明的程式員用Delphi。”這句話是對Delphi最經典、最恰當的描述。Delphi具有簡單、高效、功能強大的特點。和VisualC++相比,Delphi更簡單、更易於掌握,而在功能上卻毫不遜色;和VisualBasic相比,Delphi功能更加強大,更加實用。同時具備了VisualC++功能強大和VisualBasic簡單易學的特點。最先進的編程思想:面向對象的程式設計,簡稱為OOPDelphi提供了大量的可視化組件,可視化編程功能強Delphi採用了最為領先的資料庫技術
主要特點:1.1.3用Delphi進行Windows程式設計的基本概念Delphi的編程思想與以前傳統的面向過程的編程思想有很大的不同,而在Windows操作系統下的程式設計又與DOS下的程式設計有很大的不同程式設計語言的發展面向對象程式設計方法的基本概念Windows程式設計基本知識
Delphi可視化編程基本知識主要有以下內容:1.1.4Delphi7.0新特性
按照Inprise慣例,Delphi每年都會推出一個新版本。Delphi7.0是目前最高版本,進一步提高了自身性能和操作性。
Delphi7.0在以下幾個方面進行了加強
:集成開發環境方面
Web方面資料庫方面可視組件庫及運行庫方面
1.2Delphi7.0的開發環境Delphi7.0的集成開發環境IDE是用於進行設計、運行和測試程式的工作系統。Delphi7.0運行後可以見到它的開發環境如圖1-1所示代碼編輯器窗口窗體設計器窗口組件板快捷按鈕欄對象樹狀圖對象監視器窗口
主要包括以下幾個窗口:主窗口;對象樹狀圖、對象監視器窗口;窗體設計器窗口、代碼編輯器窗口。(圖1-1Delphi7.0開發環境)1.2.1Delphi7.0主窗口Delphi7.0的主窗口位於螢幕的上端,包括Menu(菜單)、快捷按鈕欄和ComponentPanel(組件板)。Delphi7.0的主窗口如圖1-2所示。(圖1-2)主窗口各部分的詳細說明請參見本教程(P7~P9)1.2.2對象樹狀圖及對象監視器窗口
對象樹狀圖窗口(ObjectTreeView)用樹形表方式列出了專案中所有的對象,即窗口、組件、菜單等,並清楚地表明瞭它們之間的關係。對象樹形窗口如圖1-4所示。
在對象樹狀圖窗口下方是對象監視器窗口(ObjectInspector),對象監視器窗口含有兩個頁卡:屬性頁卡(Properties),顯示窗體中當前被選擇部件的屬性資訊,並允許改變對象的屬性;事件頁卡(Events),列出了當前部件可以回應的事件。對象監視器窗口如圖1-5所示。
圖1-4對象樹狀圖窗
圖1-5對象監視器窗1.2.3窗體設計器及代碼編輯器(1)
窗體設計器用於設計程式時用到的窗體外觀。窗體介面外觀設計可在組件板中選擇適當的組件,並將它設置在窗體中。其後的工作主要是設置窗體及組件的屬性。窗體設計器窗口如圖1-6所示。Forms窗口是開展大部分設計的工作區域。首次啟動Delphi時顯示的是窗體Form1。可以把一些組件放在窗體中,通過移動位置、改變尺寸等操作隨心所欲地安排它們,以此來開發應用程式的用戶介面。對象樹狀圖窗口與對象觀察器窗口、窗體設計器窗口同步,即在此三個工具的任何一個中改變焦點時,另外兩個工具的焦點也會發生變化。(圖1-6窗體設計器窗口
)1.2.3窗體設計器及代碼編輯器(2)
可從對象監視器中選擇某事件,雙擊後進入代碼編輯器。也可在窗體中直接雙擊某對象進入代碼編輯器,通過這種方法進入代碼編碼器時,游標會自動定位在相應的事件處理過程中。
啟動Delphi或執行NewForm菜單項時,系統即生成一個新的窗體,並在代碼編輯器中產生一個新頁卡,在新頁卡中可以編輯相應的單元代碼。按F12可以在窗體設計器窗口和代碼編輯器窗口之間轉換。
(圖1-7代碼編輯器窗口
)1.2.3窗體設計器及代碼編輯器(3)為了減輕編寫代碼的工作量,Delphi7.0除了提供一般的編輯功能外,還提供了以下功能。
(圖1-8代碼完善功能) 1.·代碼完善功能類成員自動提示:在代碼編輯器中輸入某個類變數及其後的“.”號後,系統會自動列出相應的類方法、屬性名稱等,以供程式員選擇設置,選擇後Enter鍵即可完成輸入。如圖1-8所示。
2.參數自動提示功能當調用某一種方法時,只要輸入方法名及其後的左括弧,系統就會自動提示該方法的參數類別以及參數個數,程式員可根據這種提示填寫參數,這樣既為程式員提供了方便,又保證了參數的正確性,如圖1-9所示。(圖1-9參數自動提示功能)1.2.3窗體設計器及代碼編輯器(4)
(圖1-10代碼範本功能
)(圖1-11符號洞察功能)
3.·代碼範本功能用於提供語句範本以幫助代碼的編寫,例如:輸入“if”,按組合鍵Ctrl+J,系統自動彈出有關“if”語句的代碼範本供程式員選用,如圖1-10所示。
4.符號洞察功能程式員在代碼編輯過程或程式調試過程中,將滑鼠置於一個識別字上,稍做停頓系統將自動彈出一個提示框,提示框中顯示該識別字的類型、所屬單元、聲明位置等資訊,如圖1-11所示。1.3設計第一個Delphi7.0程式
本節要創建一個簡單的應用程式。啟動Delphi7.0程式,出現一個窗口,窗體標題欄中顯示“Delphi7.0程式”字樣,在窗體中有一個“顯示”按鈕,單擊該按鈕顯示一行文字“第一個Delphi7.0程式”。單擊窗體右上方關閉按鈕時退出程式。通過設計一個簡單的應用程式。掌握以下內容:
應用程式開發過程;
常用開發工具及功能;
應用程式組成;
應用程式編譯及執行。
在Delphi7.0中開發的每個應用程式都被稱為工程。Delphi7.0編程首先從創建一個新工程開始。創建新工程有以下兩種方法:
1.3.1新建應用程式工程
新創建的工程中包含一個默認窗體(Form1)和它對應的單元(Unit1),根據工程的需要可添加窗體或單元。工程檔的擴展名為.dpr。打開一個已建立的工程的方法是:單擊File菜單,指向OpenProject,然後選擇工程檔即可。
啟動Delphi7.0進入開發環境,此時系統自動生成一個工程,默認名為Project1;選擇File菜單,指向New,然後單擊Application系統將創建一個新的工程。1.3.2設計窗體和組件的屬性(1)
程式設計首先是窗體設計。因此第一項工作就是在窗體設計器完成窗體設計,在窗體中添加各種所需對象進行介面設計。將組件板上的組件添加到窗體上有三種方法。(1)單擊組件板上所需組件的按鈕,然後在窗體適當位置拖動滑鼠畫出組件,即可將組件添加到窗體指定位置。(2)雙擊組件板上所需組件的按鈕,即可將組件添加到窗體中心位置。(3)按下Shift鍵不放,單擊組件板上所需組件的按鈕,所選擇組件出現藍色邊框,同時對象選擇按鈕彈起。可以在窗體適當位置連續畫出該類組件,用滑鼠單擊對象選擇按鈕,可以取消該類組件的連續添加操作。
本程式中要用到兩個組件,一個是標籤(Label)組件用於顯示文字,另一個是按鈕(Button)組件用於控制文字的顯示。新建一個工程,從組件板的Standard頁卡中選擇一個標籤組件和一個按鈕組件,放置在窗體Form1上,Delphi7.0分別將它們自動命名為Label1,Button1。1.3.2設計窗體和組件的屬性(2)
剛添加到窗體中的組件,其邊框上有八個黑色小方塊,表明它是當前被選定的組件。可以用滑鼠拖拉邊框上黑色小方塊使組件在相應方向上放大或縮小,也可用滑鼠指向組件內部,按下滑鼠左鍵並拖動滑鼠到窗體的任意位置。按組合鍵Ctrl+C可以對所選組件進行複製,Ctrl+V可以在窗體中進行粘貼,按Delete鍵可以刪除所選組件1.移動組件把滑鼠移到想移動的組件上,按住左鍵並移動游標,到合適的位置再釋放左鍵,整個組件即被移到新位置。2.調整尺寸把滑鼠移動到要改變尺寸的組件上,單擊左鍵選中該組件。尺寸調整器出現後,把滑鼠移動到其中的一個小黑色方塊上,當滑鼠變成拖動方向指示時,按下並拖動滑鼠左鍵,可以放大或縮小組件。上下左右的小方塊用來移動對應的各邊,四個角的方塊可以移動相連的兩條邊。如果要精確地表述部件的尺寸,可以在ObjectInspector上,改變Left(表示部件左邊緣到窗體左邊框的像素點數)、Top(表示窗體上邊框到部件上邊緣的像素點數)、Width(部件本身的寬度)、Height(部件本身的高度)等屬性。1.3.2設計窗體和組件的屬性(3)3.組件對齊用調整位置的方法可以對齊組件,但操作步驟複雜。Delphi7.0提供的對齊工具可以使多個組件的對齊極為迅速方便。
按下Shift鍵,用滑鼠單擊所要選擇的組件,可實現多重選定;或者用滑鼠在窗體上拉出一個矩形,凡是與此矩形相交的組件均被選定。選定多個組件後可以進行所需的對齊操作。被選中的按鈕周邊會出現暗灰色的邊框,選用Edit菜單,單擊Align命令,或單擊滑鼠右鍵啟動彈出式菜單選擇Position指向Align,可以顯示圖1-12所示的對話框。
利用對齊範本來對齊組件也是很方便的,首先將要對齊的組件選成一組,選擇View菜單指向AlignmentPalette顯示對齊範本,如圖1-13所示。按照所示的方式選擇即可達到對齊的目的。(圖1-13對齊範本
)(圖1-12對齊對話框)1.3.2設計窗體和組件的屬性(4) 4.鎖定組件如果部件已經對齊,為防止不小心移動組件,可以將部件位置鎖定。選擇Edit菜單,指向LockControls選項,使得組件不能進行移動操作。解鎖只需再次選擇此項即可。設計介面還包括對組件名稱、標題、風格等屬性的設置,這些設置必須在對象觀察器的屬性選項卡中進行。本例中要進行如下設置
首先設置窗體Form1的屬性。單擊窗體的空白區域,看到對象觀察器的對象下拉列表框中顯示的是“Form1Tform1”。從屬性名中找到標題屬性(Caption)一項,將其值改為“Delphi程式”。為了使窗體變得美觀合適,更改高度屬性(Height)值為220,寬度屬性(Width)值為350。1.3.2設計窗體和組件的屬性(5)
選擇標籤Label1,修改其標題屬性值為“第一個Delphi17.0程式”。為了使文字醒目,修改它的字體屬性(Font),單擊字體屬性右邊的按鈕“...”,從彈出的對話框中設置相應的字體,如圖1-14所示,將它字體設為“楷體_GB2312”,字形設為“粗體”,大小設為“一號”,並更改高度屬性(Height)值為35,寬度屬性(Width)值為300。
要實現剛開始時文字不可見,在單擊時顯示文字,本例將標籤Label1的可見屬性(Visible)設為“False”。
設置按鈕Button1的標題屬性為“顯示”。並將顯示按鈕和標籤拖動到適當位置。
(圖1-14設置字體)1.3.3編寫事件處理程式
為了使“顯示”按鈕能夠在執行時回應滑鼠的單擊操作,須在按鈕的單擊事件(OnClick)中設置事件處理程式。程式員沒有必要對所有的事件都編寫事件處理程式,只需對程式所涉及的事件進行編寫事件處理程式,本例中要對按鈕的單擊事件編寫事件處理程式。選擇Button1對象,在對象監視器中選擇“事件”選項卡,在事件選項卡中選擇OnClick事件,雙擊事件處理欄,Delphi自動生成該事件過程的代碼框架,同時打開代碼編輯窗口,將游標定位在代碼框架過程體的首行處,在過程體中加入如下代碼:
label1.visible:=true; 如圖1-15所示。(圖1-15編寫事件處理程式)輸入完畢可以看到按鈕Button1的滑鼠單擊事件處理程式的全部內容是:procedureTForm1.Button1Click(Sender:TObject);beginLabel1.Visible:=True;end;end.1.3.4保存工程設計好的應用程式在運行前應當先保存起來,避免檔因發生意外而丟失。保存檔的方法有:(1)單擊菜單File,SaveAll;(2)單擊工具欄上的SaveAll按鈕;(3)使用快捷鍵Ctrl+Shift+S。
單擊工具欄上的SaveAll按鈕,彈出一個保存單元檔對話框,在上面的保存目錄下拉框中選擇Sample目錄,檔案名默認是Unit1.pas,將它改為Main.pas,單擊保存按鈕。接著彈出一個保存工程檔對話框,檔案名默認是Project1.dpr,將它改為Sample.dpr,單擊保存按鈕,此時應用工程被保存在Sample目錄下。保存工程時單元檔案名不要和工程檔案名相同。作為一個實際的應用程式,應當將這些默認的檔案名更改為更有意義,不易混淆的檔案名。當專案包含的檔較多時這一點就顯得更加重要,如果檔案名指定不當會出現意想不到的麻煩。一般不要在Delphi7.0系統外更改專案所用檔的檔案名。打開Sample目錄可以發現有六個檔,分別是Main.dfm、Main.pas、Sample.cfg、Sample.dof、Sample.dpr、Sample.res。應當注意,一個應用程式並不是只由一個檔組成,而是由許多不同類型的檔組成的。1.3.5編譯執行
可選擇Project/Compile菜單項對專案中的檔進行編譯。如果語法有錯,則根據提示的錯誤資訊修改後再編譯,直到編譯無錯誤時,選用菜單項中的Run/Run菜單轉入運行。也可兩步合為一步,直接選用菜單項中的Run/Run菜單(或按F9熱鍵)系統直接進行程式的編譯與運行。(圖1-16執行程式)
程式運行結果如圖1-16所示,當出現一個名為Delphi7.0程式的窗口,單擊窗口上的顯示按鈕,顯示一行文字“第一個Delphi7.0程式”,單擊窗體右上方關閉按鈕時退出程式。在程式中除了語法錯誤,還有可能在程式運行中出現錯誤,這就要涉及到程式的調試。Delphi7.0為程式員提供了方便的程式調試手段。1.4Delphi7.0程式的組成
在前一節中,編寫了一個簡單程式來實現顯示一個標籤,並把程式儲存在了Sample目錄下,觀察該目錄可以發現,一個簡單的Delphi7.0程式是由多個檔組成的。其中包括以下幾種檔。工程檔(.Dpr):Delphi7.0工程檔,用於保存窗體、單元等的資訊,以及程式運行的初始化代碼等,這種檔實際上包含了Pascal源代碼。單元檔(.Pas):Pascal檔,用於保存程式源代碼,可以是與窗體有關的單元或是獨立的單元。窗體檔(.Dfm):保存窗體或數據模組及其構件特性的二進位檔。選項檔(.Dof):含有當前專案選項設置的文本檔。配置檔(.Cfg):含有當前專案編譯配置的文本檔。資源檔(.res):該二進位檔包含專案的圖示,由Delphi7.0不斷更新和創建,用戶一般不需要修改。備份檔(.~dp,.~df,.~pa):分別對應工程、窗體、單元檔的備份檔。1.4.1程式的基本組成(1)
最重要的與程式設計緊密相關的檔有三類:工程檔,窗體檔,單元檔。1.工程檔工程檔擴展名為.dpr。是整個應用程式的主程序,有兩項功能:一是說明工程中的單元模組,二是啟動應用程式。工程檔由Delphi7.0自動生成,一般情況下不修改這個檔。單擊Project選擇ViewSource,可以在代碼編輯器中打開Sample.dpr,進行查看和修改。programSample; //保留字program說明這是一個工程檔
//檔案名為sample.dpruses //保留字uses對工程所引用的單元進行說明
Forms, //引用Forms單元
mainin'main.pas'{MainForm};//引用main單元,在當前目錄的main.pas檔中,相應的窗體為MainForm{$R*.res}//系統編譯命令,將擴展名為.res的二進位資源檔連接到.exe檔中去begin //工程執行部分的開始聲明
Application.Initialize;//應用程式的初始化
Application.CreateForm(TMainForm,MainForm);//創建窗體MainForm Application.Run; //運行程式end. //工程執行部分的結束說明1.4.1程式的基本組成(2)2.窗體檔窗體檔的擴展名是.dfm。一個或多個窗體檔,它們含有相應的單元檔。這些檔包含了窗體上組件的屬性設置。這樣的檔是用戶在設計介面的時候由Delphi7.0自動生成的,而且不能編輯。在Delphi7.0中,一個應用程式至少需要一個窗體。用滑鼠單擊窗體,在快捷菜單選擇Viewastext即可在代碼編輯器中看到以文本形式表示的窗體檔的內容,工程Sample中的Mainform窗體檔的文本形式。(代碼省略,詳見本教程P18~P19)3.單元檔單元檔的擴展名為.pas,是在代碼編輯器中編寫過的過程代碼檔。在Delphi7.0中每個窗體都有一個單元檔與之相對應,窗體的單元檔包含了程式部分,用以控制窗體的行為。在一個工程中,還可以建立與窗體無關的單元檔,用來編寫工程中公用的函數、過程或定義新的數據。許多工程還調用了Delphi7.0附加庫或其單元檔中的過程或函數。uses子句中包含的標準單元檔包含了支持可視窗體及其控制的對象聲明。這些單元也包含了用於啟動窗體的事件處理過程程式。(代碼省略,詳見本教程P19~P20)1.4.2ObjectPascal的單元(1)
單元是常量、變數、數據類型、過程與函數的集合,而且能夠被多個應用程式所共用。Delphi7.0內部包含了多個程式單元,它們說明了對象、組件、常用過程與函數以供程式員在設計應用程式時使用。例如,當在窗體中加入一個CheckBox組件時,Delphi7.0自動在引用單元說明部分中加入了Stdctrls單元,因為CheckBox組件是在StdCtrls單元中說明的。當設計窗體時,Delphi7.0會自動建立一個和該窗體有關的單元檔,但並非所有的單元都和窗體有關,程式員可以自行編寫只包括過程與函數的單元。1.程式單元的結構不管一個單元是否和一個窗體有關,單元的結構都是相同的。其結構如下:
unit<單元名稱>interfaceuses<選擇性的單元列表>{公有說明}implementationuses<選擇性的單元列表>{私有說明}{過程與函數的執行部分}initialization{選擇性的初始化程式}end1.4.2ObjectPascal的單元(2)2.程式單元的介面部分Interface是單元的介面部分,它決定了本單元對其他任何單元或程式的可見(可訪問)部分。可以在介面部分說明變數、常量、數據類型、過程與函數等等。在設計窗體的單元中,將窗體數據類型、窗體變數和事件處理過程都在這一部分說明。Interface標誌單元介面部分的開始。在Interface中說明的部分對其他單元或應用程式是可見的。一個單元可以使用其他單元的說明,只需要在uses語句中指明那些單元即可。例如,在單元A中編寫程式代碼,想調用單元B中Interface部分說明的程式。可以把單元B的名稱加入到A的Interface部分的uses子句中,則任何A中的程式都可以調用B中說明的程式。但如果B出現在A的Interface部分的uses子句中,那麼單元A便不能出現在B的Interface的uses子句中。因為這樣會產生對單元的迴圈訪問。當試圖編譯時,會產生出現錯誤資訊。3.程式單元的實現部分實現部分Implementation中包含Interface中說明的過程、函數、事件處理過程的具體實現代碼。這一部分可以有自己的額外說明,但這些說明是私有的,外部程式不能調用這些說明。在Interface中說明的函數實體必須在1.4.2ObjectPascal的單元(3)4.程式單元的初始化部分初始化當前單元所使用的數據,或是通過Interface部分將數據提供給其他應用程式單元使用時,可以在單元的end前加入一個Initialization部分。當一個應用程式使用一個單元時,在單元中的Initialization部分會先於其他的代碼執行。如果一個應用程式使用了多個單元,則每一個單元的初始化部分都會在所有的程式代碼前執行。5.使用Delphi7.0的組件及其單元在窗體中加入組件時,如果該組件在組件庫中,Delphi7.0會在單元的Interface部分的uses子句中自動加上需要使用的單元名稱。但有些對象在Delphi7.0的環境中並沒有組件存在。例如,想在單元中加入一個預定義的資訊框,則必須把MsgDlg單元加入到uses子句中。要使用在其他單元中說明的函數,應在函數的前面加上這一單元的名稱,並用‘.’號隔開。例如,要在Unit2中使用Unit1中說明的test函數,應使用下麵的Implementation部分出現,可以使用標題簡寫:只輸入Procedure或Function保留字,後面跟過程或函數的名稱即可,其後則是程式的實現部分了。2.1基本概念
Delphi7.0是一個基於ObjectPascal語言的Windows應用程式開發系統,在所有的事件處理過程和應用程式中都是使用它來編寫程式代碼。ObjectPascal編程語言是在Pascal語言的基礎上發展起來的,它繼承了Pascal語法嚴謹、數據結構豐富等優點,同時融入了面向對象編程的語法要素,使之成為一種優秀的面向對象編程語言。2.1.1保留字
首先介紹ObjectPascal語言的最基本內容:保留字和標誌符。保留字(ReservedWords)是由系統規定的、具有特定意義的單詞。在編程時不能被重新定義或另作他用。ObjectPascal語言規定的保留字有65個,詳見本教程P23頁表2-1。
除了上述的保留字外,Private、Protected、Public、Published和Automated在定義對象類型時也作為保留字,而在其他場合則作為指令符。單詞at和on也具有特殊的含義。
注意:ObjectPascal編程語言和許多編程語言不同,它對單詞的大小寫是不敏感的。ObjectPascal不區分大小寫。IN、in和In都被看做是同樣的意義。2.1.2識別字
識別字是ObjectPascal語言中用來表示應用程式量的名稱。包括:變數(Var)、常量(Const)、類型(Type)、過程(Procedure)、方法(Method)等。識別字分為標準識別字和自定義識別字兩類。
標準識別字是ObjectPascal語言系統預先分配給標準常量、標準類型、標準函數、標準過程及標準檔使用的識別字。如標準常量:False、True;標準類型:integer、char、real;標準函數:Abs、Sqr、Cos等。自定義識別字是程式員根據需要為自己定義的常量、變數、類型、函數、過程以及所編寫的程式名等。ObjectPascal識別字由字母、數字、下劃線組成,其規定為:(1)必須以字母或下劃線開始;(2)不能與保留字相同;(3)避免與ObjectPascal已經使用的標準識別字相同。2.1.3指令符
指令符(directives)也是具有特殊意義的單詞,但與保留字不同的是可以將指令符定義為識別字,ObjectPascal不會指示出錯,但這容易混淆。ObjectPascal規定的指令符見表2-2。absoluteabstractassemblerautomatedcdcelcontainsdefaultdispiddynamicexportexternalfarforwardimplementsindexmessagenamenearnodefaultoverloadoverridepackagepascalprivateprotectedpublicreadreadonlyregisterretroducerequiresresidentsafecallstdcallstoredvirtualwritewriteonly表2-2ObjectPascal語言規定的指令字2.2數據類型
描述客觀事物的數、字元以及所有能輸入到電腦中並被電腦程式加工處理的符號的集合稱為數據。數據的一個重要特徵就是其所屬的數據類型,數據類型不僅確定了該類數據的表示形式和取值範圍,而且還確定了數據所能夠參加的各種運算。ObjectPascal提供了多種數據類型,包括標準數據類型和高級數據類型。標準數據類型屬於ObjectPascal內部約定的數據類型,無需定義就可以直接使用。標準數據類型有整型(Integer)、實型(Real)、字元型(Character)、字串型(String)、布爾型(Boolean)五種。高級數據類型體現了特殊的數據結構,在使用之前必須由用戶自己進行定義。高級數據類型有枚舉型(Enumerated)、子界型(Subrange)、集合類型(Set)、數組類型(Array)、記錄類型(Record)檔類型(File)、類類型(Class)、類引用類型(ClassReference)、介面類型(Interface)、指針類型(Pointer)、過程類型(Procedural)、可變類型(Variant)。2.2.1整型
整數包括正整數、負整數和零。整型是存儲整數數據的類型。ObjectPascal包括9種形式的整型數據,詳見本教程P25頁表2-3。
前2種為一般整型,後7種為基本整型,應儘量使用Integer、Cardinal兩種基本類型,因為它們在各種CPU和操作系統中都提供最佳的性能。通常,作用於整數的算術運算符返回Integer類型的值。在當前執行中,等價於32位的長整型(LongInt)。僅當對Int64類型執行運算時,運算結果返回Int64類型。因此,下麵的代碼執行後得到的結果是不正確的:vari:Integer;j:Int64;...i:=High(Integer);//取Integer類型中的最大值j:=i+1;要使返回值是Int64類型,在上面的情況中可以將
i轉換為Int64。代碼如下:...j:=Int64(i)+1;2.2.2實型
實數是最常用的數據類型。在ObjectPascal中實數有兩種表示方法:小數表示法和科學計數法。例如:-3.6,2.4e0,–1.2e-5,3E7
小數表示法與日常數學中所用表示方法相同。科學計數法中,e之前表示有效數字,e之後數字表示10的冪。即–1.2e-5=(-1.2)×10-5=-0.000012
需要注意的是小數表示法中小數點前後都必須有數字,科學計數法中e前後都必須有數字,e可以大寫成E。實型是存儲實數數據的類型。ObjectPascal包括5種形式的實型數據,詳見本教程P26表2-4。
(圖1-2)
前六種為基本數據類型,Real為一般實型。最常用的實型是Real類型,它與Double等價。Currency是專為處理貨幣而設計的,該類型與其他實型進行運算時,Delphi自動將結果轉化為Currency類型。2.2.3字元型
字元型是存儲單個字元的類型。ObjectPascal包括3種形式的字元型數據,詳見表2-5。基本字元類型是AnsiChar和WideChar。AnsiChar的尺寸是一個位元組(8位),其值參照本地字元集。AnsiChar最初模仿ANSI字元集,但現在用於擴大到當前的本地字元集。WideChar字元用多於一個位元組來表示每個字元。WideChar的尺寸是一個字(16位),其字元順序參照Unicode字元集,Unicode字元集中的前256個字元對應ANSI字元。一般字元類型是Char,等價於AnsiChar。字元類型數據的表示方法是用兩個單引號括起單個字元如:'A'、'6'、'.'。
''表示空白字元。表2-5ObjectPascal語言的字元型類型名稱位元組數取值範圍Ansi字元型AnsiChar1擴展ANSI字元集寬字元型WideChar2UniCode字元集字元型Char1(2)擴展ANSI字元集2.2.4字串型
字串型是存儲字串數據的類型。ObjectPascal包括4種形式的字串型數據,詳見本教程P27頁表2-6。
保留字string的作用如一般類型的識別字。例如: varS:string;
創建了變數S,用於保存串。在默認的編譯指示{$H+}狀態下,編譯器將string(後面沒有跟隨方括號和數字)解釋為AnsiString;使用編譯指示{$H-}時,解釋為ShortString。
ShortString類型串的長度在0到255之間。ShortString串的長度可以動態改變,其佔用的記憶體是靜態的,總是256位元組;第一個位元組存儲串的長度,其餘255個位元組存儲串中的字元。
AnsiString也叫做長串(longstring),用來表示動態分配的串。
WideString類型表示16位Unicode字元的動態分配的串。WideString類型大部分的特性與AnsiString類型相似。
ObjectPascal還支持其他最大長度在0到255之間的短串。可以通過在保留字string後邊附加方括號括起來的數字來表示。例如: varMyString:string[100];
創建了一個叫做MyString的變數,其最大長度為100個字元。2.2.5布爾型
布爾型數據用於進行邏輯運算,布爾型數據的值只有兩個:True(真)和False(假)。ObjectPascal包括4種形式的布爾型數據,詳見表2-7。Boolean類型是編程時常用的布爾類型,其他三種類型是為了相容其他語言而設置的。Boolean類型的取值為False和True兩個符號常量。在ObjectPascal中,布爾運算式不能被等同為整數或實數。因此,如果x是一個整數類型的變數,那麼語句 ifxthen...;將產生一個編譯錯誤。可以將上個語句改為: ifx=1then...;
表2-7ObjectPascal語言的布爾型類型名稱位元組數取值布爾型Boolean1只能為False(0)或True(1)位元組布爾型ByteBool1False或True(非False)寬布爾型WordBool2False或True(非False)長布爾型LongBool4False或True(非False)2.2.6序數類型1.序數類型
序數類型包括整數、字元、布爾、枚舉、子界等類型。序數類型定義了一個有序的值的集合。集合中的每個值(除第一個)都有一個唯一的前驅值,每個值(除最後一個)都有一個唯一的後繼值。對於第一個序數的前趨和最後一個序數的後繼在此不做討論。此外,每個值都有一個序號,類型中的序號決定值在類型中的順序。大多數情況下,如果一個值的序號為n,那麼它的前驅值的序號為n–1,後繼值的序號為n+1。
2.序數函數(1)序數函數Ord()返回數據的序數。例如:Ord(6)的返回值為6,表示整數6的序數是其本身。(2)前趨函數Pred()返回數據的前趨值。例如:Pred('e')的返回值為'd',表示字元e的前趨是字元d。(3)後繼函數Succ()返回數據的後繼值。例如:Succ(False)的返回值為True,表示布爾型數據True是False的後繼。(4)首序數函數Low()返回序數類型的數據中序數最小的一個數據。(5)末序數函數High()返回序數類型的數據中序數最大的一個數據。2.3常量與變數
在程式設計中常用到兩種形式的數據,一種是在程式執行過程中其值保持不變的數據,稱為常量;另一種是在程式執行過程中其值可以改變的數據,稱為變數。
常量是一種在程式執行進程中其值保持不變的數據。根據使用的方式不同,程式中的常量分為直接常量、真實常量與類型常量。2.3.1常量1.直接常量直接常量是指在程式中直接引用的整數、實數、字元、字串或其他不同類型的常數。下列常數均屬於直接常量。(1)帶有正負號的整數或無符號的整數,如:-1,+2,2003,0。(2)實數,包括定點實數與浮點實數兩種表示形式。定點實數即小數形式,如:0.03,-32.48,+102.9,0.0。浮點實數即指數形式,如:+2.56E-5,-1.2E+8,3.2E12。2.3.1常量(2)2.真實常量真實常量是指一個被聲明的識別字,它的值不能改變。如果在一個程式中,某一個常數反復多次出現可以定義一個識別字來代表該常數。定義常量時使用常量說明語句,語法格式為:const<常量名1>=<常量值1>…<常量名n>=<常量值n>
其中const是ObjectPascal的保留字,表示常量定義的開始。<常量名>即常量的識別字,<常量值>是直接常量或常量組成的運算式。例如:constPI=3.1415926;K=PI/180;
不能在程式中給常量另行賦值,否則會導致語法錯誤。(3)字元,由單撇號括起來的單個字元,如:'a','C','6','+'。(4)字串,由雙撇號括起來的字串,如:"hello","abc123","3.234"。(5)布爾型常數,只有兩個值True和False。2.3.1常量(3)3.類型常量類型常量不同於真實常量,它能保存數組、記錄等高級數據類型的值。定義類型常量的語法格式如下:
const <常量名>:<類型名>=<常量值>;例如:constHello:string='Hello';Max:Integer=100;Digits:array[0..9]ofChar=('0','1','2','3','4','5','6','7',‘8’,‘9’);//定義了一個常量用於保存數組在缺省的編譯狀態{$J-}中,類型常量不能被賦予新的值,這時的類型常量相當於只讀變數。然而,如果編譯指示{$J+}有效,那麼類型常量可以被賦予新的值,這時的類型常量相當於被初始化過的變數。
變數是程式代碼中代表一個記憶體地址的識別字,而此地址的記憶體內容在程式代碼執行時可以被改變。在使用變數前必須對它進行說明,即對它進行命名,並說明它的類型。變數就像數據容器,而且由於變數被定義了類型,只能用於儲存與其定義類型相相容的數據。2.3.2變數(1)變數有如下三個主要特徵。(1)變數名:即變數的識別字,用於對所代表的記憶體單元的引用。(2)類型:變數的類型決定了變數中所存放數據的範圍、有效的操作、存儲空間的大小和格式。(3)變數值:變數所代表的記憶體單元中的數據值。程式中的變數必須先聲明才能使用。1.變數的聲明變數在單元、函數或過程的聲明部分進行聲明,聲明位置決定了變數的作用範圍。變數聲明的格式為:2.3.2變數(2)
聲明多個同類型的變數時可採用如下格式:
var<變數名1>…<變數名n>:<類型名>
其中var是ObjectPascal的保留字,表示變數定義的開始,<變數名>可以是任意合法的識別字,<類型名>可以是ObjectPascal的基本數據類型也可以是由用戶定義的高級數據類型。聲明在過程或函數內部的變數有時叫做局部變數,而在應用程式開始聲明的變數叫做全局變數。全局變數可以在聲明時對它進行初始化,格式為:
var<變數名>:<類型名>=<常量運算式>
其中常量運算式的值必須與變數定義的類型相相容。var<變數名1>:<類型名1>…<變數名n>:<類型名n>2.變數使用
變數經過聲明之後,就可以在程式中使用了,通常可以通過賦值語句給變數賦值。如果沒有明確初始化全局變數,那麼編譯器將對其初始化為0。不同的是,局部變數不能在其聲明中被初始化並且在其被賦值之前包含的是亂數據。一旦聲明了一個變數,應及時對它賦值進行初始化,未經初始化的變數的值是一個不確定的亂數,如果該變數參與運算或是出現程式流程中將會產生意想不到的後果。初始化變數的最簡單方法就是給變數賦值。2.3.2變數(3)2.4運算符與運算式
運算是對數據進行加工處理的過程,描述各種不同運算的符號稱為運算符,而參與運算的數據稱為運算元。運算式是表示某個求值規則的運算公式,它由運算符和圓括號將常量、變數等運算元以合理的形式組合而成。運算式可以用來執行運算、操作或測試數據,每個運算式都會產生惟一的值。運算式的類型由運算符的類型決定。在ObjectPascal中有以下幾種運算符:算術運算符、位運算符、字串運算符、關係運算符、布爾運算符、集合運算符、指針運算符、類運算符和@運算符。本章中先介紹幾種常用的運算符。1.算術運算符
ObjectPascal有8個算術運算符,在這8個算術運算符中,除取正“+”、取負“-”是單目運算符外,其他均為雙目運算符,詳見本教程P31頁表2-8。其中+、-、*運算的含義與數學中的相同,參加運算的數可以是整型也可以是實型,結果由Delphi7.0自動向精度高的數據類型轉化。參加除法運算“/”的數無論是整型或是實型,結果都是實型。參加整數除法“div”和求餘運算“mod”的數必須是
2.4.1算術運算符2.4.1算術運算符
2.算術運算式算術運算式是由算術運算符、數值型常量、變數、圓括號組成,其運算結果為一數值。 例如:3*4+(90-5)/4*2的值為54.5。在書寫算術運算式時應當注意以下兩點:(1)在數學中可以省略乘號,但在算術運算式書寫中不可以省略,如在數學中相乘可以寫成2x,但在編程中必須寫成2*x;(2)所有括弧都用小括弧(),括弧必須配對,例如數學式3[x+(y-z)]在編程中必須寫成3*(x+(y-z))。整型,結果也是整型,分別是除法的商和餘數。在運算式a/b、adivb、amodb中,如果b的值為0將會觸發一個錯誤。 例如:10mod3的值為1,10div3的值為3。2.4.2位運算符
位運算符是指對運算元進行的按位邏輯運算。其運算對象是整數,運算結果也是整數,ObjectPascal有6個邏輯運算符,詳見表2-9。and、or、not和xor運算符當運算符兩側為數值數據,則將數值數據轉換為二進位數(補數形式)進行按位運算。設x值為3,y值為5,在內存中按二進位保存,即x,y值分別為00000011,00000101。按位計算結果如下:notx的值為 11111100(十進位數–4)xandy的值為 00000001(十進位數1)xory的值為 00000111(十進位數7)xxory的值為 00000110(十進位數6)xshl2的值為 00001100(十進位數12)xshr1的值為 00000010(十進位數2)運算符名稱舉例運算符取值名稱舉例not按位取反notxxor按位異或xxoryand按位與xandyshl左移位xshl2or按位或xoryshr右移位yshr1表2-9ObjectPascal語言的位運算符2.4.3字串運算符ObjectPascal只有一種字串運算符,即連接運算符“+”。該運算符用於連接兩個或更多的字串。當兩個字串用連接運算符連接起來後,第二個字串直接添加到第一個字串的尾部,結果是一個更長的包含兩個字串的全部內容的字串,也可以把多個字串連接起來,每兩個字串之間都要用“+”號分隔。例如:'abcdef'+'123'連接後結果為:'abcdef123''abc'+'123'+'xyz'連接後結果為:'abc123xyz‘
加號(+)運算符對串的操作與其對數字的操作有很大差異。對於數字a、b,運算式a+b與b+a是等價的,對於字串s1、s2運算式s1+s2與s2+s1不是等價的。例如,當s1為'hello'、s2為'world'時,s1+s2返回的值是'helloworld',而s2+s1返回的值是'worldhello'。也就是說,當加號(+)作為字串運算符時,運算元的位置順序直接影響運算結果。2.4.4關係運算符
關係運算符又稱為比較運算符,用來對兩個運算式的值進行比較,比較的結果是一個布爾值(True或False)。關係運算式是指用關係運算符將兩個運算式連接起來的式子。ObjectPascal提供的關係運算符有9種,詳見表2-10。表2-10ObjectPascal語言的關係運算符運算符名稱舉例運算符取值名稱舉例=等於4=5值為False>大於4>5值為False<>不等於4<>5值為True<=小於或等於4<=5值為True<小於4<5值為True>=大於或等於4>=5值為False
關係運算符兩側可以是數值運算式、字元型運算式或其他運算式,也可以是常量、變數或函數,但其兩側的數據類型必須是相容的標準數據類型或順序類型。各關係運算符的運算級別相同。運算次序為:先分別求出關係運算符兩側運算式的值,然後再把兩者的值進行比較,兩者的關係若與關係運算符指示的一樣,則關係運算的結果為真(True),否則結果為假(False)。數值型數據按其數值大小進行比較;字元型數據按其ASCII碼值進行比較,比較字串時先比較第一個字元,其中ASCII碼值較大的字元所在的字串大。若第一個字元相同時比較第二個字元,…以此類推。順序類型數據的比較按照其序數進行比較。2.4.5布爾運算符
在表示較為複雜的條件判斷時,必須使用布爾表示式。布爾運算式是指用布爾運算符連接若干關係運算式或布爾值組成的式子,如a≤x≤b可以表示為:a<=xAndx<=b,布爾運算式的值也是一個布爾值。ObjectPascal提供4種布爾運算符,詳見表2-11。表2-11ObjectPascal語言的布爾運算符運算符名稱舉例說明and與(4>5)and(3<4)該運算式值為False。當兩個運算式的值均為真,結果才為真,否則結果為假。or或(4>5)or(3<4)該運算式值為True。兩個運算式中只要有一個運算式的值為真,結果就為真,兩個運算式的值均為假時結果為假。not非not(4>5)該運算式值為True。進行取“反”操作,由真變成假或由假變成真。xor異或(4>5)xor(3<4)該運算式值為True。當兩個布爾運算式值不同時結果為True。2.4.6運算符的優先順序
在一個運算式中進行多種操作時,ObjectPascal會按一定的順序進行求值,這個順序稱為運算符的優先順序。在運算式中運算符的優先順序決定了運算被執行的順序。常用運算符的優先順序如本教程P34頁表2-12所示。
當一個運算式中含有多個算術運算符時,將按優先順序由高到低的順序求值。優先順序高的運算符在優先順序低的運算符之前求值,優先順序相同時自左向右求值,如果運算式中含有括弧,則先計算括弧內運算式的值,如果有多層,先計算最內層括弧中的運算式。例 如運算式:
x+y*z
先運算y乘以z,然後將乘積(運算結果)與x相加;運算符*先被執行,因為它比運算符+優先。可以使用圓括號超越所有的優先順序規則。圓括號中的運算式最先被求值,因此可以被視為一個單獨的運算元。例如運算式:
(x>y)and(x>z)
首先判斷x是否大於y,然後判斷x是否大於z,最後將兩次判斷的結果相與,只有當x的值比y、z的值都大時此運算式的值才為true。該運算式不能書寫為:
x>yandx>z
根據運算符的優先順序,該運算式將解釋為:
(x>(yandx))>z
若x,y,z均為實型或整型數據時將產生編譯錯誤。圓括號通常使代碼更容易讀寫,在編程過程中應當合理使用圓括號。2.5語句
語句是執行具體操作的指令,是由ObjectPascal的保留字、變數名、函數名及Delphi7.0編輯器可以識別的指令符號組成,建立正確的語句必須遵從ObjectPascal的語法規則。ObjectPascal程式語句書寫比較自由,可以把多個語句放在一個程式行中,也可把一個語句分多行書寫,但需要記住ObjectPascal的每個語句都必須以分號“;”結束。在編寫自己的ObjectPascal程式時,要注意程式的可讀性。Pascal語言是英式結構語言,在程式中選擇合適的縮排、大小寫風格,並在需要時將程式代碼分行,會使得程式代碼能夠很容易地被自己和他人讀懂。對於較為複雜的程式常用到複合語句,複合語句是指將多個語句用begin和end兩個保留字包圍起來,格式如下:begin<語句1>;…;<語句n>;end;複合語句在ObjectPascal中被視為一個語句,因此在end後必須加上分號“;”。2.5.1語句的書寫規則2.5.2語句格式中的符號約定
為了解釋語法規則,在說明各語句、函數的格式和功能時用到表2-13中所列符號,這些符號的含義詳見表2-13。符號含義<>必選參數表示符。尖括弧中的中文提示說明,由使用者根據問題的需要提供具體參數,如果缺少必選參數,語句則發生錯誤[]可選參數表示符。方括號中的中文提示說明,由使用者根據問題的需要決定是否選用該參數,如果省略則默認為缺省值|多中取一表示符。含義為“或者選擇”,豎線分隔多個選擇項,必須選擇其中一個選項。{}包含符號。其中包含多選一的各個選項,…同類項目的重複…省略了在當時敘述中不涉及的部分表2-13語句格式中的符號約定2.5.3賦值語句
在事件處理過程中,最常用到的工作就是把一個新值賦給一個屬性或變數。在設計用戶介面時,可以使用ObjectInspector(對象檢查器)來改變其屬性;但有時需要在程式執行時改變屬性的值,而且有些屬性只能在執行時改變,這些屬性在Delphi的線上幫助的Proprety主題中被標為執行期屬性。進行這種改變,就必須使用賦值語句。賦值語句是ObjectPascal程式中最常用的語句,其語法格式為:
{變數名|屬性名}:=<運算式>
注意“:=”是賦值號,不要寫為“=”。賦值語句的功能是先計算運算式的值,然後把結果賦給賦值號左邊的變數或屬性。賦值號為“:=”,不論給屬性還是給變數賦值,都是將右邊的值賦給左邊的屬性或變數。當將一個屬性值、變數、常量或文本數據賦給屬性或變數時,所賦值的類型和接受此值的屬性或變數的類型應相同或相容,否則會導致錯誤。3.1順序控制結構
順序控制結構是程式設計中最簡單、最常用的基本結構。在順序控制結構中,各程式段按照出現的先後順序依次執行。它是任何程式的基本結構。
程式流程控制語句是用來控制程式中各語句執行順序的語句,是程式中非常關鍵和基本的部分。程式流程控制語句可以把單個的語句組合成有意義的、能完成一定功能的小邏輯模組。1966年Bohm和Jacopini證明了任何複雜的演算法都可以用順序、選擇、迴圈三種結構組合而成,所以這三種結構稱為程式的三種基本控制結構。合理地使用流程控制語句在很大程度上影響了編寫程式的品質。在一段程式中,電腦按照語句順序執行,當遇到選擇結構、迴圈結構時,就有可能改變執行順序。3.1.1程式流程控制語句3.1.2順序控制結構(1)
順序控制結構是電腦按照語句的前後順序依次執行的程式結構。在順序控制結構中,程式依次地經過輸入、處理到最後的輸出。Delphi7.0提供了基本的輸入/輸出控件(在第7章中將給予介紹)。對於順序控制結構來說,組成程式體主要語句就是賦值語句。接下來通過一個實例來說明順序控制結構的程式設計方法。1.主要步驟
進入Delphi7.0後在standard標籤頁中找到相關組件,設計如圖3-1窗體及有關對象。
分別在窗體的建立、小寫按鈕單擊和大寫按鈕單擊事件中輸入如下代碼。
圖3-1大小寫轉換程式procedureTForm1.FormCreate(Sender:TObject); begin edit1.Text:='';//初始化文本框,使其為空
end; procedureTForm1.Button1Click(Sender:TObject); vars:string; begin s:=edit1.Text; edit1.Text:=lowercase(s);//轉換成小寫
end;【例3-1】大小寫轉換程式。3.1.2順序控制結構(2)procedureTForm1.Button2Click(Sender:TObject);vars:string;begins:=edit1.Text;edit1.Text:=uppercase(s);//轉換成大寫end;2.分析
在窗體的建立事件中,首先將文本框的內容進行清空(以便輸入)。在button1按鈕事件中有兩個語句,先將文本框的內容賦給一個字串變數s,然後通過一個lowercase函數將其轉換成小寫後再在文本框中顯示。而button2按鈕事件和button1基本類似,惟一不同的是將其轉換成大寫而已。可以看到,在每一個事件代碼中,其語句都是順序執行的。這就是這種結構的特點。3.運行結果
程式運行結果如圖3-2所示。(圖3-2大小寫轉換程式運行結果)3.2選擇控制結構
識別字是ObjectPascal語言中用來表示應用程式量的名稱。包括:變數(Var)、常量(Const)、類型(Type)、過程(Procedure)、方法(Method)等。
在日常生活和工作中,經常需要根據給定的條件進行分析、比較和判斷,以採取相應的操作。例如,有如下分段函數:
在計算函數值時,首先應根據x的值進行判斷,當x≥0時,y的值是x的平方;否則y的值是x的三次方。選擇控制結構是電腦用來描述自然界和社會生活中分支現象的重要手段。其特點是:根據所給定的條件為真與否,決定從各實際可能的不同分支中執行某一個分支的相應操作,並且任何情況下總有一種分支相對應。
ObjectPascal中的分支語句有If語句和Case語句。3.2.1If語句(1)
If語句又稱為條件語句,是最常用的單條件選擇結構。If語句的語法格式為:if<條件>then條件語句1語句2假真
[<語句1>][else
<語句2>=;條件語句一語句二真假
其中<條件>可以是關係表示式或布爾運算式,它的值是真(True)或假(False)。如果<條件>的值為真則執行<語句1>,否則執行<語句2>,If語句所對應的流程圖如圖3-3所示。圖3-3if語句
因為if…then…else語句是一個完整的語句,因此在else之前沒有分號,如果加入分號將產生編譯錯誤。<語句>可以是簡單語句也可以是複合語句還可以為空語句。當然,<語句1>、<語句2>同時為空語句時If語句就失去了意義。3.2.1If語句(2)If語句分為簡單條件語句和複合條件語句兩種。1.簡單條件語句簡單條件語句的<語句>中不包含其他的條件語句。【例3-2】輸入x計算y的值,其中:分析:這是一個分支函數,對應x的值不同,計算時使用的運算式不同,因此可以用條件語句實現對運算式的選擇。varx,y:double;beginifx>=1then y:=x*x+2*xelsey:=2*x+1;end;注意:if…then…else語句是一個完整的語句,因此在else之前沒有分號,如果加入分號則產生錯誤。3.2.1If語句(2)2.複合條件語句
如在If語句格式中的<語句1>或<語句2>本身又是一個If語句,則稱為If語句的嵌套。嵌套的If語句又被稱為複合條件語句。來看本教程P40頁的例子。由於If語句有兩種,一種是有else語句,一種無else語句。對複合條件語句有可能有二義性,即可能有兩種不同的理解,如下所示:if<條件1>thenif<條件2>then<語句1>else<語句2>一種理解是else語句是與後一個then語句配對,另一種理解是else語句是與前一個then語句配對,兩種理解的效果是不一樣的。ObjectPascal規定:else總是與同一層的前面最靠近它的、還沒有else語句與之配對的then配對。因此第一種理解是正確的,else語句是與後一個Then語句配對。3.2.2case語句
對於多分支選擇的情況,若仍然使用If語句就會出現多層嵌套,非常煩瑣。為此ObjectPascal專門提供了Case語句來實現多分支選擇結構。Case語句可以根據“選擇器運算式”的值來決定執行相應的選擇語句。case<選擇器運算式>of
<情況常量表1>:<語句1>
…
<情況常量表n>:<語句n>
[else
<其他語句列>;]end;<情況常量表>中的值應當是<選擇器運算式>可能具有的值,各常量之間用逗號分隔。所有常量表中的值必須互不相同。<語句>可以是簡單語句也可以是複合語句。Case語
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务项目合作分成协议书
- 奶茶品牌授权转让协议书
- 民爆企业安全管理协议书
- 二手叉车机器买卖协议书
- 小米鸡排加盟意向协议书
- 建立家庭联名账户协议书
- 店面租赁合同转让协议书
- 工会经费代扣代缴协议书
- 广东社会医疗保险协议书
- 亳州锅炉拆除回收协议书
- 高血压心脏病超声
- 中南林业科技大学《Python程序设计实验》2021-2022学年期末试卷
- 记背手册04:《乡土中国》核心知识背诵清单高考语文一轮复习考点帮(天津专用)
- 麻醉科与患者安全沟通制度
- 2024年六年级道德与法治下册 第三单元 多样文明 多彩生活 7 多元文化 多样魅力教案 新人教版
- 污水处理ao工艺
- 2024年重庆市中考数学试题B卷含答案
- 安徽理工大学《高等安全工程》2023-2024学年第一学期期末试卷
- 林业工程整改方案
- 2024年7月1日实施新版医疗器械采购、收货、验收、贮存、销售、出库、运输和售后服务工作程序
- 2024纸箱厂规章制度
评论
0/150
提交评论