枚舉子界集合(pascal程序語言基礎(chǔ)).ppt
《枚舉子界集合(pascal程序語言基礎(chǔ)).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《枚舉子界集合(pascal程序語言基礎(chǔ)).ppt(46頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
,枚舉、子界、集合,,pascal語言中的數(shù)據(jù)類型,目前為止我們所用到的數(shù)據(jù)類型包括:,整型(integerlongint……)實(shí)型(realdouble……)布爾型(boolean)字符型(char),以上數(shù)據(jù)類型是pascal規(guī)定的標(biāo)準(zhǔn)數(shù)據(jù)類型,只要用相應(yīng)的關(guān)鍵字,pascal編譯系統(tǒng)就能識別并按這些類型來處理,pascal語言中的數(shù)據(jù)類型,除以上標(biāo)準(zhǔn)數(shù)據(jù)類型之外,pascal還允許用戶自定義數(shù)據(jù)類型,變量與類型:,vari:integer;r:real;,其表示的類型含義為:,確定一個(gè)值域,即取值范圍(i變量為整型,表示i只能在整型數(shù)規(guī)定的-32768—32767這個(gè)范圍內(nèi)取值,超過此范圍就會(huì)出錯(cuò)確定數(shù)據(jù)的存儲(chǔ)方式(整型數(shù)據(jù)和實(shí)型數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)方式是不同的)規(guī)定的相應(yīng)運(yùn)算種類(例如實(shí)型不能進(jìn)行DIV,MOD運(yùn)算),算法+數(shù)據(jù)結(jié)構(gòu)=程序,即:不同的數(shù)據(jù)類型所使用的操作方法(算法)是不同的。,因此,針對具體的問題選擇相應(yīng)的數(shù)據(jù)類型是程序設(shè)計(jì)的關(guān)鍵,枚舉類型,為什么要使用枚舉類型:,如性別,月份,顏色,星期幾等一系列非數(shù)值問題時(shí),我們應(yīng)當(dāng)怎樣處理?,例如:使變量sex為整型變量,ifsex=1thenwriteln(‘heisaman’)elsewriteln(‘sheisawomen’);,缺點(diǎn):不直觀,可讀性差,ifsex=manthenwriteln(‘heisaman’)elsewriteln(‘sheisawomen’);,如果寫成:,事先考慮到某一變量盡可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每一個(gè)值,這種方法稱作枚舉方法,這種方法定義的類型稱為枚舉類型。,枚舉類型,枚舉類型的定義:,type枚舉類型標(biāo)識符=(標(biāo)識符1,標(biāo)識符2…………);,typecolor=(red,yellow,blue,white,black);xingbie=(man,women);,例如:定義顏色的枚舉類型和性別的枚舉類型,枚舉類型,枚舉類型的應(yīng)用舉例:,programex1;typesextype=(man,woman);varsex:sextype;beginsex:=women;ifsex=manthenwriteln(‘heisaman’)elsewriteln(‘heisawomen’);end.,programex2;typecolortype=(red,yellow,blue);varcolor:colortype;begincolor=red;casecolorofred:writeln(‘thecolorisred’);yellow:writeln(‘thecolorisyellow’);blue:writeln(‘thecolorisblue’);end;end.,枚舉類型,枚舉類型的數(shù)據(jù)性質(zhì):枚舉元素只能是標(biāo)識符,而不能是數(shù)字常量和字符常量,例如下面的定義是錯(cuò)誤的,typecolortpye=(‘red’,‘yellow’,‘blue’);numtype=(1,2,3,4,5);,類型標(biāo)識符和枚舉元素不得使用pascal中的保留字和關(guān)鍵字,否則編譯時(shí)將出錯(cuò)誤,同一個(gè)枚舉元素不能出現(xiàn)在兩個(gè)或兩個(gè)以上的枚舉類型定義中,typecolor1=(red,yellow,blue);color2=(red,black,white);是不允許的,因?yàn)閞ed同屬于了兩個(gè)枚舉類型。,不要把作為枚舉元素的標(biāo)識符視為變量名,它是不能被賦值的,下面的賦值是錯(cuò)誤的,Red=‘red’woman=0,枚舉類型,枚舉類型屬于順序類型。根據(jù)定義類型時(shí)個(gè)枚舉元素的排列順序確定它們的序號。(前面的序號小,從0開始)例如:,typecolortype=(red,yellow,blue,white,black);則ord(red)=0succ(red)=yellowpred(black)=white,枚舉類型,枚舉型數(shù)據(jù)只能進(jìn)行關(guān)系運(yùn)算(=,,,>=)不能進(jìn)行算術(shù)運(yùn)算(+,-,*……)和邏輯運(yùn)算(and,or),枚舉變量的值只能用賦值語句來獲得,不能對枚舉變量進(jìn)行讀寫。如下語句都是不合法的:,typecolortype=(red,yellow,blue,white,black);Varcolor:colortype;Beginread(color);或write(color);,總之:枚舉類型的數(shù)據(jù)不能用read和write語句進(jìn)行讀寫,枚舉變量可以作為循環(huán)變量。枚舉元素可以作為循環(huán)的初值和終值。,如:forcolor:=redtoblackdo共執(zhí)行5次循環(huán)(color=red->yellow->blue->white->black),枚舉類型,教材例6-1的分析,如:forcolor:=redtoblackdo共執(zhí)行5次循環(huán)(color=red->yellow->blue->white->black),枚舉類型的應(yīng)用,Fori:=appletoorangedoforj:=succ(i)tobananadofork:=succ(j)dopineappledo可改成:Fori:=appletopineappledoforj:=appletopineappledoifijthenfork:=appletopineappledoif(ik)and(jk)thenbegin…,枚舉類型的應(yīng)用例6-1解法2,constft:array[1..4]ofstring=(蘋果,橙子,香蕉,菠蘿);vari,j,k,l:0..1;beginfori:=0to1doforj:=0to1dofork:=0to1doforl:=0to1doifi+j+k+l=3thenbeginifi=1thenwrite(ft[1]);ifj=1thenwrite(ft[2]);ifk=1thenwrite(ft[3]);ifl=1thenwrite(ft[4]);writeln;end;end.,課堂練習(xí),取球問題:求從紅、黃、藍(lán)、白、黑五種顏色的球中,取三種顏色的球的可能的取法,用red、yellow、blue、white、black描述三種上顏色的所有可能的取法。輸入格式:無輸出格式:輸出每種取法的序號(占4個(gè)字符位,左對齊)和三種顏色(每種顏色占10個(gè)字符位,左對齊)輸出樣例:RedyellowblueRedyellowwhite…,子界類型,實(shí)際問題:,一年中有多少個(gè)月?每一個(gè)月最多有多少天?一個(gè)班最多有多少個(gè)人?,integer類型所表示的范圍是多少?,如果我們能在程序中對所有的變量的值域(取值范圍)作具體規(guī)定的話,就便于檢查出那些不合法的數(shù)據(jù),例如一月中的日期只能是1-31之間的一個(gè)數(shù)值,由于誤操作輸入了32,pascal就能指出這個(gè)錯(cuò)誤,不需要人工的干預(yù).,子界類型,子界類型:規(guī)定的值域的上界和下界及其類型的一種數(shù)據(jù)類型,子界類型的定義:,Typedays=1..31;Varsomeday:days,定義了一個(gè)days類型的變量somedaysomeday變量值的數(shù)據(jù)類型(基類型)為整型someday的值只能在1——31范圍,子界類型,子界類型定義說明:,上界和下界必須是順序類型,且為同一順序類型。也就是說整型,字符型,布爾型,枚舉型數(shù)據(jù)都可以作為上、下界。并且上界序號必須大于下界序號。,Typeage=0.5..100letter1=0..’z’letter2=‘a(chǎn)’..’z’letter3=‘z’..’a’,以上定義的子界類型中哪些正確、哪些錯(cuò)誤?為什么?,子界類型的上、下界確定了子界類型的基類型。,由于1和31都是屬整型數(shù)據(jù),因此days類型的基類型為整型;someday變量的值為整型其值范圍在1—31之間,Typedays=1..31;Varsomeday:days,子界類型,如果子界類型的基類型為枚舉型,則應(yīng)在類型中先定義枚舉類型,typeweek=(mon,tue,wed,thu,fri,sat,sun);studyday=mon..fri;varday1:studyday;,day1變量的值只能取mon,tue,wed,thu,fri之一,子界類型,子界類型的作用:,在程序設(shè)計(jì)中對數(shù)據(jù)“界”的檢查是很重要的一項(xiàng)工作而又常常被人忽略。定義子界類型后,就可以把界的檢查工作交給編譯器完成,不需要人工進(jìn)行。節(jié)省內(nèi)存空間,增強(qiáng)程序的可讀性。,子界類型,子界類型的運(yùn)算規(guī)則:,凡可以使用子界類型的基類型數(shù)據(jù)之處,均可以使用子界類型的數(shù)據(jù)。,typer=1..10;Varradius:r;,問sqr(radius)合法嗎?,對基類型的運(yùn)算規(guī)則同樣適用于該類型的子界類型。,Typeperson=1..100;Vartotal:person;問:totaldiv100totalmod100合法嗎?,基類型相同的不同子界類型數(shù)據(jù),可以出現(xiàn)在同一個(gè)表達(dá)式內(nèi),即混合運(yùn)算,typea=1..100;b=1..1000;c=1..500;varx:a;y:b;z:c;t:integer;beginread(x,y,z);t:=x+y+z;writeln(‘t=‘,t);end.,輸入:50100150,問:將紅色標(biāo)出部分改為z:=x+y+z;合法嗎?,子界類型,結(jié)論:在上例中當(dāng)然也可以將表達(dá)式的值賦給一個(gè)子界類型變量,因?yàn)楸磉_(dá)式中的幾個(gè)子界類型的變量的基類型都是整型,但是要注意:運(yùn)算結(jié)果不能超出它在類型說明中定義的范圍,,,,,,上例中如果將紅色標(biāo)出部分改為x:=x+y+z;合法嗎?,X為50,y為100,z為150,將運(yùn)算結(jié)果x+y+z的值300賦給x,這超出了x的取值范圍(0..100),就會(huì)出錯(cuò)。,子界類型,programcas;varc:char;beginreadln(c);casecof0..9:writeln(digits);A..Z:writeln(UPPER-CASELETTERS);a..z:writeln(lower-caseletters);elsewriteln(specialcharactors);end;end.,可以利用子界類型作為情況語句標(biāo)號,對數(shù)字,大小寫字母和特殊字符進(jìn)行判別的程序,,集合,1.集合的定義2.集合的表示3.集合的運(yùn)算,集合(數(shù)學(xué)),集合的概念:某些具有共性,又相互區(qū)別的對象匯集在一起所構(gòu)成的整體,0—20之間的所有素?cái)?shù);{共性:小于20的素?cái)?shù),相互區(qū)別:各元素有不同的值}26個(gè)小寫英文字母;(共性:小寫英文字母,相互區(qū)別:各自的寫法和讀法都不同。,集合的表示方法(數(shù)學(xué)),1.枚舉法:將集合中的所有元素列舉出來,對于上例1可寫成:,元素,{2,3,5,7,11,13,17,19},,,集合,集合的特點(diǎn):1.同一性;2.無序性;3.唯一性,集合的特征:,無序性:,{1,3,5,7}={1,5,3,7},唯一性:,{1,3,5,7}={1,5,3,3,7},元素與集合的關(guān)系,2.不屬于,5∈{2,3,5,7,11,13,17,19},1.屬于,一個(gè)元素可以屬于和不屬于某一個(gè)集合,分別用∈和∈表示,5∈{2,4,6,8,10,12,14,16},,,集合和集合間的關(guān)系,1.相等關(guān)系,兩個(gè)集合的成員完全相同時(shí),稱這兩個(gè)集合相等。,{2,3,5,7}={2,3,5,7},{2,3,5,7}={2,5,3,7},{2,3,5,7}={2,5,3,3,7},集合和集合間的關(guān)系,集A的所有成員都是集B的所有成員時(shí),稱B蘊(yùn)含A,或稱A是B的子集合,,2.蘊(yùn)涵關(guān)系,{2,3}{2,3,5,7},{2,3,5,7}{2,3,5,7},{2,3,9}{2,3,5,7},問,集合和集合間的關(guān)系,3.空集:,空集是任何集合的子集,4.冪集:一個(gè)集合的所有子集所組成的集合稱為此集合的冪集。,{1,2,3}的冪集是:,{{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}},集合的運(yùn)算,1.交運(yùn)算,A∩B,{1,2,3}∩{2,3,5,7}={2,3},集A和集B共有的成員所組成的集合,集合的運(yùn)算,1.并運(yùn)算,A∪B,{2,3,5}∪{5,7}={2,3,5,7},集A和集B的所有成員并起來(重復(fù)的只算一個(gè))所組成的一個(gè)新集合,集合的運(yùn)算,1.差運(yùn)算,A-B,{2,3,5}-{5,7}={2,3},集A的成員去掉集B中也包含的成員所組成的一個(gè)新集合;(相當(dāng)于A-(A∩B)),,,A,B,,,,,,,,,,,,,,,1.集合的定義:,基類型:表示集合中元素的類型,可以是整數(shù)類型的某一子界,字符型,布爾型,枚舉型。注意:pascal規(guī)定一個(gè)集合里的元素必須是同一數(shù)據(jù)類型。,Pascal定義集合類型的一般形式:,=setof<基類型>,2、在pascal中怎么表示和使用集合,typeint1=0..255;weekday=(sun,mon,tue,wed,thu,fri,sat,sun);weekset=setofweekday;intset=setofint1varwvar:weekset;ivar:intset;或?qū)懗蓈arwvar:setofweekday;ivar:setofint1;,規(guī)則:1.pascal規(guī)定一個(gè)集合的元素個(gè)數(shù)不能超過256個(gè);(也就是說基類型所表示的值(整數(shù))的范圍不能超過256)2.基類型的序數(shù)值必須在0—255的范圍內(nèi)。,思考typeint0=setofinteger;int1=setof-20..100;int2=setof50..300;int3=[1,sqrt(4),sqrt(4)+1,sqr(4)],在pascal中使用集合的一些規(guī)則:,1.表示集合的符號是[]。例如:[2,3]2.集合的值放在一對[]中,各元素用“,”隔開。3.集合內(nèi)的值與[]內(nèi)元素出現(xiàn)的次序無關(guān)。[2,3]=[3,2]4.集合中的同一元素的重復(fù)出現(xiàn)對集合的值沒有影響。[2,2,3]=[2,3]5.“[]”用來表示空集。6.集合中,如果元素的值是連續(xù)的,則可用“..”來表示。[1,2,3,4,5,7,8,9]=[1..5,7..9]7.每個(gè)元素可以用基類型的表達(dá)式來表示。[1,succ(4),ord(‘a(chǎn)’),pred(4)],集合的運(yùn)算的數(shù)學(xué)符號和pascal符號對照表,3、集合類型的運(yùn)算規(guī)則,集合變量的讀入:,只能通過賦值語句給集合變量賦值,不能用read語句給集合變量賦值。(跟枚舉類型變量一樣),color:=[];color2:=[red,black];,集合并,交,差運(yùn)算:,+,*,-,A:=[1,3,4];B:=[1,2,4];A+B=?A-B=?A*B=?,集合的關(guān)系運(yùn)算:,=,=,,[1,3,5]<=[1,5][1,3,5]<=[1,5,3,7][]<=[1,5,3],集合元素的測試:(in),判斷一個(gè)元素是否在某個(gè)集合當(dāng)中。,1in[1,5,3,7]7in[1,5,3],集合的輸出:不能直接用write語句對集合變量進(jìn)行輸出,4、集合例題,1.若a是[‘a(chǎn)’,’c’,’f’,’u’],b是[‘c’,’d’,’e’,’f’,’g’,’h’],c是[‘f’,’m’,’p’],計(jì)算下列各語句中x的值。(1)x:=a+b(2)x:=(c-a)*b(3)x:=a+a*a-a,2.若a是[‘k’,’l’,’m’,’n’],b是[‘l’,’m’,’n’,’k’],c是[‘i’..’p’],d是[],e是[‘k’],計(jì)算下列布爾表達(dá)式的值(判斷哪些是錯(cuò)的)。c=b(4)a=b(5)bc(6)’I’inc,1.輸入一段句子并以“.”結(jié)尾,統(tǒng)計(jì)元音字母和輔音字母出現(xiàn)的次數(shù)。Input:HelloKitty.Output:yuan=3fu=7,2.用集合篩選法1求自然數(shù)M與N之間(小于256)的素?cái)?shù)。程序文件:(gray6e1.pas)Input:(gray6e1.in)1020Output:(gray6e1.out)11131719,編程練習(xí),3.任意給出一個(gè)正整數(shù)N,找出一個(gè)正整數(shù)M,使得N*M的值的數(shù)字由0、1……、C(C<=9)組成,且這些數(shù)字至少出現(xiàn)一次。編寫程序在整數(shù)的范圍內(nèi)找出滿足條件的最小M。若沒有信息,則輸出‘NOFOUND‘。程序文件:(test.pas)Input:(test.in)C=3N=65C=3N=10C=8N=125Output:(test.out)65*48=321010*123=1230‘NOFOUND’,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 枚舉 集合 pascal 程序語言 基礎(chǔ)
鏈接地址:http://m.appdesigncorp.com/p-12184956.html