版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章枚舉、子界與集合Delphi的數(shù)據(jù)類型分為標(biāo)準(zhǔn)類型和自定義類型,標(biāo)準(zhǔn)類型如整型、實(shí)型、字符型、布爾型。自定義類型分為枚舉、子界、集合、數(shù)組、記錄和文件。自定義類型,必須先定義類型,后定義變量。本章將介紹枚舉、子界和集合這三種自定義類型。5.1枚舉類型枚舉類型就是將有限的數(shù)據(jù)用標(biāo)識(shí)符的形式表現(xiàn)出來。例如表示彩旗的顏色、教師的職稱、每周的星期等等。這些數(shù)據(jù)的特點(diǎn)是表示不方便、不直觀。幸好Delphi提供的枚舉類型可以很好地解決這個(gè)問題。5.1.1枚舉類型的定義1.枚舉類型的類型定義枚舉類型的類型定義的語法格式如下:type<類型名稱>=(<標(biāo)識(shí)符1>,<標(biāo)識(shí)符2>…<標(biāo)識(shí)符n>);說明:(1)<類型名稱>,就是用戶子定義的枚舉類型的名稱。(2)<標(biāo)識(shí)符>就是該類型的常量元素,它的個(gè)數(shù)有限,枚舉類型是順序類型。(3)枚舉常量不允許重復(fù)出現(xiàn)在一個(gè)枚舉類型中,也不允許同一個(gè)枚舉常量出現(xiàn)在不同類型中。例如:下面的代碼就定義了一個(gè)具有7個(gè)枚舉常量的枚舉類型。typeweekday=(Sun,Mon,Tue,Wed,Thu,Fri,Sat)2.枚舉類型變量的定義枚舉類型變量的定義。枚舉類型的變量定義必須遵循先定義類型再定義變量的原則。例如:typeweekday=(Sun,Mon,Tue,Wed,Thu,Fri,Sat)varw1,w2,w3:weekday;a,b,c:integer;Delphi還允許把枚舉類型和變量定義放在一起,我們不建議這樣做。如:varw1,w2,w3:(sun,mon,tue,wed,thu,fri,sat);a,b,c:integer;5.1.2枚舉類型的運(yùn)算枚舉類型是順序類型可以使用順序類型的函數(shù)來操作枚舉類型,還可以使用關(guān)系運(yùn)算來比較枚舉值的大小。例如:(1)用pred函數(shù)求枚舉值的前導(dǎo):pred(mon)的值為sun;pred(sat)的值為fri;sun沒有前導(dǎo),等等。(2)用succ函數(shù)求枚舉值的后繼:succ(sun)的值為mon;succ(fri)的值為sat;sat沒有后繼,等等。(3)用ord函數(shù)求枚舉值的序號(hào):sun,mon,tue,wed,thu,fri,sat的序號(hào)分別為0~7。ord(mon)的值為1,等等。(4)用Low函數(shù)可以求得第一個(gè)枚舉值:low(weekday)的值為sun;//參數(shù)為類型low(w1)的值為sun;//參數(shù)是變量low(tue)的值為sun,等等。//參數(shù)是常量(5)用high函數(shù)可以求得最后一個(gè)枚舉值:用法類似函數(shù)low。(6)枚舉是順序類型,因此可以使用關(guān)系運(yùn)算比較枚舉值的大小:sun>mon的值為false;tue>=sun的值為true,等等。【例5-1】輸入今天星期幾(序號(hào)),輸出昨天星期幾和明天星期幾。分析:關(guān)于星期問題,很容易想到枚舉類型。因?yàn)樾瞧趲资怯邢薜膸讉€(gè)值。設(shè)計(jì)步驟如下:(1)添加組件,設(shè)計(jì)界面,如圖5-1所示。其中大的面板為Panel1,小的面板從上到下分別是Panel2和Panel3。編輯框?yàn)閑dit1。圖5-1程序界面(2)編寫程序代碼,如下:typeweekday=(sun,mon,tue,wed,thu,fri,sat);procedureTForm1.Button1Click(Sender:TObject);
labelen;
varw1:weekday;n:integer;beginn:=strtoint(edit1.Text);if(n>6)or(n<0)thenbeginedit1.Text:='錯(cuò)誤';//輸入的星期幾必須是0~6之間panel2.Caption:='';panel3.Caption:='';gotoen//輸入錯(cuò)誤,結(jié)束程序,轉(zhuǎn)到程序結(jié)尾
end;case(n-1+7)mod7of//昨天的序號(hào)ord(sun):panel2.Caption:='昨天星期天!';ord(mon):panel2.Caption:='昨天星期一!';ord(tue):panel2.Caption:='昨天星期二!';ord(wed):panel2.Caption:='昨天星期三!';ord(thu):panel2.Caption:='昨天星期四!';ord(fri):panel2.Caption:='昨天星期五!';ord(sat):panel2.Caption:='昨天星期六!';end;case(n+1)mod7of//明天的序號(hào)ord(sun):panel3.Caption:='明天星期天!';ord(mon):panel3.Caption:='明天星期一!';ord(tue):panel3.Caption:='明天星期二!';ord(wed):panel3.Caption:='明天星期三!';ord(thu):panel3.Caption:='明天星期四!';ord(fri):panel3.Caption:='明天星期五!';ord(sat):panel3.Caption:='明天星期六!';end;end;5.2子界類型在現(xiàn)實(shí)生活中很多數(shù)據(jù)的取值是有一定范圍的,例如每個(gè)月的天數(shù)在28~31天之間,月份在1~12之間。大寫英文字母在'A'~'Z'之間,等等。象這種類型的數(shù)據(jù)可以把它們定義為所謂的子界類型。定義為子界類型可以在一定范圍內(nèi)防止出錯(cuò)。子界類型也是順序類型。1.子界類型的定義枚舉子界類型的定義格式如下:type<類型名稱>=<常量1>..<常量2>;說明:(1)<類型名稱>是子界類型的名稱。(2)<常量1>是子界類型的下界,<常量2>是子界類型的上界,子界類型的上下界應(yīng)該屬于相同的有序類型,如:同為整型,或者同為字符型等等。(3)子界的上界大于或者等于下界。例如:typemonth=1..12;weekday=(sun,mon,tue,wed,thu,fri,sat);workday=mon..fri;2.子界類型變量的定義子界類型的變量定義必須遵循先定義類型再定義變量的規(guī)定。例如:typemonth=1..12;weekday=(sun,mon,tue,wed,thu,fri,sat);workday=mon..fri;varm1,m2:month;w1,w2:workday;也可以將類型定義和變量的定義放在一起,但是我們不主張這樣做。例如:varm1,m2:1..12;5.3集合類型集合是指具有相同性質(zhì)且可以區(qū)分的對(duì)象的全體。構(gòu)成集合的每個(gè)數(shù)據(jù)稱之為集合的元素。例如100以內(nèi)的全體素?cái)?shù),一班的全體男生,26個(gè)大寫的英文字母等等。集合具有以下幾個(gè)性質(zhì)。(1)集合中的元素是相異的。例如:集合[1,2,3,4,2]就應(yīng)該寫成[1,2,3,4]。(2)集合中的元素是沒有順序的。例如[1,2,3,4]和[2,4,1,3]表示同一個(gè)集合。(3)集合中的元素不能超過256個(gè)。5.3.1集合類型的定義1.集合類型的定義集合類型定義的格式如下:type<類型名稱>=setof<基類型>;說明:(1)<類型名稱>是用戶所定義的集合類型的名稱。(2)<基類型>是集合中元素的類型,可以是字符、布爾、枚舉、子界等類型,不能是整型、實(shí)型以及其他自定義類型。例如:typedays=setof28..31;ch=setof'A'..'Z';weekday=(sun,mon,tue,wed,thu,fri,sat);workday=setofweekday;2.集合類型變量的定義先定義集合類型,再定義集合類型的變量。例如:typedays=setof28..31;ch=setof'A'..'Z';weekday=(sun,mon,tue,wed,thu,fri,sat);workday=setofweekday;varch1,ch2:ch;wo1,wo2:workday;d1,d2:days;還可以將集合類型定義和集合類型變量定義放置在一起,但是不主張這樣做。例如:vard1,d2:setof28..31;ch1,ch2:setof'A'..'Z';w1,w2:setof(sun,mon,tue,wed,thu,fri,sat);5.3.2集合類型的取值和運(yùn)算1.集合類型的取值集合的取值稱之為集合的值。例如:typeweekday=(sun,mon,tue,wed,thu,fri,sat);workday=setofweekday;varwo1,wo2:workday;wo1的值可以是[],[sun],[sun,mon]等等。說明:(1)如果一個(gè)集合的基類型有n個(gè)值,則集合變量的取值有2個(gè)。(2)[]是空集合。(3)集合元素連續(xù)出現(xiàn),可以寫成子界形式,例如[sun..wed,sat]和[sun,mon,tue,wed,sat]表示同一個(gè)集合。2.集合的運(yùn)算集合的運(yùn)算有集合間的交、差、并運(yùn)算和集合間的關(guān)系運(yùn)算兩種類型。前者得到的是集合類型,或者得到的是布爾類型。(1)集合的并,設(shè)有集合A和B,A集合和B集合的并表示為A+B或者B+A,A+B的集合元素是由兩個(gè)集合中的所有元素組成且不允許重復(fù)。例如:[1,2,4]+[1,3,4,5]的值為[1,2,3,4,5]。(2)集合的交運(yùn)算,設(shè)有A和B兩個(gè)集合,A和B集合的交表示為A*B或者B*A,A*B的集合元素是A和B中所有的公共的元素。例如:[1,2,3]*[2,4,5,1]的值為[1,2]。(3)集合的差,設(shè)有A和B兩個(gè)集合,A和B集合的差表示為A-B,A-B的集合元素是所有屬于A集合而不屬于B集合的元素。例如:[1,2,3]-[3,4,5]的值為[1,2]。(4)相等運(yùn)算,判斷兩個(gè)集合是否相等。例如:[1,2,3]=[3,1,2]的值是true。(5)不相等運(yùn)算,判斷兩個(gè)集合是否不相等。例如[1,2,3]<>[2,3]的值是true。[1,2,3]<>[2,3,1]的值是false。(6)包含運(yùn)算,判斷前面一個(gè)集合是否包含后面那個(gè)集合。例如:[1,2,3]>=[1,2]的值是true。[1,2,3]>=[]的值是true。(7)被包含運(yùn)算,判斷前面一個(gè)集合是否被包含在后面這個(gè)集合中。例如:[1,2,3]<=[1,2,3]值為true。(8)元素與集合的運(yùn)算,判斷元素是否在集合中。例如:2in[1,2,3]的值為true。2in[]的值為false。【例5-2】用“篩法”求1~250以內(nèi)的所有素?cái)?shù)。所謂“篩”實(shí)際上就是集合,“篩法”求素?cái)?shù)的方法為:(1)首先把1~250放置在一個(gè)集合中,從集合中去掉最小的元素1。(2)將集合中2的倍數(shù)去掉(2本身除外)。(3)將集合中3的倍數(shù)去掉(3本身除外)。(4)用類似的方法繼續(xù)進(jìn)行…,將250的所有倍數(shù)去掉(250除外)。說明:實(shí)際上經(jīng)過前面的刪除集合元素的操作,后面根本用不著刪除250的倍數(shù)。設(shè)計(jì)步驟如下:(1)設(shè)計(jì)界面,如圖5-3所示。(2)編寫事件過程FormCreate,如下:typenum=setof1..250;varsushu:num;procedureTForm1.FormCreate(Sender:TObject);vari,m:integer;s:string;begins:='';sushu:=[1..250];sushu:=[1..250]-[1];fori:=2to250dobeginm:=2*i;//i乘以2是為了不去掉i本身
repeatsushu:=sushu-[m];//去掉i的倍數(shù)(i本身不去掉,因?yàn)樗撬財(cái)?shù))m:=m+i;//m始終是i的倍數(shù)untilm>=250;end;fori:=1to250doifiinsushu//如果i在sushu中,則i是素?cái)?shù)thens:=s+inttostr(i)+'';memo1.Lines.Add(s);//素?cái)?shù)輸出至memo1多行編輯框end;(3)運(yùn)行結(jié)果,如圖5-4所示?!纠?-3】輸入一行字符,求這行字符中英文字母、數(shù)字、空格和其他字符的個(gè)數(shù)。分析:我們可以事先定義3個(gè)集合,分別用于保存英文字母,數(shù)字和空格。然后將輸入的那行字符中的每個(gè)字符與這3個(gè)集合比較,如果該字符在某個(gè)集合中,則該字符就是這種類型的字符。步驟如下:(1)設(shè)計(jì)界面,如圖5-5所示。(2)編寫B(tài)utton1的OnClick事件過程如下:typeyingwen=setof#65..#122;shuzi=setof'0'..'9';kongge=setof''..'';procedureTForm1.Button1Click(Sender:TObject);varyw,sz,kg,qt,i,n:integer;s:string;yw1:yingwen;sz1:shuzi;kg1:kongge;begin
yw1:=['a'..'z','A'..'Z'];sz1:=['0'..'9'];kg1:=[''];yw:=0;sz:=0;kg:=0;qt:=0;n:=length(edit1.Text);s:=edit1.Text;fori:=1tondo
beginifs[i]inyw1thenyw:=yw+1;ifs[i]insz1thensz:=sz+1;ifs[i]inkg1thenkg:=kg+1;end;qt:=n-yw-sz-kg;panel2.Caption:='英文字母有'+inttostr(yw)+'個(gè)';panel3.Caption:='數(shù)字字符有'+inttostr(sz)+'個(gè)';panel4.Caption:='空格字符有'+inttostr(kg)+'個(gè)';panel5.Caption:='其它字符有'+inttostr(qt)+'個(gè)';end;(3)運(yùn)行程序,界面如圖5-6所示。說明:(1)千萬要注意s和s[i]是不一樣的,前者是字符串,后者是字符,若混淆將會(huì)出現(xiàn)類型錯(cuò)誤。(2)上面把集合類型yingwen定義為“yingwen=setof#65..#122;”,這里面包含了所有的大小寫英文字母,以及少量的其它字符。yingwen類型的集合變量yw1的初始值為['a'..'z','A'..'Z'],該初始集合中不再含有其它字符。5.4小結(jié)本章講述了枚舉、子界和集合。本章相對(duì)其它章節(jié)來說,顯得并不是那么重要。教師根據(jù)課時(shí)和進(jìn)程的實(shí)際情況可以適當(dāng)?shù)剡M(jìn)行刪減。習(xí)題1.以下正確的枚舉類型定義是:(A)typevowel=('a','e','u','o','i');(B)typenum=(1..3,4..9);(C)typecolor=(red,green,blue,white);(D)typerealtype=(3.6,7.6,5.3);2.若要用枚舉類型表示加、減、乘、除運(yùn)算,下列正確定義形式為:(A)typeop=(+,-,*,/);(B)typeop=('+','-','*','/');(C)typeop=(a+,b-,c*,d/);(D)typeop=(add,sub,mul,divi);3.設(shè)有如下類型定義和變量聲明:colors=(red,green,yellow,white);varcolor1,color2:colors;判斷下列語句是否正確,為什么?(A)colors:=red;(B)color1=yellow;(C)color2:=color1(D)color1:=’yellow’;4.設(shè)有如下類型定義和變量聲明:typeweekday=(sun,mon,tue,wed,thu,fri,sat);varw1,w2:weekday;執(zhí)行w1:=mon;w2:=sat;后,指出下面的函數(shù)值。(1)pred(mon)(2)pred(w1)(3)ord(tue)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國汽車車燈總成行業(yè)供應(yīng)趨勢(shì)預(yù)測(cè)及投資策略分析報(bào)告版
- 2024-2030年中國汽車調(diào)溫器零部件行業(yè)前景趨勢(shì)與投資潛力分析報(bào)告
- 2024-2030年中國汽車網(wǎng)站項(xiàng)目申請(qǐng)報(bào)告
- 2024-2030年中國汽車空濾器行業(yè)供需狀況發(fā)展戰(zhàn)略規(guī)劃分析報(bào)告
- 2024-2030年中國污水源熱泵行業(yè)競(jìng)爭(zhēng)狀況及投資發(fā)展前景分析報(bào)告
- 2024-2030年中國棉花加工機(jī)械行業(yè)發(fā)展現(xiàn)狀及未來投資前景分析報(bào)告
- 2024-2030年中國桉樹原木市場(chǎng)運(yùn)營狀況及投資前景預(yù)測(cè)報(bào)告
- 2024-2030年中國果品加工行業(yè)產(chǎn)銷量預(yù)測(cè)及未來五發(fā)展趨勢(shì)報(bào)告
- 2024-2030年中國木屑顆粒機(jī)項(xiàng)目可行性研究報(bào)告
- 2024-2030年中國晶質(zhì)石墨深加工行業(yè)發(fā)展策略及投資運(yùn)作模式分析報(bào)告
- 中國加速康復(fù)外科臨床實(shí)踐指南
- 智慧樹中國傳統(tǒng)繪畫賞析(廈門理工學(xué)院)章節(jié)測(cè)驗(yàn)答案
- 【音樂】古琴與中國傳統(tǒng)文化
- 【生態(tài)攝影】揭示攝影在記錄生態(tài)與環(huán)境的價(jià)值與作用
- 北京市市屬醫(yī)院建筑合理用能指南
- 水產(chǎn)養(yǎng)殖投資計(jì)劃書
- 風(fēng)電投資融資模式創(chuàng)新研究
- 體檢報(bào)告樣表
- 《外科護(hù)理》-關(guān)節(jié)脫位病人護(hù)理
- 資助辦主任述職報(bào)告
- 2023-2024學(xué)年黑龍江省黑河市名校九年級(jí)上冊(cè)數(shù)學(xué)期末達(dá)標(biāo)檢測(cè)模擬試題(含解析)
評(píng)論
0/150
提交評(píng)論