《Delphi程序設(shè)計實訓教程》課件第3章_第1頁
《Delphi程序設(shè)計實訓教程》課件第3章_第2頁
《Delphi程序設(shè)計實訓教程》課件第3章_第3頁
《Delphi程序設(shè)計實訓教程》課件第3章_第4頁
《Delphi程序設(shè)計實訓教程》課件第3章_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章ObjectPascal程序設(shè)計語言

3.1ObjectPascal語言基礎(chǔ)

3.2語句

3.3過程與函數(shù)

3.4ObjectPascal的面向?qū)ο缶幊袒A(chǔ)

3.5本章小結(jié)

3.1ObjectPascal語言基礎(chǔ)

3.1.1Pascal程序的基本組成

【例3.1】計算半徑為r的圓的面積S。

programArea; {程序首部}

const {說明部分--數(shù)據(jù)描述}

pi=3.14159;

var

s,r:real;

begin

{執(zhí)行部分}

readln(r);

s:=pi*sqr(r);

writeln('s=',s);

end.

1.程序首部

例3.1的第一行稱為程序首部。program是保留字,之后是程序名(依據(jù)“標示符"規(guī)則自行定義),最后以分號表示程序首部結(jié)束程序主體的開始。程序首部在一個TurboPascal(僅在TurboPascal中有效)程序中并非必須出現(xiàn),它是可選的。因此,在時間有限的情況下,如果在TurboPascal環(huán)境下編程則完全可以省略程序首部。

2.說明部分

說明部分用于定義和說明程序中用到的數(shù)據(jù),依次由單元說明、標號說明、常量說明、類型說明、變量說明、函數(shù)或過程說明組成,說明的次序不能改變,但各個部分是可選的。一個簡單的Pascal程序也可以不包含說明部分。例3.1的第二行是常量說明,第三行是變量說明。

3.執(zhí)行部分

執(zhí)行部分描述了程序要執(zhí)行的操作。執(zhí)行部分必須以一個Pascal保留字begin開始,以保留字end后跟句點結(jié)束,其間是一些執(zhí)行具體操作的語句,并且以分號作為語句之間的分隔符。begin和end必須成對出現(xiàn),這是一個Pascal程序所必需的。緊跟end之后的句號表示執(zhí)行部分的結(jié)束,也表示整個程序的結(jié)束。此后的任何語句都無效。Pascal規(guī)定緊隨end之前出現(xiàn)的分號允許省略。如例3.1中從begin到end都是執(zhí)行(語句)部分。

3.1.2基本字符和符號

1.基本符號

A~Za~z0~9+-*/=<><=>=<>()[]

{}:=,;.:..'^

注意:Pascal語言除了能使用以上規(guī)定的基本符號外,不得使用任何其他符號。

2.保留字

保留字在Pascal語言中具有特定的含義,在進行程序設(shè)計時不能被重新定義或進行它用,必須了解它的含義,以便于正確地使用,否則會造成錯誤。ObjectPascal語言中的保留字一共有65個:

ObjectPascal語言是不區(qū)分大小寫的,所以像And、AND、and等都被看做是保留字。此外,ObjectPascal語言中還定義了39個指令字(Directives),它們也具有特殊的含義,如果用戶重新定義了這些指令字,在作用域內(nèi)它們就失去了原來的意義。這些指令字為:

盡管private、protected、public、published和automated都是指令字,也應該將它們當作關(guān)鍵字來看待,不要定義與它們同名的標識符。在Delphi集成開發(fā)的代碼編輯器中,關(guān)鍵字和指令字將以粗體顯示。在定義標識符時不要定義與這些粗體顯示的關(guān)鍵字和指令字一樣。

3.標識符

1)標識符的定義

標識符是用來標識程序、過程、函數(shù)、類型、符號常量、變量、對象等的名字的符號。

ObjectPascal語言中規(guī)定,標識符由字母A~Z、a~z、下劃線和數(shù)字0~9組成。標識符的命名有以下3條限制:

●首字符必須是字母或下劃線,不能是數(shù)字;

●標識符不能和保留字相同;

缺省狀況下,Delphi只認為標識的前255個組成字符是有意義的。

在ObjectPascal語言中,標識符也不區(qū)分大小寫,所以標識符Myname、MyName、myname、myName和MYNAME被認為是同一個標識符??傮w上來說,這是Pascal的一大優(yōu)點,因為在大小寫敏感的語言中,許多語法錯誤是由不正確的大小寫引起的。

Pascal語言的大小寫不敏感也有例外,如控件包中的Register過程必須以大寫字母R開始,一些API函數(shù)調(diào)用參數(shù)也必須按要求大小寫等。

在ObjectPascal語言中,標識符也不區(qū)分大小寫,所以標識符Myname、MyName、myname、myName和MYNAME被認為是同一個標識符??傮w上來說,這是Pascal的一大優(yōu)點,因為在大小寫敏感的語言中,許多語法錯誤是由不正確的大小寫引起的。

Pascal語言的大小寫不敏感也有例外,如控件包中的Register過程必須以大寫字母R開始,一些API函數(shù)調(diào)用參數(shù)也必須按要求大小寫等。

保持大寫使用的一致性是值得提倡的好習慣,盡量保持大寫使用的一致性,可以提高代碼的可讀性。一個常用的方法是將每個標識符的第一個字母大寫;標識符若由幾個詞組合而成(中間不能插入空格),每個詞的第一個字母應大寫,例如:

MyLongIdentifier

MyVeryLongAndAlmostStupidIdentifier

保持大寫使用的一致性是值得提倡的好習慣,盡量保持大寫使用的一致性,可以提高代碼的可讀性。一個常用的方法是將每個標識符的第一個字母大寫;標識符若由幾個詞組合而成(中間不能插入空格),每個詞的第一個字母應大寫,例如:

MyLongIdentifier

MyVeryLongAndAlmostStupidIdentifier

2)標識符的分類

(1)標準標識符:指Pascal語言預先定義的標識符,具有特殊含義。

以下列舉了Pascal語言部分常用的標準標識符:

標準常量FalseMaxintTrue

標準類型BooleanCharRealInteger

標準函數(shù)AbsArctanChrCosEofEolnExpLnOddOrdPredRoundSinSqrSqrtSuccTrunc

標準過程DisposeGetNewPackPagePutReadReadlnResetRewriteUnpackWriteWriteln

標準文件

InputOutput

(2)用戶自定義標識符:由用戶根據(jù)需要定義。

●選用的標識符不能和保留字相同。

語法上允許預定義的標準標識符作為用戶定義的標識符使用,但最好還是不要用。

3.1.3常量與變量

1.常量

(1)常量:在某個程序的整個過程中其值不變的量。

(2)常量定義:常量定義出現(xiàn)在說明部分。它的語法格式是:

CONST

常量名=常量值;

...

常量名=常量值;根據(jù)常量定義的語法,下面的常量定義是有效的:

CONST

pi=3.14;

a=12;

常量的類型由定義它的常量值的類型決定。例如上述常量的定義中,隱含說明a是整型,r是實型。

(3)常量定義部分必須以保留字const開頭,可以包含一個或幾個常量定義,而且每個常量均以分號結(jié)束。

(4)Pascal類型常量。類型常量又稱變量常數(shù),它是一個全局變量,只不過在編譯時用指定的值預初始化,使程序在開始運行時具有指定的初值,在運行中仍然可修改。它是Pascal的一個擴充特性,類型常量的定義與標準Pascal規(guī)定的常數(shù)定義和變量說明有所區(qū)別。類型常量定義的語法格式為:

CONST

常量名:簡單類型=值;

【例3.2】

CONST

COUNTER:INTEGER=0;

FLAG:BOOLEAN=true;

INDEX:0..100=0;

LEFT:INTEGER=40;

2.變量

(1)變量:在某個程序中的運行過程中其值可以發(fā)生改變的量。

(2)變量說明:變量說明出現(xiàn)在說明部分。它的語法格式是:

VAR

變量名:類型;

...

變量名:類型;

其中,保留字VAR表示開始一個變量說明部分。變量名是一個用逗號隔開的標識符序列,冒號后面的類型是變量的類型,每個變量說明均以分號結(jié)束。

根據(jù)變量定義的語法,下面的變量定義是有效的:

VAR

A,B,C:INTEGER;

M,N:REAL;

注意:變量名不允許重復說明。

【例3.3】

VAR

I,J,K:INTEGER;

A,K:REAL;

M,N,I:INTEGER;

其中存在兩個標識符重復說明的錯誤:變量I和K各被重復說明了兩次。

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

數(shù)據(jù)是程序設(shè)計的一個重要內(nèi)容,其重要特征——數(shù)據(jù)類型確定了該數(shù)據(jù)的形、取值范圍以及所能參與的運算。

Pascal提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以分為三大類:簡單類型、構(gòu)造類型和指針類型。其中簡單類型可以分為標準類型(整型、實型、字符型和布爾型)和自定義類型(枚舉型和子界型),構(gòu)造類型可以分為數(shù)組類型、集合類型、記錄類型和文件類型。這些數(shù)據(jù)類型中除了指針類型是動態(tài)數(shù)據(jù)類型外,其他的都是靜態(tài)數(shù)據(jù)類型。在這些數(shù)據(jù)類型中簡單類型都是有序類型,除了實型以外的簡單類型都是順序類型。所謂順序類型,就是它們的值不僅是有序的而且還有順序號。

1.簡單類型

1)整數(shù)類型

整數(shù)類型簡稱整型,用標準類型名INTEGER來表示。TurboPascal支持五種整型,它們是shortint(短整型)、integer(整型)、longint(長整型)、byte(字節(jié)型)和word(字類型),每一種類型規(guī)定了相應的整數(shù)取值范圍以及所占用的內(nèi)存字節(jié)數(shù)(見表3-1)。

表3-1Pascal語言中整型變量所分配的內(nèi)存字節(jié)數(shù)

及其數(shù)值的表示范圍

2)實數(shù)類型

實數(shù)類型簡稱實型,用標準類型名REAL來表示。

Pascal支持五種實型,它們是real(基本實型)、single(單精度實型)、double(雙精度實型)、extended(擴展實型)和comp(裝配實型),每一種類型規(guī)定了相應的實數(shù)取值范圍、所占用的內(nèi)存字節(jié)數(shù)以及它們所能達到的精度(見表3-2)。

表3-2Pascal語言中實型變量所分配的內(nèi)存字節(jié)數(shù)

及其數(shù)值的表示范圍

實數(shù)有兩種表示方式。一種是日常習慣使用的含有小數(shù)點的十進位表示法,例如-12.5,0.0001,-0.25,10.0。另一種是符點表示法,又叫科學表示法,例如

9.1e-28表示9.1*10-28,-1e-7表示-1*10-7。

3)布爾型

布爾類型又稱邏輯型,用標準類型名BOOLEAN來表示。布爾型的值只有兩個:False(布爾假)和True(布爾真),并且False可用0表示,True可用1表示。False和True都是預定義常數(shù)標識符,可以直接用于布爾類型數(shù)據(jù)的運算中,并且規(guī)定True>False。

在程序設(shè)計語言里,布爾值的產(chǎn)生與條件的判斷是聯(lián)系在一起的。關(guān)系運算符的兩邊可以是整型或?qū)嵭蛿?shù)據(jù),也可以是同為字符型或同為布爾型的數(shù)據(jù),運算的結(jié)果產(chǎn)生一個布爾值。關(guān)系運算表達的是一種二值條件,即要么成立,要么不成立,例如,-3>-2的取值是False,3>2的取值是True。

4)字符型

字符型用標準類型名CHAR來表示。字符型數(shù)據(jù)對象的值是系統(tǒng)內(nèi)定的字符集中的一個字符。字符型必須用單引號括起來,字母作為字符型時,大小寫是不等價的,并且字符型只允許單引號中有一個字符。

5)枚舉類型

枚舉類型是一個以標識符標識的有序整型常數(shù)的集合,這些常數(shù)是該類型變量可取的合法值。聲明枚舉類型的語法如下:

typetypeName=(val1,...,valn);

其中,typeName和vali是有效的標識符,typeName是枚舉類型,vali是枚舉量的標識符。例如:

typeTWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

這些枚舉量不能再定義為其他標識符。當用Ord函數(shù)分別對其取值時,將得到0、1、2、3、4、5、6。

在默認的情況下,枚舉值是從0開始的有序整數(shù),在實際編程的過程中,可以越過這種限制,根據(jù)需要指定標識符表中的值。例如:

typeMyColor=(red=2,green=6,white=7,black=9);

一些枚舉類型的值只有兩種可能的值,如下聲明:

typeSampleEnum=(val1,val2,val3=0);

SampleEnum中val1、val2、val3的Ord函數(shù)值分別為0、1、0,即Ord(val1)與Ord(val3)相同。

枚舉量的取值范圍為0~255。

6)子界類型

子界類型的聲明形式如下:

type

類型標識符=上界值..下界值;

其中,上、下界值是某種已定義的有序類型的值,上界值小于或等于下界值。例如:

type

TAge=18..60; //TAge是一個整型的子界類型

type

Caps='A'..'Z';//Caps是一個字符型的子界類型

子界類型變量的值是有序的,對其進行增/減量操作都要在其定義范圍內(nèi)。

2.構(gòu)造類型

1)數(shù)組類型

數(shù)組類型數(shù)據(jù)表示的是同種類型數(shù)據(jù)的集合。數(shù)組類型的數(shù)據(jù)是排列有序的,每個數(shù)據(jù)元素都有一個唯一的索引號。與集合類型不同的是,數(shù)組類型的數(shù)據(jù)可以重復。數(shù)組類型分為靜態(tài)數(shù)組和動態(tài)數(shù)組。

(1)靜態(tài)數(shù)組:在聲明時指定了數(shù)組的大小。

定義靜態(tài)數(shù)組的語法形式如下:

type

數(shù)組類型標識符號=array[indexType1,...,indexTypen]ofbaseType;

其中,indexType是有序類型,indexType通常是以Integer為子界的,也可以是其他有序類型的子界;baseType聲明元素的數(shù)據(jù)類型;數(shù)組由同一類型的數(shù)據(jù)元素組成。

例如:

type

Tarr1=Array[1..10]ofInteger;

Tarr2=Array[1..3,1..5]ofChar;

var

a:Tarr1; //聲明變量a是Tarr1類型數(shù)組

b:Tarr2; //聲明變量b是Tarr2類型數(shù)組

也可以聲明變量時直接定義數(shù)組的類型,如:

vara:Array[1..10]ofInteger;

數(shù)組元素的訪問是通過數(shù)組名后面加上方括號和下標值來訪問的,如a[1]:=10;。

(2)動態(tài)數(shù)組:在定義時并沒有確定數(shù)組的大小或長度,而是在訪問之前用SetLength過程為數(shù)組動態(tài)或重新分配其存儲空間。

定義動態(tài)數(shù)組的語法形式如下:

Var數(shù)組類型標識符:arrayofbaseType;

例如:

varDynArr:arrayofInteger; //聲明DynArr為元素是整型的動態(tài)數(shù)組

也可以先定義類型,再聲明變量,如:

typeTdynIntArr=arrayofinteger;

varDynArr:TdynIntArr;語句SetLength(DynIntArr,10);為動態(tài)數(shù)組DynIntArr分配10個元素的存儲空間,下標從0到9(動態(tài)數(shù)組的下標總是從0開始)。如要釋放動態(tài)數(shù)組占用的存儲空間,可以將nil賦值給該動態(tài)數(shù)組變量,或調(diào)用過程SetLength(DyIntArr,0)實現(xiàn)。

多維動態(tài)數(shù)組通過使用嵌套的“arrayof...”結(jié)構(gòu)實現(xiàn),例如:

typeTGrid=arrayofarrayofString;//定義二維動態(tài)字符串數(shù)組類型Tgrid

2)集合類型

格式:setofbaseType;

其中baseType是集合中元素的類型或值域。

ObjectPascal中規(guī)定了基類型只能是不超過256個有序值的集合,集合的元素的序數(shù)值必須介于0和255之間。例如:

type

TsetA=setofInteger; //錯誤

TsetB=setof255..300; //錯誤

TsetC=setofWideChar; //錯誤

TsetD=setof10..50; //正確

TsetE=setofchar; //正確

3)記錄類型

記錄類型描述一組不同類型的數(shù)據(jù)元素集合,每個數(shù)據(jù)元素稱為“域”。在定義一個記錄類型時,需要指定每個數(shù)據(jù)域的數(shù)據(jù)類型。定義記錄類型的語法如下:

type

記錄類型標識符=record

域1:類型1;

域2:類型2;

域n:類型n;

end;

例如:

type

TPerson=record

name:String[10];

id:String[15];

sex:Boolean;

age:Byte;

height,weight:Real;

end;

3.指針類型

指針類型的變量存儲的是內(nèi)存地址,利用指針可以靈活地訪問內(nèi)存中的數(shù)據(jù)。

指針類型的聲明格式如下:

type指針類型標識符=^數(shù)據(jù)類型;

指針可以指向任何數(shù)據(jù)類型。System和SysUtils單元聲明了許多常用的標準指針。

(1)指針取值運算符^:取指針(地址)所指向單元的數(shù)據(jù)。

(2)指針的關(guān)系運算符<、<=、>、>=、=、<>:判斷兩個同種類型的指針的位置大小。例如,P1、P2指針,P1在P2之前,則P2>=P1為True,P1<>P2為True。

(3)移動指針運算:調(diào)用過程Inc(指針類型變量,偏移量N),使指針依據(jù)其所指數(shù)據(jù)類型往后偏移N個數(shù)據(jù)單元;調(diào)用過程Dec(指針類型變量,偏移量N),使指針往前偏移N個數(shù)據(jù)單元。

4.字符串類型

和傳統(tǒng)Pascal語言不同,ObjectPascal語言專門提供了預定義的字符串數(shù)據(jù)類型,可以方便地表示字符串,實現(xiàn)存儲、處理字符串等操作。

字符串類型(String)主要包括表3-3中的字符串類型。

表3-3ObjectPascal語言中的字符串類型

WideString和AnsiString類似,只不過是基于WideChar字符集(Unicode字符集),用來存儲Unicode字符。ObjectPascal語言引入這種類型,主要是為了支持OLE編程。

可以用如下的方式來聲明相應的字符串變量:

Var

Str1:ShortString;

Str2:AnsiString;

Str2:WideString;但是在一般情況下,當我們聲明一個變量為字符串類型時使用String保留字。例如:

Var

Str:String;

缺省時,String類型就是AnsiString類型。在Delphi中,眾多組件的屬性使用了String類型,如每個組件的Caption屬性、Edit組件中的Text屬性等。同時,Delphi中封裝了眾多的String類型字符串的操作過程和函數(shù),因此應盡量使用String類型。

3.1.5運算符和優(yōu)先級

1.運算符

1)算術(shù)運算符

算術(shù)運算符如表3-4所示。

表3-4算

術(shù)

【例3.4】

3/4結(jié)果是實數(shù)0.75

3.0/4.0結(jié)果是實數(shù)0.75

3DIV4結(jié)果是整數(shù)0

3MOD4結(jié)果是整數(shù)3

6/2

結(jié)果是實數(shù)

3.02)邏輯運算符

表3-5邏

表3-6布爾運算規(guī)則表

3)關(guān)系運算符

表3-7關(guān)

【例3.5】

5>6 結(jié)果是False

8>6 結(jié)果是True

‘A’=‘a(chǎn)’ 結(jié)果是

False

3)類運算符

類運算符as和is對類或?qū)嵗M行操作。

2.優(yōu)先級

各種運算符的優(yōu)先級如表3-8所示。

表3-8各種運算符的優(yōu)先級

3.表達式

(1)算術(shù)表達式。算術(shù)表達式是由算術(shù)運算符連接常量、變量、函數(shù)的式子。算術(shù)表達式中各個運算符的次序為:()→函數(shù)→*,/,DIV,MOD→+,-。

(2)布爾表達式。Pascal提供給布爾表達式的基本操作有邏輯運算和關(guān)系運算。

3.2語

3.2.1賦值語句

賦值語句是最簡單的語句,其一般形式為:

變量:=表達式

賦值語句的作用是計算表達式的值,并賦給變量。對于任何一個變量必須首先賦值,然后才能引用,否則,未賦初值的變量將以一個隨機值參與運算。另外,賦值號兩邊的類型必須相同,但表達式值為整數(shù)時,它可自動化為實型后賦給該實型變量,即符合賦值相容。

【例3.5】關(guān)于賦值的例子——互換a、b變量的值。

vara,b:integer;

...

a:=3;b:=2;

a:=a+b;

b:=a-b;

a:=a-b3.2.2復合語句

復合語句是由若干語句組成的序列,語句之間用分號“;”隔開,并且以begin和end括起來,作為一條語句。復合語句的一般形式為:

begin

語句1;

語句2;

...

語句n;

end

【例3.6】變量值的交換。

programjiaohuan;

var

a,b,t:integer;

begin

a:=10;b:=20;

begin

t:=a;

a:=b;

b:=t;

end;

writeln(‘a(chǎn)=’,a,‘b=’,b){輸出a,b的值}

end;

end.3.2.3控制語句

ObjectPascal的控制語句有if和case兩個。

1.if語句

if語句是由一個布爾表達式和兩個供選擇的操作序列組成的。if語句運行時根據(jù)布爾表達式的值,選取其中之一的操作序列執(zhí)行。有兩種形式的if語句:

(1)if布爾表達式then語句;

(2)if布爾表達式then語句1

else語句2;

當布爾表達式的值為真時,執(zhí)行then后面的語句;值為假時有兩種情況:要么什么也不做,要么執(zhí)行else后面的語句。注意else前面沒有分號,因為分號是兩個語句之間的分隔符,而else并非語句。如果在該處添了分號,則在編譯的時候就會認為if語句到此結(jié)束,而把else當作另一句的開頭,輸出出錯信息。

【例3.7】求y=f(x),當x>0時,y=1;當x=0時,y=0;當x<0時,y=-1。

programlianxi;

varx,y:real;

begin

ifx>0theny:=1;

ifx=0theny:=0;

ifx<0theny:=-1;

writeln('y=',y);

end.【例3.8】當x>0時,計算x*x,并且輸出x和x*x。

programlianxi2;

varx,x1:real;

begin

readln('x=',x); {輸入x的值}

ifx>0then

begin

x1:=x*x;

writeln('x*x=',x1);

writeln('x=',x);

end;

else

writeln('error');

end.

2.case語句

case語句是由一個表達式和眾多可選擇的操作序列組成的。運行時,根據(jù)表達式的求值結(jié)果,在眾多的分支中選取一個分支執(zhí)行。其形式為:

case表達式of

常量1:語句1;

常量2:語句2;

...

常量n:語句n;

else語句n+1;{可選項}

end;表達式只能是順序類型(除了實型以外的簡單類型),其值必須唯一確定并且和表達式類型相同。case語句執(zhí)行和表達式值相匹配的case常數(shù)所指向的那條語句,如果沒有相匹配的值,則執(zhí)行else部分(如果有的話)或者什么也不做。在else前面的語句末尾有分號,這是和if語句不同的。每一個常量是一個或多個用逗號分開的、具有相同類型的常數(shù)值。

【例3.9】根據(jù)學生的成績給予相應的等級,對應關(guān)系如下:

90—100A

80—89B

60—79C

60以下D

programchengji;

var

s:real;

ch:char;

begin

write('inputthescore:');

readln(s);

if(s>=0)and(s<=100)then

casesdiv10of

10,9:ch:='B';

8:ch:ch='B';

7,6:ch='C';

elsech:='D';

end;

writeln(s,'--',ch);

end.3.2.4循環(huán)語句

1.while語句

while語句用于“當滿足某一條件時進行循環(huán)”的情況。while語句的語法格式為:

while布爾表達式do語句;

do后面的語句為循環(huán)體,布爾表達式起循環(huán)條件控制的作用。只要布爾表達式的值為True便重復地執(zhí)行循環(huán)體,直到該布爾表達式的值為False時才結(jié)束循環(huán)。也就是說while循環(huán)屬于當型循環(huán)。為了能使while重復終止,循環(huán)體中一定要有影響布爾表達式的操作,否則該循環(huán)就是一個死循環(huán)。

【例3.10】計算從0到某個數(shù)之間所有奇數(shù)的和。

programjishu;

varodds,limit,sum:integer;

begin

readln(limit);

sum:=0;

odds:=1;

whileodds<=limitdo

begin

sum:=sum+odds;

odds:=odds+2;

end;

writeln(sum);

end.

2.repeat語句

repeat語句用于“重復執(zhí)行循環(huán)體,一直到指定的條件為真時為止”。語法格式為:

repeat

語句1;

語句n;

until布爾表達式;

repeat重復基本上有和while重復一樣的描述循環(huán)計算的能力,但有一些不同:在repeat語句的結(jié)構(gòu)中,布爾表達式求值在計算操作之后;而在while語句中,布爾表達式求值在計算操作之前,也就是說repeat至少執(zhí)行一次循環(huán)體。while語句循環(huán)體語句只能是一條語句,因此,當重復動作包含多個語句時,要用begin和end使它變成一個復合語句。而repeat語句的保留字repeat和until能夠起語句括號的作用,可以包含多個語句而無須begin和end。repeat語句中,當布爾表達式為True時結(jié)束循環(huán);而while語句中,當表達式為False時才結(jié)束循環(huán)。當描述由計算操作后的情況確定重復是否繼續(xù)進行的計算時,通常用repeat語句描述。

【例3.11】用repeat語句編寫求s=1+2+3+...+100的程序片段為:

s:=0;

n:=1;

repeat

s:=s+n;

n:=n+1;

untiln>100;

3.for語句

for語句用來描述已知重復次數(shù)的循環(huán)結(jié)構(gòu)。for語句有兩種形式:

(1)for控制變量:=初值to終值do語句;

(2)for控制變量:=初值downto終值do語句;

第一種形式的for語句是遞增循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的值是否小于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自動將控制變量的值改為它的后繼值,并重新判斷是否小于或等于終值。當控制變量的值大于終值時,退出for循環(huán),執(zhí)行for語句之后的語句。第二種形式的for語句是遞減循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的值是否大于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自動將控制變量的值改為它的前趨值,并重新判斷是否大于或等于終值。當控制變量的值小于終值時,退出for循環(huán),執(zhí)行for語句之后的語句。for語句中的初值、終值、控制變量的數(shù)據(jù)都必須是順序類型。當初值和終值確定后,重復的次數(shù)就確定不變了,并且控制變量在重復語句內(nèi)不能施加任何賦值操作。

【例3.12】計算1+2+3+...+99+100的值。

programjia;

varn,sum:integer;

begin

sum:=0;

fori:=1to100do

sum:=sum+i;

writeln(sum);

end.以上程序還可以寫成如下形式:

programjia;

varn,sum:integer;

begin

sum:=0;

fori:=100downto1do

sum:=sum+i;

writeln(sum);

end. 3.3過

數(shù)

3.3.1過程

給某個語句序列組成的子程序賦予一個適當?shù)拿帧3绦蛑蟹彩切枰霈F(xiàn)這個語句序列的地方,都可以簡單地寫上子程序的名字。這種完成一個操作的子程序稱為過程;子程序的定義稱為過程說明。過程說明由過程首部和過程體組成,其形式如下:

procedure過程名(形式參數(shù)列表);{過程首部}

說明部分;

begin

語句1;

語句2;

...

語句n;

end;{語句結(jié)束}

end;{過程結(jié)束}

【例3.13】輸出兩個數(shù)中最大值的過程。

procedurelargest(a,b:integer);

begin

ifa>bthenwriteln(a)

elsewriteln(b);

end;

上面largest過程由兩個類型為整型的形式參數(shù)(a,b)向過程傳入兩個需要比較大小的數(shù)。

3.3.2函數(shù)

假如調(diào)用一個過程,結(jié)果只產(chǎn)生一個值,我們也可以把過程說明寫成函數(shù)說明。函數(shù)說明形式如下:

function函數(shù)名(形式參數(shù)列表):函數(shù)類型;{函數(shù)首部}

說明部分;

begin

語句1;

語句2;

...

語句n;

end;{語句結(jié)束}

end;{函數(shù)結(jié)束}過程執(zhí)行的結(jié)果可以通過變量返回一個或多個數(shù)據(jù)值,還可以完成一系列操作。概言之,過程執(zhí)行的結(jié)果是產(chǎn)生一個效果,而函數(shù)返回一個函數(shù)值。過程調(diào)用是一句獨立的語句,而函數(shù)的調(diào)用方式出現(xiàn)在表達式中。

【例3.14】計算|X|的函數(shù)。

functionjdz(x:real):real;

varz:integer;

begin

ifx>=0thenz:=x

elsez:=-x;

end;

jdz:=z;

end;第一行為函數(shù)首部,它指明函數(shù)名、函數(shù)形參信息和函數(shù)值的數(shù)據(jù)類型。如上面求x絕對值的函數(shù)首部,函數(shù)名是jdz;它有一個值參數(shù)x為實型;函數(shù)值的數(shù)據(jù)類型為實型。Pascal規(guī)定一個函數(shù)只能求出一個簡單值,所以函數(shù)值的類型只能是任何非結(jié)構(gòu)類型。

除函數(shù)首部和過程首部的句法略有差別外,函數(shù)體和過程體完全相同。但函數(shù)體中至少要有一條語句對函數(shù)名賦值,如函數(shù)jdz中有語句“jdz:=z”。函數(shù)每次求值至少要執(zhí)行這樣一條語句,為計算求得一個值,返回時就把這個值帶回調(diào)用的地方。

3.4ObjectPascal的面向?qū)ο缶幊袒A(chǔ)

3.4.1對象與類的定義

面向?qū)ο缶幊淌钱斍傲餍械木幊碳夹g(shù),它解決了傳統(tǒng)面向過程編程帶來的許多問題。面向過程編程所有的功能都包含在幾個代碼模塊中(常常是一個代碼模塊)。而使用OOP(面向?qū)ο蟪绦蛟O(shè)計)技術(shù),常常要使用許多代碼模塊,每個模塊都提供特定的功能,每個模塊都是獨立的。這種模塊編程方法提供了非常大的多樣性,大大增加了代碼的重用機會。

例如,我們可以將計算機程序考慮為一個房子,如果使用面向過程編程,這棟房子就是一個單元,如果你想為房子換個門窗,就必須替換整個單元,重新建造一棟房屋。如果使用OOP技術(shù),就可以在建造時將房屋設(shè)計成一個個獨立的模塊(對象)。如果需要換玻璃,只需要選擇門窗,調(diào)換玻璃即可;如果需要改變風格,只需要重新調(diào)整房屋的顏色和布局即可。這就是OOP編程的優(yōu)勢。

可以說,對象是OOP技術(shù)的關(guān)鍵。那么,什么是對象呢?

對象是OOP應用程序的一個重要組成部件,這個組成部件封裝了部分應用程序,這部分應用程序可以是幾個過程、數(shù)據(jù)或更抽象的實體。

簡單來說,對象是數(shù)據(jù)和代碼封裝的統(tǒng)一體,對象非常類似于前面介紹的記錄類型的變量。但與記錄類型不同的是,對象不但能夠包含數(shù)據(jù)成員(字段),還能夠包含函數(shù)和過程(方法),這些數(shù)據(jù)和方法被統(tǒng)稱為類的成員。

Delphi中的對象是從類型中創(chuàng)建的,就像前面的變量一樣。對象的類型在OOP中有一個特殊的名稱:類。對象與類是OOP中極其重要的兩個概念,要注意,類和對象是兩個完全不同的東西,它們之間的關(guān)系就像類型與變量的關(guān)系。

下面介紹對象中的幾個基本概念。

●字段:字段就是對象中的數(shù)據(jù)成員,它可以是一組任何Delphi支持的類型變量的集合,比如integer、string、數(shù)組等。字段用來標志對象的狀態(tài),因為同一個類的不同對象可能在屬性和字段中存儲了不同的值。在這一點上它與記錄類型的變量是一致的。

屬性:屬性和字段一樣,都可以訪問對象中包含的數(shù)據(jù)。字段和屬性都可以輸入,所以可以把信息存儲在字段和屬性中。同時,屬性與字段又是有差異的,屬性不能直接訪問數(shù)據(jù)。有些屬性是只讀的,只能查看它們的值,而不能改變它們。

●方法:方法是用于表示對象中的過程或函數(shù),它用于訪問對象的功能。與字段和屬性一樣,方法可以是共有的或私有的,從而根據(jù)需要限制外部的訪問。

●對象的生命周期:每個對象都有一個明確定義的生命周期,即從使用類定義開始一直到刪除它為止。

實際上,Delphi中幾乎所有東西都是對象,盡管有時它們處在Delphi完美的

溫馨提示

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

最新文檔

評論

0/150

提交評論