《Pascal語言基礎》PPT課件.ppt
《《Pascal語言基礎》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《Pascal語言基礎》PPT課件.ppt(87頁珍藏版)》請在裝配圖網上搜索。
1、第2章 Pascal語言基礎,Pascal語言體現(xiàn)了結構化程序設計的概念。它簡便易學,具有清晰明了的模塊結構,豐富的數據類型和語句。Pascal語言編譯、運行效率高,便于移植,因此廣泛地應用于應用軟件的開發(fā)。 2.1 數據類型 2.2 常量與變量 2.3 運算符和表達式 2.4 基本程序設計 2.5 過程與函數 2.6 常用內部函數,2.1 數據類型,Object Pascal的數據類型包括一些標準的數據類型,例如:整型、實型、字符型、字符串型和布爾型等等。除此之外,系統(tǒng)還允許用戶自己定義一些較為復雜的數據類型,例如:子界類型、枚舉類型、指針類型、記錄類型以及文件類型等等。 2.1.1 標準數
2、據類型 2.1.2 子界類型 2.1.3 枚舉類型 2.1.4 集合類型 2.1.5 指針類型 2.1.6 數組類型 2.1.7 記錄類型 2.1.8 文件類型,2.1.1 標準數據類型,Object Pascal的數據類型包括一些基本的簡單數據類型,例如:整型、實型、字符型、字符串型和布爾型等等。下表列出了標準的數據類型。 數據類型表,如圖所示:,2.1.1 標準數據類型,2.1.2 子界類型,子界類型是Pascal允許用戶定義的一個結構數據類型。如果用戶預先知道一個變量的范圍,就可以通過定義子界類型和子界類型變量來實現(xiàn)由系統(tǒng)自動檢查變量是否超出了允許的范圍。 子界類型的定義: Type 類
3、型名稱=常量1..常量2; 例如以下代碼: type TMonth=1..12; TScore=A..F;,2.1.2 子界類型,var Month:TMonth; Score:TScore; 如上定義了子界類型變量Month的范圍從112,Score的范圍從AF。,2.1.3 枚舉類型,枚舉類型的定義: Type 類型名稱=(標識符1),標識符2,,標識符n); 用戶經常要用到這樣的數據,它是通過列舉出該數據所有的可能值來定義的,如下例: type TWeekDay=(Sun, Mon, Tue, Wed, Thu, Fri, Sat); var WeekDay:TweekDay; 需要注意
4、的是,每個枚舉值只能出現(xiàn)在一個枚舉類型的定義當中,而且在每個枚舉類型的定義當中只能出現(xiàn)一次。,2.1.4 集合類型,集合類型是Pascal允許用戶定義的一個結構數據類型,它使用戶可以運用通常集合運算,例如:交集、并集和差集。集合類型是一些同類型元素的集合,這些基類型元素可以是整型、實型、布爾型、字符型、枚舉型或子界類型。它通常的作用是用來檢驗某個元素是否被包含在一個集合當中。 下例用來說明集合類型數據的定義方法和運用: type TWeekDay=Set of 1..7; var WeekDay:TWeekDay;,2.1.4 集合類型,begin WeekDay:=1,3,5,6; end;
5、 注意Pascal編輯程序限制了集合數目,所以整型數據不能作為集合類型的基類型。而只能是整型子界?;愋捅仨毷怯行蝾愋?,所以實型、數組類型不能作為集合類型的基類型。,2.1.5 指針類型,Pascal允許建立動態(tài)數據結構,它采用指針類型數據,指針類型變量的引入大大增強了程序的靈活性。一個指針類型變量用于保存一個內存地址,由于該內存地址指向的是一個動態(tài)分配的變量,所以,在定義指針類型數據時,必須說明它所指向變量的類型。 例如: Type Pbirthday=TBirthday; TBirthday=Record Name:String30; Year:Integer;,2.1.5 指針類型
6、,Month:1..12; Date:1..31; end; var Pbirthday1:Pbirthday; Pint:Integer; begin Pbirthday1.Name:=Smith; Pint:=18; end;,2.1.6 數組類型,數組類型數據是一種用戶定義的結構數據類型,它是一些具有相同數據類型的元素的集合。根據數組的維數可以將數組分為一維數組、二維數組以及多維數組,每一維度的下標指明了元素的數目。其下標類型包括了除長整型以外的所有有序類型以及長整型的子界類型。 例如: type TOneArray=Array3..39 of Integer; TdoubleArra
7、y=Array125,1..50 of Real; Var OneArray:TOneArray; doubleArray:TdoubleArray;,2.1.7 記錄類型,記錄類型包括了一組元素,但和數組型數據不同的是,記錄類型數據可以包括相同的數據類型,也可以包括不同的數據類型;這些數據可以是數值型的,也可以是非數值型的。例如:用戶可以使用一個記錄類型數據記錄一個學生的名字、出生日期、籍貫以及學習成績等。 例如,一個學生的記錄類型如下: type TStudent=Record Name:String30; Age:Integer; StudNum:Integer; Score:r
8、eal; end;,2.1.7 記錄類型,var Student1:TStudent; begin Student1.Name:=Smith; Student1.Age:=20; Student1.StudNum:=950007; Student1.Score:=87.5; end;,2.1.8 文件類型,文件類型是用來對文件進行操作的,它包括同一類元素的線性有序組合。Delphi支持的文件類型有文本文件、記錄文件和無類型文件。定義文件類型實際上是定義了一個文件類型的指針。 例如: type TStudent=Record Name:String30; Age:Integer; Stud
9、Num:Integer; Score:real; end;,2.1.8 文件類型,Fstudent=File of Tstudent; Fstr=File of String; var Student1:FStudent; Str:Fstr; begin Student1.Name:=Smith; Student1.Age:=20; Student1.StudNum:=950007; Student1.Score:=87.5; Str=I love Delphi 7.0. end;,2.2 常量與變量,常量和變量是學習各種編程語言進行程序設計的基礎概念,分別代表了在程序運行過程中兩種不同狀態(tài)
10、的量。常量是指在程序運行過程中其值始終不變的量;與之相反,變量則是程序運行過程中其值可以改變的量。 2.2.1 常量 2.2.2 變量,2.2.1 常量,在Pascal中用const關鍵字來聲明常量,就像在C語言中const關鍵字一樣,C語言跟Object Pascal語言聲明常量的主要差別是,在Object Pascal語言中不需要在對常量賦值時聲明常量的類型,跟Visual Basic一樣,編譯器能根據常量的值自動判斷常量的類型并分配內存;對于整型常量,編譯器在運行時跟蹤它的值,并不對它分配內存。 例如: const ADecimalNumber=3.14; i=10; ErrorStri
11、ng=danger,Danger,Danger!;,2.2.1 常量,編譯器根據如下規(guī)則來對常量分配內存:整型數被認為是最小的Integer類型(10被認為是ShortInt,32000被認為是SmallInt等);字符串值被認為是char類型或string類型(通過$H定義);浮點值被認為是extended數據類型,除非小數點位數小于4位(這種情況被當作comp類型);Integer和Char的集合類型被存儲為它們自己。,2.2.2 變量,Object Pascal要求在一個過程、函數或程序前在變量聲明段中聲明它們。Object Pascal類似Visual Basic,但不像C和C++,是
12、大小寫不敏感的。采用大小寫只是為了可讀性好。 當在Object Pascal中聲明一個變量時,變量名在類型的前面,中間用冒號隔開,變量初始化通常要跟變量聲明分開。 Delphi能在var塊中對全局變量賦初值,這里有一些例子演示: var i:Integer=10;,2.2.2 變量,S:String=Hello World; D:Double=3.141579; 能賦初值的變量僅是全局變量,不是那些在過程或函數中局部變量,而且Delphi編譯器自動對全局變量賦初值。當程序開始時,所有的整型數賦為0,浮點數賦為0.0,指針為null,字符串為空等等,因此,在源代碼中不必對全局變量賦零初值。,2.
13、3 運算符和表達式,運算符是在代碼中對各種數據類型進行運算的符號。例如,有能進行加、減、乘、除的運算符,有能訪問一個數組的某個單元地址的運算符。表達式由運算對象和運算符兩部分組成。 2.3.1 運算符 2.3.2 表達式,2.3.1 運算符,Object Pa s c a l語言中的運算符(Operators)有: 、not、、*、/、div、mod、and、shl、shr、as、+、、or、xor、=、、、=、in和is等。 按照操作數數目的多少來分,運算符分為下面兩類:單目運算符(Unary Operator)和雙目運算符(Binary Operator)。上面的、not和為單目運算符,
14、其余的為雙目運算符。其中+和-也可以作為單目運算符來使用。 單目運算符一般放在操作對象的前面,只有可以放在操作對象的后面。雙目運算符都放在兩個操作數之間。,2.3.1 運算符,有些運算符是根據給定的操作數的數據類型做相應處理的。例如,運算符not對于整型的操作數說,做的是按位取反;對于邏輯類型的操作數來說,它完成的則是邏輯取反。 除了運算符、is和in外,其余操作符都可以對Variant類型的數據進行操作。 1. 算術運算符 2. 邏輯運算符 3. 位運算符 4. 字符串運算符 5. 指針運算符 6. 類運算符 7. 運算符 8. 集合運算符 9. 關系運算符,2.3.1 運算符,1. 算術運
15、算符 算術運算符對浮點數和整數進行加、減、乘、除和取模運算。 。,2.3.1 運算符,2. 邏輯運算符 Pascal語言用and和or作為邏輯與和邏輯或運算符,Pascal的邏輯非的運算符是not,它是用來對一個布爾表達式取反。 邏輯運算符對邏輯類型的操作數進行運算,數據結果也為邏輯類型,2.3.1 運算符,3. 位運算符 位運算符對整型的數據進行按位操作,所得結果也為整型數據,如表所示。,2.3.1 運算符,4. 字符串運算符 加號(+)還可以作為字符串運算符,它可以將兩個字符串聯(lián)接在一起。如果兩個字符串都是短字符串,那么在結果字符串長度超過255個字符的情況下,只有前面255個字符有
16、效。,2.3.1 運算符,5. 指針運算符 表中的運算符可以對指針類型的數據進行操作。,2.3.1 運算符,6. 類運算符 類運算符as和is對類或類的實例進行操作。此外,關系運算符=和也可以對類進行操作。 7. 運算符 運算符返回一個變量、過程或函數的地址。,2.3.1 運算符,8. 集合運算符 集合運算符主要對兩個集合進行操作,判斷兩個集合之間的關系,如表所示。,2.3.1 運算符,9. 關系運算符 關系運算符可以對兩個普通數據類型、類、對象、接口類型或字符串類型的數據進行比較,結果數據類型為布爾類型,如表2-7所示。,2.3.2 表達式,一個表達式由運算對象和運算符兩部分組成。
17、運算符可以分為算術運算符、邏輯運算符、串運算符、字符指針運算符、集合運算符、關系運算符以及運算符。 運算符的優(yōu)先順序如表所示。,,運算符優(yōu)先順序類別1域、指針引用 not2取非* / div mod shl shr and as3乘除法與類型轉換 - or xor4加減法= = in is5比較操作 Pascal用and和or作為邏輯與和邏輯或運算符,而C語言使用,2.4 基本程序設計,基本程序設計主要包括:程序語句、基本控件、順序結構、選擇結構、循環(huán)結構。 2.4.1 程序語句 2.4.2 基本控件 2.4.3 順序結構 2.4.4 選擇結構 2.4.5 循環(huán)結構,2.4.1 程序語句,1
18、. 賦值語句 實現(xiàn)功能:為變量賦值。 語法形式::=; 實際舉例:x:=y*z; b:=(x=1) or (y=4) and (z0); t:=sqrt(m)+4*sin(x); 2. GOTO語句 實現(xiàn)功能:改變程序流程至標號語句處。 語法形式:goto標號; 實際舉例:goto 100;,2.4.1 程序語句,3. IF語句 實現(xiàn)功能:作條件判斷控制流程。 (1) 單分支語句 語法形式: if 布爾型表達式 then 語句; 實際舉例: if x<=100 then y:=x; y:=100; begin 語句組 end;,2.4.1 程序語句,(2) 雙分支語句 語法形式: if 布爾型
19、表達式 then begin 語句組 end else,2.4.1 程序語句,(3) 多層嵌套語句 語法形式: if then begin end else if then begin end;, else begin end;,2.4.1 程序語句,4. CASE語句 多層嵌套的條件語句可讀性差,實際編程中常采用case語句。 實現(xiàn)功能:實現(xiàn)多條件選擇。 語法形式: Case of 數值1: begin end; 數值2:,2.4.1 程序語句,begin end; 5. REPEAT語句 實現(xiàn)功能:循環(huán)。 語法形式: repeat ; until ;,2.4.1 程序語句,6. WHILE
20、語句 實現(xiàn)功能:循環(huán)。 語法形式: while do begin end; end; 7. FOR語句 實現(xiàn)功能:循環(huán)。,2.4.1 程序語句,語法形式: for = to do begin end; 8. WITH語句 實現(xiàn)功能:引用一個域或方法。 語法形式: with do begin ,2.4.2 基本控件,組件是可視化編程的基礎,開發(fā)人員用它們來設計用戶界面以及提供給應用程序的一些非可視化性能。對于應用程序開發(fā)者來說,組件就是他們從組件面板上取得的并放到窗口上的某種事物。在這里,用戶可以通過修改組件屬性、建立事件處理過程來決定組件的外觀或作用。從組件編寫者的角度看,組件就是Object
21、 Pascal語言中的對象。這些對象可以封裝系統(tǒng)提供的行為元素(如標準的Windows 95/98控件)。其他對象能夠完全引入新的可視化或非可視化組件,這種情況下,一個組件的代碼構成了該組件的全部行為。 Delphi中有四種基本的組件類型供用戶使用或創(chuàng)建:標準控件、自定義控件、圖形控件和非可視組件。,2.4.2 基本控件,在這里應注意組件(component)和控件(control)兩個術語的交換使用,二者并不完全相同??丶强梢暤挠脩艚缑嬖?。在Delphi中,控件總是組件,因為它們都是從TComponent類派生而來的。組件是一種對象,它可以出現(xiàn)在組件面板上,也可以被放到窗口設計器上。組件
22、是TComponent類型,它不一定是控件,也就是說,它不一定是可視的用戶界面元素。,【例2-1】,設計步驟: 建立應用程序的用戶界面:選擇“新建”工程,進入窗體設計器,增加四個標簽Label1Label4,四個編輯框Edit1Edit4和一個按鈕Button1,如圖2-1所示。 設置對象屬性:如表所示。,輸入長方體的長和寬,然后計算并輸出長方體的周長和面積。 分析:設長方體的長和寬分別為a和b,長方體的周長和面積分別為c和s,結合題義可求出計算公式:c=2(a+b),s=ab。,【例2-1】, 編寫事件代碼。 Procedure Tform1.Button1Click(Sender:TObj
23、ect); var a,b,c,s:Real; begin a:=strtofloat(edit1.text); b:=strtofloat(edit2.text); c:=2*(a+b); s:=a*b; edit3.text:=floattostr(c); edit4.text:=floattostr(s); end;,2.4.3 順序結構,順序結構是程序中最簡單、最常見的基本結構。在該結構中,各操作模塊(對應于程序中的“程序段”)按照出現(xiàn)的先后順序依次執(zhí)行,它是任何程序的主體基本結構,即使在選擇結構或者更為復雜的循環(huán)結構中,也常以順序結構作為其子結構。 在順序結構中,通常使用基本控件完成
24、輸入及輸出操作,使用賦值語句等簡單的操作語句組成順序結構即可實現(xiàn)順序結構程序的編寫。,2.4.4 選擇結構,選擇結構是計算機科學用來描述自然界和社會生活中分支現(xiàn)象的重要手段。其特點是:根據所給定的條件成立(真)或否(假),而決定從實際可能的不同分支中執(zhí)行某一分支的相應操作。 在Delphi中,實現(xiàn)選擇結構的語句是If語句和Case語句,這兩種語句又稱為條件語句,條件語句的功能就是根據表達式的值有選擇地執(zhí)行一組語句。,2.4.4 選擇結構,1. If語句 在執(zhí)行一段代碼以前,If語句能讓用戶判斷某個條件是否滿足。 注意如果在一條if語句中有多個條件,用戶需要用括號把這幾個條件分別用括號括起來。
25、在Pascal中的begin和end,就像是C和C++中的“”和“”,例如,下面的代碼是當一個條件滿足時要執(zhí)行多條語句: if x=6 then begin DoSomething; DoSomethingElse; DoAnotherThing; end;,2.4.4 選擇結構,用if...else能組合多個條件: if x=100 then SomeFunction else if x=200 then SomeOtherFunction else begin SomethingElse; Entirely end;,2.4.4 選擇結構,2. case語句 在Pascal中的case語句
26、就像是C和C + +中的switch語句。case語句用來在多個可能的情況中選擇一個條件,而不再需要用一大堆if...else if...else if結構,下面的代碼是Pascal的case語句:,2.4.4 選擇結構,case SomeIntegerVariable of 101: DoSomething; 202: begin DoSomething; DoSomethingElse; end; 303: DoAnotherthing; else DoTheDefault; end; 注意case語句的選擇因子必須是有序類型,而不能用非有序的類型如字符串作為選擇
27、因子。,2.4.5 循環(huán)結構,循環(huán)是一種能重復執(zhí)行某一動作的語言結構,Pascal中的循環(huán)結構和其他語言中的循環(huán)結構相類似,下面列出了在Pascal中要用到的各種循環(huán)結構。 1. for循環(huán) for循環(huán)適合用在事先知道循環(huán)次數的情況下,下面的代碼在一個循環(huán)中把控制變量加到另一個變量中,共重復10次: var i,x:Integer; begin x:=0; for i:=1 to 10 do inc(x,i); end;,2.4.5 循環(huán)結構,2. while循環(huán) while循環(huán)結構用在先判斷某些條件是否為真,然后重復執(zhí)行某一段代碼的情況下。while的條件是在循環(huán)體執(zhí)行前進行判斷的。用wh
28、ile循環(huán)的典型例子是當文件沒有到達文件結尾時,對文件進行某一重復操作。下面的例子演示了每次從文件中讀一行并寫到屏幕上: Program FileIt; $APPTYPE CONSOLE var f:=TextFile; S:=String;,2.4.5 循環(huán)結構,begin AssignFile(f,foo.txt); Reset(f); while not EOF(f) do begin readln(f,S); writeln(S); end; CloseFile(f); end. Pascal中的while循環(huán)基本上跟C中的while循環(huán)和Visual Basic中Do While循環(huán)
29、一樣。,2.4.5 循環(huán)結構,3. repeat...until repeaat...until循環(huán)與while循環(huán)相似,但考慮問題的角度不同,它在某個條件為真前一直執(zhí)行給定的代碼。因為條件測試在循環(huán)的結尾,所以循環(huán)體至少要執(zhí)行一遍。Pascal的repeat...until語句大致上同于C語言中的do...while語句。,2.4.5 循環(huán)結構,例如,下面的代碼不斷地把一個計數器加1,直到它大于100為止: var x:Integer; begin x:=1; repeat inc(x); until x100; end;,2.4.5 循環(huán)結構,4. Break()過程 在while、fo
30、r或repeat循環(huán)中調用Break(),使得程序的執(zhí)行流程立即跳到循環(huán)的結尾,在循環(huán)中當某種條件滿足時需要立即跳出循環(huán),這時調用Break()。Pascal中的Break()類似于C語言中的break和Visual Basic中的Exit語句。下面的代碼演示了在5次循環(huán)后跳出循環(huán)。 var i:Integer; begin for i:=1to 100000 do begin MessageBeep(0); if i=5 then break; end; end;,2.4.5 循環(huán)結構,5. Continue()過程 如果想跳過循環(huán)中部分代碼重新開始下一次循環(huán),就調用Continue()
31、過程。注意下面的例子在執(zhí)行第一次循環(huán)時continue()后的代碼不執(zhí)行: var i:Integer; begin for i:=1 to 3 do begin writeln(i,.Before Continue); if i=1 then continue; writeln(i,.After continue); end; end;,2.5 過程與函數,過程與函數是實現(xiàn)一定功能的語句塊,可以在程序的其他地方被調用,也可以進行遞歸調用。 過程與函數的區(qū)別在于:過程沒有返回值,而函數有返回值。 2.5.1 過程 2.5.2 函數 2.5.3 參數 2.5.4 子程序的嵌套與遞歸 2.5
32、.5 變量的作用域 2.5.6 Delphi的程序結構,2.5.1 過程,過程的定義包括過程原型、過程體的定義。 過程定義的形式如下: procedure procedureName(parameterList);directives; local Declarations; begin statements end;,2.5.1 過程,其中procedureName是過程名,為一個有效的標識符。 parameterList為參數列表,需要指明參數的個數及其數據類型。 directives是一些關于函數的指令字,可以一次設置多個,使用分號隔開。localDeclarations中定義了該函數中
33、需要使用的一些臨時變量,通常也叫做本地變量。 在begin與end之間是在函數調用時實現(xiàn)特定功能的一系列語句。 上面的parameterList、directives、localDeclarations和statements等為可選部分。,2.5.1 過程,procedure NumString(N: Integer; var S: string); var V: Integer; begin V := Abs(N); S := ; repeat S := Chr(V mod 10 + Ord(0)) + S; V := V div 10; until V = 0; if N < 0 th
34、en S := - + S; end;,2.5.2 函數,函數的定義與過程非常類似,只是使用的保留字不同,而且多了一個返回值類型。 具體形式如下: function functionName(parameterList):returnType;directives; localDeclarations; begin statements end;,2.5.2 函數,可以將函數要返回的數值賦值給Result。 如果函數體中存在著一些由于判斷而產生的分支語句時,要在每一個分支中設置返回值。通常要根據函數的返回值來確定下一步的操作。,2.5.2 函數,function Power(X: Real;
35、Y: Integer): Real; var I: Integer; begin Result := 1.0; I := Y; while I 0 do begin if Odd(I) then Result := Result * X; I := I div 2; X := Sqr(X); end; end;,2.5.3 參數,一般將函數定義時參數列表中的參數稱為形參,將函數調用時參數列表中的參數稱為實參。在函數原型中,多個參數之間用分號隔開,同一類型的參數可以放在一起,以逗號隔開。在函數調用的時候,在函數原型中,多個參數之間用逗號隔開。 一般來說,形參列表和實參列表完全匹配是指參數
36、的個數一樣,而且順序排列的數據類型也完全一致。對于普通的函數,如果編譯器發(fā)現(xiàn)實參的數據類型與形參的數據類型不匹配,會將實參的數據類型進行一次或多次的“提升”,比如:將Integer類型轉換為Double類型。,2.5.3 參數,可以為過程和函數的參數指定默認數值。具體方法是在參數定義后面緊接著一個等號“=”,然后是一個常量。指定默認數值的參數要放在參數列表的后部,將沒有指定默認數值的參數放在參數列表的前面部分。在函數調用的時候,可以為設置了默認值的參數指定一個新值,在函數體中,各語句使用的是指定的新值;如果沒有指定新值,則使用默認值。同樣,如果存在多個設置了默認值的參數,只有前面的參數指定了新
37、值,后面的參數才可以指定新值。,【例2-2】,program Project1; $APPTYPE CONSOLE uses Sysutils; // 為了使用函數Format //以一定精度顯示一個浮點數 function ShowNum(Num:Double;Precision:Integer=4):Boolean; var MesStr:string; // 浮點數顯示輸出的內容 begin if Precision<=-1 then // 小數點后的位數要大于或等于零 begin Result:=False; Exit; // 退出顯示函數 end else begin,定義一個函數S
38、howNum,可以將一個浮點數按指定的精度輸出在屏幕上。,【例2-2】,// 設置顯示的格式 MesStr:=Format(%*.*f,10,Precision,Num); Result:=True; end; Writeln(MesStr); // 顯示數據 end; begin ShowNum(123.456789); // Precision默認為4 ShowNum(123,5); // 參數對數據類型進行升級 // 下面一句代碼不正確,故屏蔽掉 // ShowNum(123.456789,9.13);// 參數對數據類型不能降級 ShowNum(22 div 7,5);// 調用函數
39、// 可以根據函數的返回值確定下一步的操作 if ShowNum(123.456789,-3)=False then Writeln(數據格式設置錯誤,輸出失敗。); Writeln(按下回車鍵退出。); Readln; end.,【例2-2】,運行結果如下: 123.4568 123.00000 3.14286 數據格式設置錯誤,輸出失敗。 按Enter鍵退出。 說明: 為了使用函數Format,需要在uses語句中將Sysutils單元包含進去。,【例2-2】, 由于小數點后的位數不可以設置為負數,所以當出現(xiàn)負數的時候,ShowNum函數返回False,并調用Exit函數立刻退出ShowN
40、um函數。 在語句ShowNum(123,5);中,首先將整型常數123轉換為浮點型常數,然后進行參數傳遞。 在語句ShowNum(22 div 7,5);中,22 div 7的結果為3,然后再轉換為浮點型常數進行參數傳遞。,2.5.4 子程序的嵌套與遞歸,在一個子程序(過程或函數)中包含另外一個子程序(過程或函數)的調用,稱為子程序的嵌套。 子程序的遞歸調用是指一個過程直接或間接調用自己本身,子程序直接調用自身稱為直接遞歸,子程序間接調用自己稱為間接遞歸。在遞歸調用中,一個過程執(zhí)行的某一步要用到它自身的上一步(或上幾步)的結果。,2.5.4 子程序的嵌套與遞歸,遞歸調用在處理階乘運算、級數運
41、算、冪指數運算等方面特別有效。 遞歸函數論是現(xiàn)代數學的一個重要分支,數學上常常采用遞歸的辦法來定義一些概念。例如,自然數n的階乘可以遞歸定義為: 遞歸在算法描述中有著重要的地位,很多看似非常復雜的問題,但使用遞歸后可以很輕松地解決。在間接遞歸調用中,子程序必須超前引用,即在子程序的首部后面加上保留字forward。,n!=,【例2-4】,編寫程序打印菲波拉西(Fibonacci)數列。 菲波拉西數列排列如下: 1 1 2 3 5 8 13 21 34 55 分析:形成此數列的規(guī)律是,它的頭兩個數為1,從第三個數開始其值是它前面的兩個數之和。即: 。,fibo=,【例2-4】,這里只寫出了菲波
42、拉西函數的代碼,事件代碼用戶可自己設計。 Function fact(n:Real):Real; begin if n=1 Or n=2 Then fibo:=1; else fibo:=fibo(n-1)+fibo(n-2); end; 利用遞歸算法能簡單有效地解決一些特殊問題,但是由于遞歸調用過程比較繁瑣,所以執(zhí)行效率很低,在選擇遞歸時要慎重,2.5.5 變量的作用域,作用域是指一個過程、函數和變量能被編譯器識別的范圍,例如,一個全局常量的作用域是整個程序,而一些過程中的局部變量的作用域是那些過程。,【例2-5】作用域的演示的示例 Program Foo; $APPTYPE CONSO
43、LE const SomeConstant=100; var SomeGlobal:Integer; R:Real;,2.5.5 變量的作用域,procedure SomeProc(var R:Real); var LocalReal:Real; begin LocalReal:=10.0; R:=R-LocalReal; end; begin SomeGlobal:= SomeConstant; R:=4.593; SomeProc(R); end;,2.5.5 變量的作用域,SomeConstant、SomeGlobal和R是全局變量,它們在程序的任何地方都能被編譯器所識別。過程SomeP
44、roc()有兩個變量R和LocalReal,它們的作用域是這個過程。如果試圖在SomeProc()過程外訪問LocalReal,編譯器將顯示有未知識別符的錯誤。如果在SomeProc()中訪問R,用的是局部變量的R,如果在這個過程外用R,則用的是全局變量的R。,2.5.6 Delphi的程序結構,一個Delphi應用程序對應一個工程,從程序結構的角度來看,它由一個主程序與若干個單元組成,而程序段則是構成主程序和單元的基本結構要素。 1. 主程序 Delphi工程文件中的代碼即為Delphi應用程序的主程序。主程序的結構為: program工程文件名; uses語句 $R*.RES 執(zhí)行部分,2
45、.5.6 Delphi的程序結構,Delphi中主程序一般很短,這是因為程序的幾乎所有功能在uses語句所引用的單元中。使用Delphi編程時,主程序由程序由系統(tǒng)自動生成,無需程序員編寫主程序的代碼,程序員所編寫的只是程序所引用的單元文件中的代碼。,2.5.6 Delphi的程序結構,2. 單元與作用域 Delphi編程強調單元或模塊的使用。在引入類之前,單元是模塊化編程的基礎,而類也是建立在單元概念基礎上的。在Dilphi的應用程序中,單元文件可以用來定義一個窗體,也可以用來定義程序中所使用的子程序、全程變量和常量等。 當創(chuàng)建工程時,或是向工程中添加一個新窗體時,Delphi都將自動添加一個
46、新的單元文件,該單元為新窗體定義類與對象。使用菜單命令:“File”中的“New”命令,在“New”選項卡中選擇“Unit”圖標,就能在當前工程中添加一個與窗體無關的獨立單元。,2.5.6 Delphi的程序結構,(1) 單元的結構 單元文件的結構如下所示: unit 單元名 // 單元首部 interface // 接口部分 implementation // 實現(xiàn)部分 end // 單元結束,2.5.6 Delphi的程序結構,(2) 作用域 在單元的接口部分聲明的標識符(類型、常量、變量、函數和過程等)在整個單元內(自聲明處起至單元結束)有效。其他單元(客戶單元
47、)引用該單元時,則在客戶單元內有效。 在實現(xiàn)部分隱含聲明的標識符,不能在單元外使用,即它們在客戶單元中不可見。這些標識符在本單元的實現(xiàn)部分自聲明處起至實現(xiàn)部分結束的任何程序段中有效。 在實現(xiàn)部分的任何子程序段中聲明的標識,則遵循程序段中標識符的作用域規(guī)則。,2.5.6 Delphi的程序結構,3. 程序段與作用域 一個程序段是由聲明部分和語句部分構成的結構,其一般結構為: 聲明部分 begin 語句 End 其中聲明部分用來聲明類型、常量、變量、函數和過程等,語句則是程序段的執(zhí)行部分,可以是簡單語句、復合語句或簡單語句與復合語句的任意組合。在聲明部分聲明的標識符(類型、常量、變量、函數和過程)
48、其作用范圍僅限于該程序段內。 函數體和過程體就是典型的程序段。,2.6 常用內部函數,為了盡可能地減少開發(fā)應用程序的難度和工作量,Delphi提供了一個內容十分豐富的程序庫Run-Time Library(RTL),其中包括了大量的基本函數、過程、常量和變量定義。RTL包含的函數、過程、常量等都是在System單元中定義的,而System單元會自動地被其他程序單元引用,所以用戶編寫的應用程序可以隨時調用RTL中可用的函數,而不用在程序的uses語句中引用該單元。 2.6.1 數學運算函數 2.6.2 字符處理函數 2.6.3 時間和日期函數 2.6.4 數據類型轉換函數 2.6.5 格式輸出函數,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。