




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第2章 Object Pascal語言基礎在Delphi開發環境中,采用面向對象的Pascal語言(Object Pascal)。該語言源于Pascal語言。其結構清晰,語句靈活,便于移植,廣泛應用于多種軟件開發工具中。此外,Object Pascal語言支持面向對象技術,是一種功能完善的程序設計語言。2.1 Object Pascal的符號集符號是Object Pascal語言的基本單位。每一個符號都是由一個或多個字符構成,常見的符號種類有:標識符、運算符、標點符號和數字符號等。2.1.1 標識符1.構成與功能:標識符的主要作用是標識程序中使用到的常量、變量、函數、過程和類型的名稱,由英文字
2、母、數字和下劃線組成。2. 構成標識符原則:標識符全長不超過255個字符。標識符由字母或下劃線起始。標識符對大小寫不敏感。標識符中不允許出現空格。標識符不得與系統保留字或指令字重名。標識符不得與系統函數重名。2.1.2 關鍵字與指令字1. 定義:系統定義的具有特殊含義與用途的標識符稱為關鍵字或指令字。2.聯系:都是系統定義的標識符。3.區別:關鍵字又稱保留字,用戶在程序設計過程中聲明標識符時一定不得與關鍵字重名;指令字用于程序中的特殊位置,只在自身定義的程序段范圍內有效,在程序的其他范圍內,用戶可以聲明與指令字同名的標識符。4.建議:聲明用戶標識符時,即不要與系統關鍵字重名,也不要與指令字重名
3、。關鍵字關鍵字說明關鍵字關鍵字說明absolute定義變量,其起始地址與另一變量相同abstract創建抽象方法as將一個對象轉換為另一個對象asm插入匯編語言cdecl定義調用C編寫DLL中函數的規則class定義類constructor聲明構造函數contains指定包(packet)中間包含文件destructor聲明析構函數dynamic聲明動態方法except用于異常處理export該函數可以被輸出供其他用戶調用exports用以輸出對象,可輸出多項external外部引用far標識制定函數可以遠程調用finalization標識單元釋放時要調用的方法finally異常處理時最后調用
4、的方法implementation標識單元實現部分inherited調用父類方法initialization單元初始化是調用方法is用于對象判斷name定義方法別名near指定函數可以本地調用nodefault不允許存在默認值object聲明對象pascal函數調用協議program指出工程為應用程序raise拋出異常register調用函數時在注冊表中記錄reintroduce重新發布threadvar定義隨線程啟動變量try標識異常處理開始5.常見關鍵字表2.1.3 注釋1.目的:提高程序的可讀性和可維護性。2.方法:花括號注釋 圓括號與星號注釋(* *)雙斜杠注釋/3.注意:不得使用嵌套
5、注釋2.2 常量與變量用戶程序在運行時將處理大量數據,有的數據在程序運行的整個過程都是不變的,稱為常量;而有的數據在程序運行過程中,取值會發生變化,稱為變量。2.2.1 常量由于在程序運行始終,常量值是不發生變化的,因此,常量在聲明同時就要賦值。1.常量聲明const(常量標識符號)=(常量值);2.聲明一個常量:constpi=3.1415926;3.聲明多個常量:conste=2.71828;nation=中華人民共和國; /Delphi中用單引號表標識字符串2.2.2 變量變量在使用之前,必須先聲明,在聲明時要指定變量類型,只有聲明后變量才能使用。1.聲明變量var(變量聲明1);(變量
6、聲明2); (變量聲明n);變量聲明包括兩個部分:變量名稱和變量類型。中間用分冒號開,變量聲明結束后用分號標識。 var /標識以下為變量聲明x,y:Single; /聲明兩個變量x與y,它們都是實數類型str1:String; /聲明一個名稱為str1的字符串類型變量2.變量初值:變量聲明后,系統即在存儲空間中劃分出適當的區域來保存該變量的取值。此時,存儲空間中的值是隨機的。為了提高程序的健壯性,在聲明變量后Object Pascal編譯器會自動為變量賦初值:整型變量聲明后自動賦值為0,實型變量賦值為0.0,指針型變量賦值為null;字符串變量賦值為空。2.3 數據類型數據類型是數據的重要特
7、征,用以決定數據的形式、取值范圍和相應操作。Object Pascal中數據類型可以分為簡單數據類型,用戶構造數據類型和指針數據類型3種。2.3.1 簡單數據類型簡單數據類型包括標準類型與用戶自定義類型兩種。標準類型由系統定義,包括實型、整型、字符型和布爾型;用戶定義類型包括枚舉型和子界型。所有的標準類型都是有序的,而除了實型以外,其他標準數據類型都是順序的,即不但有順序,還有順序編號。1.實數(浮點數)類型名稱字長取值范圍單精度Single32位1.510-453.4103848位實數Real4848位2.910-391.71038雙精度Double64位5.010-3241.7103086
8、4位浮點Comp64位-263+1263-1拓展浮點數Extend80位3.610-49511.1104932貨幣類型Currency64位-922337203685477.5808 922337203685477.5807Object Pascal的實型數據1)實數特點:實型數據字長越長,數據精度越高。2)特殊實數:Currency:專為財務貨幣處理設計,該類型規定數據必須有4位小數,當Currency與其他數據類型共同運算時,Currency類型。Comp:針對Inter公司的64位CPU架構進行了優化。3)實數與整數轉換:TRUNC:舍棄取整,即將浮點數小數部分舍棄,得到整數;ROUND
9、:舍入取整,即根據四舍五入原則對浮點數取整。TRUNC(1.2)= 1ROUND(1.2)= 1TRUNC(1.8)= 1ROUND(1.8)= 2TRUNC(-8.9)= -8 ROUND(-8.9)= -92.整數類型名稱字長取值范圍短整型ShortInt8位有符號-127128字節型Byte8位無符號0255小整型SmallInt16位有符號-3276832767字型Word16位無符號065535整型Integer/LongInt32位有符號-21474836482147483647序數型Cardinal/LongWord32位無符號0429496729564位整數Int6464位有符
10、號-263263Object Pascal的整型數據1)整數運算:整除運算:DIV表示整除運算,相當于整數除法中的求商操作;取余運算:MOD表示取余運算,相當于整數除法中的求余數操作。7 MOD 3 = 27 DIV 3 = 16 MOD 3 = 26 DIV 3 = 02)常用函數PRED函數:表示取某個整數的前導數。SUCC函數:表示取某個整數的后繼數。PRED(10)= 9SUCC(10)= 11PRED(-10)= -11SUCC(-10)= -9 3.字符與字符串1)字符:用以存放單個符號。類型名稱字節取值范圍ANSI字符AnsiChar1字節擴展ANSI字符字符Char1(2)字節
11、擴展ANSI字符寬字符WideChar2字節UniCode字符Object Pascal的字符型數據Char與AnsiChar是等價類型,而WideChar字符提供了對漢字等寬字節編碼的支持(2)特殊符號表示:空格表示:或者使用系統定義了常量BLANK。定界符表示:單引號是字符定界符,其形式為:。第一和第四個單引號是表示定界符,第二與第三兩個連續單引號在一起,表示符號轉義,第二個單引號是轉義符,表示后面的單引號不再是定位符而是普通字符了。(3)常見函數:ORD函數:求取字符在ANSI表中序號;CHR函數:求該整數序號對應的字符。例如:ORD(a)=97 ORD(9)=57CHR(112)=p
12、CHR(PRED(ORD(6)=52)字符串:(1)定義:由兩個單引號定位的一串字符。類型名稱字節最大長度短字符串ShortString2256255個ANSI字符長字符串AnsiString42GB231個ANSI字符寬字符串WideString42GB230個UniCode字符字符串聲明的語法格式如下:Var str1:String;Object Pascal的字符型數據(2)字符串長度:一個字符串中包含字符的個數稱字符串的長度。變長字符串:長度動態變化的字符串。Var str1:String;定長字符串:最大長度確定的字符串,超出最大長度的字符自動刪除。Var str2:Stringn;
13、4.布爾型1)定義:布爾型數據用于進行判斷,故只有兩個取值:TRUE與FALSE。2)分類:類型名稱字節取值范圍布爾型Boolean1字節TRUE(1);FALSE(0)2字節布爾型WordBool2字節TRUE(非0數);FALSE(0)4字節布爾型LongBool4字節TRUE(非0數);FALSE(0) 一般僅使用第一種布爾類型Boolean。Object Pascal中的布爾型數據3)相關運算(1)函數運算ORD(FALSE)=0SUCC(TRUE)=FALSEPRED(TRUE)=FALSEPRED(FALSE)=TRUE(2)關系運算布爾類型數據與其他數據類型進行關系運算時,運算結
14、果為布爾值。35=FALSE35=TRUEAB=FALSETRUE0=TRUEFALSE TRUE=TRUE5.枚舉類型枚舉類型實際上是將用戶定義的有限的具有描述意義的值與序號一一對應起來,這些值稱枚舉值。1)定義TYPE = (,);Var :;2)原則枚舉值只能是標識符。一個枚舉值只能屬于一個枚舉類型,且只出現一次。定義枚舉類型時,該類型所有可能的取值必須全部列出3)用例用戶可以定義關于色彩的枚舉類型如下TYPE Color=(Red,Green,Blue);Var UsrColor,MyColor:Color;4)賦值賦值必須是該類型的枚舉值或是同類型的枚舉變量值,以下為合法賦值:Usr
15、Color:=Red;MyColor:=UsrColor;下面賦值是非法的:UsrColor:=Orange;MyColor:=1;5)相關運算枚舉類型可以進行ORD、PRED、SUCC以及關系運算。ORD(Green)=1PRED(Blue)=Green在枚舉值列表中,第一個枚舉值沒有前驅,最后一個枚舉值沒有后繼。枚舉類型可以進行關系運算,在運算時,根據枚舉值序號大小進行比較得到結果。例如:Red Green=FALSEGreenBlue=TRUE6.子界類型用于指定變量的取值范圍,便于檢查不合法的輸入數據。1)定義TYPE = 常量1.常量2;Var :;2)要求常量1與常量2的類型必須一
16、致,它們的類型也稱為子界的基類型。子界的上界(常量2對應序號)必須大于子界的下界(常量1對應序號)。3)實例TYPEAGE = 0.150;character = a .z;Varpeopleage:AGE;inputchar:character;2.3.3 用戶構造數據類型常見的用戶構造數據類型有數組、集合和記錄。1.數組數組是相同類型的數據按一定順序排列構成的序列。1)數組特點數組元素存放在內存中的連續區域用戶利用數組中位置的編號來操作該數組元素值2)靜態數組數組元素的個數是固定的,在程序初始化時,用戶必須分配數組存儲單元數目,該數字在分配后不可改變。(1)定義TYPE =ARRAY下標下
17、限.下標上限 OF ;Var :;(2)實例TYPEIntArr=ARRAY0.9 OF Integer;VarArrX:IntArr;(3)多維數組當數組下標對多于一對則稱多維數組。TYPE =ARRAY下限1.上限1,下限2.上限2,下限n,上限n OF;Var :;例:TYPE RealArr=ARRAY1.5,0.4,3.6 OF Single;Var ArrY:RealArr;ArrY是一個三維實數數組,第一維長度為5,第二維長度為5,第三維長度為4,因此,整個數組大小為554=100,即數組共由100個Single類型數據構成。3)動態數組動態數組類型在聲明時不需要指定數組大小。(
18、1)定義TYPEMYARR1=ARRAY OF Integer;MYARR2=ARRAY OF ARRAY OF Single;VarArr1:MYARR1;Arr2:MYARR2;(2)說明MYARR1是一個一維動態數組類型,MYARR2是一個二維動態數組,如果用戶想定義更多維數的動態數組,只需在定義時使用多次ARRAY OF關鍵字。(3)使用在使用之前,必須先使用SetLength方法來確定數組大小。(4)SetLength函數SetLength(Arr1,5);/指定數組Arr1有5個元素SetLength(Arr2,4,5);/制定數組Arr2有20個元素,第一維大小為4,第二維大小為
19、52.集合類型1)集合特點所有元素必須是具有相同特征的有序數據。有序數的類型就是集合的基類型。每個集合最多可以擁有255個元素。2)定義TYPE=set of ;Var:;集合中的元素是有序的,一般情況下,基類型為子界型或枚舉型。例如:TYPECharSet = set of Char;IntSet = set of 0.100;ColorSet = set of Color;VarCharS:CharSet;IntS:IntSet;ColorS:ColorSet;3)集合賦值集合在使用前要先賦值,集合值用中括號定界,對于連續取值可以采用子界形式:CharS:=0.9 , a, A; /集合中
20、有12個元素值IntS:=2,4,6,8,10; /集合中有5個元素值ColorS:=; /空集合4)集合運算(1)集合可以進行并(+)、交(*)、差(-)運算,其操作數與運算結果都必須是集合類型數據。(2)集合可以進行關系運算,運算的結果是布爾類型。(3)in運算,判斷某個元素值是否在集合中。Set1,Set2:IntSet;Set1:=1,3,5,6,7,8;Set2:=2,4,6,7,9;Set1+Set2=1,2,3,4,5,6,7,8,9;Set1Set2=1,3,5,8;Set1*Set2=6,7;Set1=Set2的值為FALSE;Set1Set2的值為TRUE;1,3,5=Se
21、t1的值為FALSE;7 in Set1的值為TRUE;12 in Set2 的值為FALSE3.記錄類型將一組數據類型關聯起來共同來描述某個對象的特征。1)定義 = RECORD :; :; :;END;2)實例將學生個人信息包括:學號、姓名、年齡、性別和家庭住址,這可以通過定義記錄類型來描述。STUDENT = RECORDSNO:String;SNAME:String;SAGE:Integer;SSEX:Boolean;SADDRESS:Sring;END;3)賦值VarSInf:STUDENT;SInf.SNO := 123456789;SInf.SNAME := Tom;SInf.S
22、AGE := 19;SInf.SSEX := TRUE;SInf.SADDRESS := 19th,Well Street.;2.3.3 指針類型指針類型的變量稱指針變量。這是一種特殊的變量,變量的取值是其他數據存放的地址。有了指針變量,用戶可以直接操作變量地址并可以修改該地址存放的數值。1.指針定義TYPE = ;基類型可以是任何基本數據類型,也可以是集合、數組和記錄等用戶定義數據類型,是指針標識,表示這是一個指向基類型的指針。TYPE PointOfInteger = Integer; PointOfChar = Char; PointOfStud = STUDENT;Var pInt:P
23、ointOfInteger;/定義一個指向整型的指針變量 pChar:PointOfChar;/定義一個指向字符的指針變量 pStuInf:PointOfStud;/定義一個指向STUDENT結構的指針變量2.地址與數據關系pInt19810217H指針變量pInt指向地址0217H,在地址為0217H的存儲單元中,存放著整數1981。3.指針操作1)分配地址new過程來為指針分配地址。例如:new(pInt)。此時,系統自動在內存中劃分出一個Integer類型的存儲單元,并將該單元的地址賦給pInt指針。2)指針賦值pInt := 1981;相當于X:=1981;pInt:=X;3)釋放指針
24、Dispose(pInt);4)指針加減運算2171981pInt9850H9854H9858HpInt + 1的含義不是pInt數值加整數1,而是表示pInt指向下一個存儲單元。Int+1指向地址是9854H +4=9858H,而(pInt + 1)的值為17。如果指向的是pInt 1運算,pInt則指向9850H,pInt值為19812.3.4 其它數據類型1.時間日期類型即Double類型,Object Pascal語言規定0對應1899-12-30正午12點整,作為標準日期時間。對于每個Double類型數據,整數部分表示與標準日期時間誤差的天數,正數表示標準日期之后的天數,負數表示標準
25、日期之前的天數;小數部分表示時間,即從0點時刻到當前時刻的時間與全天24小時的比值。3.75表示日期為1900-1-2,時間為下午6時;-1.25表示日期為1899-12-29,時間為上午6時;35066表示日期為1996-1-2,時間為上午12時。在程序設計中,一般采用字符串來表示日期,然后用日期轉換函數來完成字符與日期時間的轉變。2.變體類型1)說明Variant類型支持所有簡單數據類型以及日期類型、貨幣類型甚至是OLE自動化對象。Variant類型變量在程序運行期間可以轉換為其他任何類型的變量。2)定義Varv:Variant;v := 1;/Variant為Integerv := De
26、lphi;/Variant為Stringv := TRUE;/Variant為BooleanVariant類型會導致系統編譯速度降低,程序占用存儲空間加大,更有可能增加程序邏輯錯誤,所以不提倡用戶使用Variant類型。2.3.5 類型轉換1.定義類型轉換是將一種類型的變量轉換為另外一種類型的變量。2.轉換方式如果整數和實數同時參與運算時,整數自動轉換為實數。除此之外的類型轉換均采用顯式的類型轉換方法,即用戶使用類型轉換函數來完成不同數據類型間的轉換工作。3.常用轉換函數函數名稱作用Chr將一個有序數據轉換為一個ANSI字符Ord將一個有序類型值轉換為它的序號Round轉換一個實型值為四舍五入
27、后的整型值Trunc轉換一個實型值為小數截斷后的整型值Int返回浮點數的整數部分IntToStr將數值轉換為字符串IntToHex將數值轉換為十六進制數字符串StrToInt將字符串轉換為一個整型數常Val將字符串轉換為一個數字Str將數字轉換為格式化字符串StrToDateTime將字符串轉換為日期/時間格式DateTimeToStr將日期時間格式轉換為字符串常用的類型轉換函數 2.4 運算符 運算符是程序設計語言中表示數據運算類型的符號,根據運算類型的不同,一般可以分為數據賦值、數值運算、邏輯運算、比較運算和位運算。 2.4.1 賦值運算 賦值運算是將賦值符號右邊表達式或變量的值傳遞給賦值
28、符號左邊的變量。賦值符號是冒號和等號兩個符號的組合,即:= 。X:=5;可以讀作X獲得值5,或X被賦值為5。2.4.2 數值運算1.定義數值運算主要是對數據進行取反、加、減、乘、除運算、整除和取余運算。符號功能實例運算結果-取反-5-5+加法5+3.48.4-減法10-64*乘法3*515/除法7/32.33333333Abs取絕對值Abs(-7.6)7.6Sqr求平方數Sqr(5)25Sqrt求正平方根Sqrt(16)4Object Pascal中的常用數值運算符2.平方與開方運算Power函數是定義在Math單元的函數,在使用時要在程序中聲明Math單元。Power函數的格式如下:Powe
29、r(const Base,Exponent: Extended)這里,Base表示基數,Exponent表示指數,例如:94表示為Power(9,4);12的立方根表示為Power(12,1/3)。3.算式優先級如果有括號,要先計算括號中的內容,當括號是多級時,要先計算最里面括號中的內容。如果表達式沒有括號,計算的順序是:函數求反乘法、除法、整除、取余加、減。當兩個運算優先級相同時,一般按自左向右的順序進行。2.4.3邏輯運算邏輯運算是一種特殊運算,其運算結果是Boolean值。邏輯運算可以分為布爾運算和關系運算兩類。1.布爾運算布爾運算只能針對布爾型數據進行,包括:AND(與)、OR(或)、
30、NOT(非)和XOR(異或)。ABA And BA OR BNOT AA XOR BTRUETRUETRUETRUEFALSEFALSETRUEFALSEFALSETRUEFALSETRUEFALSETRUEFALSETRUETRUETRUEFALSEFALSEFALSEFALSETRUETRUE布爾運算符的運算規則在表達式中,NOT優先級最高,AND與XOR次之,OR優先級最低,此外用戶可以增加括號來改變優先級。2.關系運算關系運算用于判斷兩個相同類型數據之間的關系,并返回對應的布爾值,這些參加運算的數據必須是可以比較的。符號功能實例結果=判等3=5FALSE判不等35TRUE判大于45.2
31、FALSE=判大于等于8=8TRUE判小于-2-1.7TRUE=判小于等于7=8TRUEObject Pascal中常見的關系運算符3. 特殊比較當布爾變量進行關系比較時,比較依據的是Boolean值的順序,即按照FALSE為0,TRUE為1來進行比較。對兩個集合變量A、B進行比較時,如果A是B的子集,則A=B取值為TRUE,否則為FALSE;如果A是B的真子集,則AB取值為TRUE,否則為FALSE;如果A、B中的所有元素相同,則A=B的值為TRUE,否則為FALSE;若A、B元素中有任何一個或多個元素不同,則AB取值為TRUE,否則為FALSE。2.4.4 位運算位運算是一種專門針對整數進
32、行的運算。符號功能實例結果NOT按位取反NOT X-17OR按位或X OR Y-4AND按位與X AND Y16XOR按位異或X XOR Y-20SHL向左位移X SHL 264SHR向右位移Y SHR 4-1Object Pascal中的常見位運算符1.數據碼制1)正負表示對于一個有符號數的二進制表示,最左邊的一位用來表示符號:0表示正數,1表示負數,其余各位二進制數用來表示數據。2)原碼、反碼與補碼正數而言,原碼、反碼和補碼都是一致的,均是正數的二進制表示;對于負數而言,原碼是負數絕對值的二進制表示(符號位為1),反碼是原碼數據按位取反(符號位不變),補碼由反碼+1計算而得。數據原碼反碼補
33、碼40000 01000000 01000000 0100-41000 01001111 10111111 1100數據的碼制表示3)移位運算SHL運算是數據左移操作,X SHL 2表示0001 0000位串按位向左移動2位,由于位串只有8個二進制位,所以最左端兩位數據將會丟失,而最右端兩位數據移動后空出位置將自動補零,得到0100 0000,即64。同理,用戶可以計算X SHL 3的值為-128.SHR運算操作與SHL操作相似,Y SHR 4表示二進制串按位右移4位,最右端移除部分,最左端空出4位補符號位,即最高位數字,得到二進制串1111 1111,結果是-1;如果Y取值為4,則Y SHR
34、 4,得到符號串0000 0000,結果是0.SHL與SHR運算是有損運算,運算結果有可能不精確。SHL操作與SHR操作不是互逆的,即(X SHR 2)SHL 2不一定得到X。2.4.5 字符串運算1.連接運算連接運算符“+”,表示兩個字符串拼接成一個字符串。2.函數運算下表中列出了Object Pascal語言中常用的字符串運算。符號功能實例結果+字符串連接CH+ INACHINAUpperCase(s)字符串轉大寫UpperCase(this)THISLowerCase(s)字符串轉小寫LowerCase(ANSI)ansiPos(s1,s2)查找s2在s1中首次出現位置Pos(Beiji
35、ng, i)3Length(s)求字符串長度Length(people)6CompareStr(s1,s2)字符串比較,區分大小寫,當s1=s2時,返回0;當s1s2時,返回大于0數;當s10CompareText(s1,s2)同CompareStr,不區分大小寫CompareText(is, IS)=0Copy(s, star, len)在字符串s中star位置,復制長為len的子串。若star+len-1Length(s),則復制到字符串結束為止;若star=0或starLength(s),則復制空串Copy(19810217,4,3)102Object Pascal中的常用字符串運算符2
36、.5 語句語句是程序設計中的基本單位,在Object Pascal語言中有順序、分支和循環3種語句結構,人們已經證明,僅使用這3種語句結構即可以實現所有程序功能。2.5.1 基礎知識1.書寫規則1)命名規則命名規則要求程序中使用到的常量、變量以及過程與函數的名稱要遵循規定。大小寫字母錯落有致。根據名稱能清楚了解變量含義。要求變量名稱第一個字符小寫,表示變量類型。為函數與過程命名時,要求以大寫字母開始,大小寫字母錯落排列。2)完備性規則對于設置了判斷條件的語句,每一種可能性都要有對應的處理語句。函數與過程執行完畢后要判斷執行是否正常。2.書寫格式1)一個完整的Object Pascal應用程序由
37、program關鍵字開始,end.關鍵字結束。end后是.,表示程序結束。2)在程序中,uses關鍵字標明本程序要調用的單元,一個應用程序至少調用了SysUtils系統單元,如果還要使用其他單元的函數與過程,要加上被調用的單元名稱。3)用戶使用常量與變量均要遵循“先聲明后使用”則。聲明位置要在程序段之前,即該程序的begin關鍵字之前。2.5.2 基本語句Delphi語句可以分為簡單語句與復合語句,簡單語句包括表達式(它是由操作符和操作數組成)、賦值語句和調用語句;復合語句是指用begin.end把簡單語句包括起來構成的語句。1.賦值語句在程序語句中,賦值語句最為重要,其語法結構如下所示::=
38、表達式;x:=y:=10;/錯誤x:=10;/正確y:=10;【例2-1】 已知ABC兩邊AB,AC長度和A度數,求ABC第三邊BC長度和ABC面積。步驟:(1)用戶輸入AB,AC長度和A度數;(2)根據公式 計算BC邊長;(3)根據公式 計算ABC面積;(4)程序輸出邊長與面積。設計過程:為了簡化程序設計,這里采用控制臺程序設計模式。打開Delphi編程環境后,執行FileClose All命令關閉當前環境,然后執行FileNewOther命令,打開如下圖所示的對話框。選擇Console Application選項,單擊OK按鈕,則進入新的開發環境。在代碼編輯器中輸入如下代碼。program
39、 Project1;uses SysUtils;const pi = 3.1415926; /定義常量var AB,AC,ALPHA,S,BC:single; /定義變量begin 用戶代碼開始 readln(AB,AC,ALPHA); /讀入3個變量 writeln(AB=,AB,AC=,AC,ALPHA=,ALPHA); /讀入變量回顯 ALPHA := ALPHA * pi /180 ; /角度轉換弧度 BC := sqrt(sqr(AB)+ sqr(AC)- 2 * AB * AC * cos(ALPHA); S := (AB * AC * sin(ALPHA)/ 2; writeln
40、(BC=,BC,S=,S); /顯示計算結果 readln; /等待用戶鍵入回車建結束程序end. 程序運行效果如下圖所示。2.基本輸入輸出函數1)read函數read函數語句形式是:read(變量表)變量表中的變量是用逗號分開的;用戶在輸入數據時,要保證數據與變量類型相同,并且兩個數據之間用空格分開,輸入完成后按Enter鍵結束。(1)輸入數字read(X,Y);用戶鍵入12 24后回車,則12賦值給X,24賦值給Y。(2)輸入字符由于空格也是字符,所有輸入時要求字符與字符之間不用空格分開。read(ch1,ch2);用戶鍵入AB回車,則ch1賦值為A,ch2賦值為B。(3)輸入Boolea
41、n值對于Boolean值而言,在輸入時,用1代表TRUE,0代表FALSE。2)readln函數readln函數與read近似,其區別在于,當readln函數當最后一個變量賦值結束后,自動結束本行輸入,使得下一個read語句從新一行開始。3)read與readln對比用戶輸入以下數據:1.02.03.0回車4.0 5.06.07.0回車執行語句read(X,Y);read(A,B,C);結果:X賦值為1.0;Y賦值為2.0;A賦值為3.0;B賦值為4.0;C賦值為5.0。若執行語句readln(X,Y);readln(A,B,C);則執行完畢后,X賦值為1.0;Y賦值為2.0;A賦值為4.0;
42、B賦值為5.0;C賦值為6.0。4)write函數write函數用于數據輸出,write語句格式為:write(輸出列表);如:write(X,X+Y);結果是1.0,3.0;為了標識輸出結果,可以在write函數中加入說明信息,這些信息以字符串形式給出。如:write( X=,X,X+Y=,X+Y),顯示結果是X=1.0,X+Y=3.0。5)writeln函數 writeln作用與write類似,只是在輸出完成后自動換行。6)實例為了使得數據輸入與輸出更加符號用戶習慣,可以在代碼中加入相關write語句,用以提示當前用戶輸入數據的性質可以將【例2-1】的代碼修改如下:begin write(
43、Input AB:); readln(AB); write(Input AC:); readln(AC); write(Input ALPHA:); readln(ALPHA); ALPHA := ALPHA * pi /180 ; BC := sqrt(sqr(AB)+ sqr(AC)- 2 * AB * AC * cos(ALPHA); S := (AB * AC * sin(ALPHA)/ 2; writeln(BC=,BC:10:4); writeln( S=,S:10:4); readln;end.運行效果如下圖所示。2.5.3 分支語句針對一定條件進行判斷,根據判斷結果來選擇相應的
44、處理方法,需要用條件判斷語句或情況選擇語句進行處理。1.IF語句1)格式:if 條件 then 語句;或是:if 條件then語句1 else 語句2;2)程序結構圖兩種if語句的結構3)實例在程序中讀入3個數,求出最大值并輸出。步驟:(1)用戶輸入的三個數為a,b,c;(2)比較a,b大小,將較大者存入Largest變量;(3)比較c,Largest大小,將較大者存入Largest變量;(4)輸出Largest變量。 參考代碼:program Project1;uses SysUtils;var a,b,c,largest:single;/定義變量begin write(Please Inp
45、ut a:);/用戶輸入數據 readln(a); write(Please Input b:); readln(b); write(Please Input c:); readln(c);if a bthen largest := a else largest := b; if c largest then largest := c;writeln(Largest Num is,largest:8:4); readln;end.運行效果如下圖所示。在if then else結構中,如果then后面的語句只有一條,則該語句結束時,不用分號。2.多分支IF語句用戶選擇條件往往多于兩個,這就構成了
46、多分支選擇。1)結構復合if語句的結構2)實例學校規定,學生考試成績在60分以下為不合格;60分以上,70分以下為合格;70分以上,80分以下為中等;80分以上,90分以下為良好,90分以上為優秀(60分以下不包括60分,60分以上包括60分,以此類推)。要求輸入學生成績后,程序給出學生等級。步驟:(1)用戶輸入學生成績;(2)系統判斷成績范圍,給出對應等級;(3)輸出成績等級 參考代碼:program Project1;usesSysUtils;varscore:integer;level:string;begin write(Please input score:);readln(scor
47、e); if score = 90 then level := 優秀 else if (score = 80) then level := 良好 else if (score = 70) then level := 中等 else if (score = 60) then level := 合格 else level := 不合格; write(Level:,level); readln;end.運行效果如下圖所示。3)語句二義性由于if語句的結構有if.then與if.then.else兩種,使用復合if語句進行多路分支判定,可能出現會出現邏輯異常。(1)二義性結構復合if語句的二義性(2)
48、處理else語句要和最接近的、沒有其他else語句對應的if語句對應。(3)修改if thenbegin if then endelse 3.case語句1)結構case of:語句1;:語句2;::語句nend;2)說明表達式的值必須是順序類型,即整型、布爾型、字符型、枚舉型和子界型。值表是一串用逗號隔開的與表達式類型一致的常量序列。語句可以是單條語句、復合語句和空語句。當case語句執行時,先計算表達式的值,如果它的值等于某一個常量,則執行該情況常量后面的語句,在執行完語句后,跳到case語句的末尾end處。3)注意事項Case關鍵字后的表達式值必須是順序類型。值表中的數據應與表達式具有相
49、同的類型。值表中數據出現的次序沒有限制。同一數據不能在同一個case語句中出現兩次或兩次以上。值表中數據可以存在多個數據,數據之間用逗號分開,對于連續數據,可以采用子界形式定義。如果case語句后表達式的取值不在當前值表中的取值范圍中,則認為本條case語句無效,執行case語句的下一條語句。在所有值表之后,可以增加一個else子句,表示當所有條件不滿足時,執行該語句處理,但也可以省略。每個常量后面只能是一個語句或一個復合語句。4)實例用戶輸入兩個數據和一個運算符號,根據運算符號得到運算數值并輸出。(1)步驟用戶輸入數據與運算符號;根據運算符號判斷運算類型;計算運算結果;輸出結果。(2)參考代
50、碼program Project1;usesSysUtils;var x,y,res:single; op:char;begin write(First Num:); readln(x); write(Second Num:); readln(y); write(operation type:); readln(op);case op of +: res := x + y; -: res := x - y; *: res := x * y; /: res := x / y; end; write(Result:,res:8:6); readln;end.運行效果如下圖所示。2.5.4 循環語句
51、循環結構通常由3種循環語句來實現。它們分別為For循環、While循環和Repeat循環。通常將一組重復執行的語句稱為循環體,而控制重復執行或終止執行的條件稱循環條件,當滿足循環條件是,執行循環體,否則,退出循環,執行循環后語句。1.FOR循環1)格式for := to do ;或:for := downto do ; 2)過程(1)先將初值賦給循環變量。(2)判斷循環變量的值是否已“超過”終值,如已超過,退出循環,執行循環外語句;如果沒有超過終值,則執行循環體。(3)循環變量遞增(對to)或遞減(對downto)1。(4)重新判斷循環變量。(5)當循環變量取值超出循環終值時,退出循環。3)結
52、構圖4)注意循環控制變量必須是順序類型,可以是整型、字符型等。循環控制變量的值遞增或遞減的規律是:選用to則為遞增;選用downto則遞減。只有循環變量值超出控制值,才退出循環體,對遞增型循環,超出是循環變量值大于控制值,對遞減型循環,超出循環變量值是小于控制值。循環控制變量的初值和終值一經確定,循環次數就確定了,雖然在循環體內可以修改循環變量值,但是可能造成死循環,使用時要慎重。for語句中的初值、終值都可以是順序類型的常量、變量和表達式。5)實例計算1200之間的奇數之和。(1)步驟設置循環條件;判斷是否為奇數;奇數累加求和;輸出結果。(2)代碼如下:program Project1;us
53、es SysUtils;var sum,i:integer;begin m := 0;/累加求要初始化為0 for i := 1 to 200 do if i DIV 2 0 then sum := sum + i; write(Sum = ,sum); readln;end.2.WHILE與UNTIL循環當循環次數是預先不可知的,何時退出循環由用戶給定的條件判斷而得。1)while循環先給出條件,程序判斷是否滿足條件,滿足則進入循環體,否則執行循環體之后代碼。語法結構:循環變量賦值;While ;修改循環變量值;2)until循環循環體執行完以后再判斷循環條件是否滿足,從而決定是否繼續執行循
54、環程序。語法結構:Repeat;循環變量賦值;Until ;3)說明在While結構中,當滿足While語句條件時執行循環體,否則,執行跳出循環;在Repeat.Until結構中,先執行循環體,再判斷是否滿足Until條件,如果不滿足Until條件,繼續執行循環,否則,退出循環。用戶必須在每執行一次循環體后,都要修改循環變量值避免死循環。4)實例用歐幾里得算法求取兩個非負整數的最大公約數。步驟(1)程序輸入兩個非負整數big,small。(2)如果big小于small,則交換兩個數據。(3)如果big整除small余數為0,輸出small,退出循環;否則,將big賦值為small,small賦
55、值為big-small;重新循環。(4)由于在計算完成之前,不能給出循環進行的次數,故應采用While循環結構。參考代碼如下:program Project1;uses SysUtils;var small,big,res,tmp:integer;beginwrite(Input One Integer:);readln(small); write(Input another integer:); readln(big);if small big then begin tmp := small; small := big; big := tmp; end;res := big MOD smal
56、l;while res0 do begin tmp := big; big := small; small := tmp - small;res := big DIV small; end; writeln(Res:,small); readln;end.實例:計算 ;用戶給定閾值,程序從1開始計算該式值,并輸出,當計算結果小于用戶給定閾值時,退出。說明:在程序中,用戶首先給定閾值;然后計算n = 1時,公式的取值,如果該值小于閾值,則退出程序,否則,打印出該值,然后令n = n + 1,繼續計算公式取值,直至計算結果小于閾值,然后退出程序。顯然,這是一個使用循環結構的例程,并且,用戶事先不能
57、獲得程序的循環次數,因而應采用While或者Until結構。參考代碼如下:program Project1;uses SysUtils;var x,y,i:integer; num,res:single;begin write(Please Input Data:); readln(num); x := 1;repeat y := 1;for i := 1 to x do /計算階乘y := y * i; res := 1 / y; writeln(x,!=,y,; 1/,x,!=,res:8:7); x := x + 1; /修改循環變量until res myArrj+1 /如果前一個數大
58、于后繼數 then begin/則調整順序 tmp := myArrj; myArrj := myArrj+1; myArrj+1 := tmp; end; end; writeln(After change!); for i:=1 to 10 do/打印排序后結果 writeln(myArri); readln;end.運行效果如下圖所示。2.6 函數與過程通常,在程序設計中,為了簡化程序,可以使用子程序方式縮短了程序,節省了內存空間及減少了程序的編譯時間,而且有利于結構化程序設計。在程序中可以只有主程序而沒有子程序,但子程序不能單獨存在,必須在主程序中才能調用。Object Pascal有
59、兩種形式的子程序:函數和過程。2.6.1 函數與過程調用1.函數如果一個子程序執行后能夠返回其運行結果,則可將其用于表達式中,這種子程序被稱為函數,該語句序列的定義稱為函數說明。1)函數格式function函數名(形式參數表):函數類型;說明部分;/內部參數說明begin語句;end;2)函數參數(1)形式參數是函數的自變量,形參的初值來源于函數調用。在函數中,形參的一般格式如下:變量名1:類型標識符1;變量名2:類型標識符2;變量名n:類型標識符n(2)形參說明形參實際是函數自變量的聲明,但是,在聲明形參時,只能使用類型標識符,而不能直接使用類型來說明。當一個函數沒有輸入參數時,則該函數被稱
60、為無參函數。函數體與程序體在結構上基本相似,均由變量聲明和語句代碼組成,但是,函數體內部聲明定義的量只在本函數內部有效。(3)實際參數用戶可以在任何表達式中調用函數,但是要保證表達式類型與函數返回值類型一致。函數調用的格式如下:result := (實際參數表);實際參數簡稱實參,實參的數量、順序與類型必須與函數說明中的形參數量、順序與類型一致,在調用函數時,將實參的當前值賦給形參,然后在函數體中執行。3)實例求出2999中所有的素數。說明:在程序中,用好需要對2999中的所有數據進行判斷,如果該數據為素數,則將該數據打印出來,否則不做處理。因而,在程序中可以用循環方法來判斷999個數是否是素
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冠狀動脈造影及支架植入術
- 2-6邏輯運算的公式
- 原發性肝癌患者護理查房 2
- 上海市浦東新區浦東2025年招生伯樂馬模擬考試(三)生物試題含解析
- 山西財經大學華商學院《中外設計史》2023-2024學年第二學期期末試卷
- 上海海關學院《數理統計理論與方法》2023-2024學年第一學期期末試卷
- 新疆伊寧市第七中學重點達標名校2025年高中畢業班零診模擬考試英語試題含答案
- 山西警官職業學院《藥物分離工程》2023-2024學年第一學期期末試卷
- 九江理工職業學院《影視專業英語》2023-2024學年第一學期期末試卷
- 南京師范大學泰州學院《電氣安全》2023-2024學年第二學期期末試卷
- 2024糖尿病酮癥酸中毒診斷和治療課件
- 妊娠期糖尿病產后護理
- 老撾萬象鉀礦百萬噸級規模氯化鉀開發項目可行性分析研究的開題報告
- 編輯打印新課標高考英語詞匯表3500詞
- 2023年湖南省煙草專賣局(公司)真題
- 22G101基礎平法識圖與鋼筋計算
- 2024年專升本考試-專升本考試(機械設計基礎)筆試歷年真題薈萃含答案
- 對中標候選人的異議書
- 2024年北京市自來水集團長辛店分公司招聘筆試參考題庫含答案解析
- -醫院感染預防與控制標準操作規程SOP第2版
- 老人疫苗接種健康知識講座
評論
0/150
提交評論