DELPHI中枚舉類型數據的介紹和使用方法


在看delphi程序的時候看到aa=(a,b,c,d);這樣的東西,還以為是數組,同事說是函數,呵呵,當然這兩個都不屑一擊,原來這樣式子是在聲明並付值一個枚舉類型的數據。下邊寫下來DELPHI中枚舉類型數據的介紹和使用方法。見笑。。
------------------------------------------------------
枚舉類型
  Pascal程序不僅用於數值處理,還更廣泛地用於處理非數值的數據。例如,性別、月份、星期幾、顏色、單位名、學歷、職業等。
1、枚舉類型的定義
格式: type 枚舉類型標識符=(標識符1,標識符2,…,標識符n)
2、枚舉類型數據特點
① 枚舉元素只能是標識符;
例如,下列類型定義是合法的:
   type days=(sun,mon,tue,wed,thu,fri,sat);
   colors=(red,yellow,blue,white,black,green);
   而下列類型定義是錯誤的:
   type colortype=('red','yellow','blue','white');
   numbers=(1,3,5,7,9);
定義枚舉類型時列出的所有枚舉元素構成了這種枚舉類型的值域(取值范圍)。

② 枚舉類型屬於順序類型
  根據定義類型時各枚舉元素的排列順序確定它們的序號,且序號從0開始。
例如,定義type days=(sun,mon,tue,wed,thu,fri,sat);
則, ord(sun)=0,ord(mon)=1,……,以此類推。
枚舉類型中的第一個元素無前趨,最后一個元素無后繼。
pred(sat)=fri; succ(sun)=mon; ord(sat)=6;

③ 同一個枚舉元素不能出現在兩個或兩個以上的枚舉類型定義中。如下列定義是錯誤的:
   type color1=(red,yellow,white);
     color2=(blue,red,black); 
因為red屬於枚舉類型color1和 color2
④ 枚舉類型變量只能進行賦值運算和關系運算,不能進行算術運算和邏輯運算。
  在枚舉元素比較時,實際上是對其序號的比較。
 例如定義如下:
   type days=(sun,mon,tue,wed,thu,fri,sat);
     colors=(red,yellow,blue,white,black,green);
   var color:colors;
     weekday:days;
 則下面語句是合法的: weekday:=mon;
   if weekday=sun then write('rest');
 而下面語句是不合法的:
mon:=1; 錯把枚舉值當成變量名;
weekday:=blue; 枚舉值blue不屬於枚舉變量weekday的值域;
read(color); 枚舉類型變量 不能用讀語句進行賦值;
write(weekday); writeln(blue);不能通過寫語句輸出枚舉類型的變量值和枚舉值。

⑤ 可以把變量的說明與類型的定義合並在一起,如:
  var holiday,workday:(sun,mon,tue,wed,thu,fri,sat);
    color:(red,yellow,blue,white,black,green);
對枚舉數據的輸入與輸出可通過間接方式進行。輸入時,一般可輸入一個代碼,通過程序進行轉換,輸出時,也只是打印出與枚舉元素相對應的字符串。這在后面的例題中將有使用示例。
二、枚舉類型的應用
例1、輸入今天是星期幾的序號,輸出明天是星期幾的英文單詞(星期天序號為0)。
  type weekday=(sun,mon,tue,wed,thu,fri,sat);
   var i : integer;
     today,tomorrow : weekday;
  begin
   writeln('What date is it'); readln(i);
   case i of { 根據輸入轉換成枚舉型 }
    0:today:=sun;
    1:today:=mon;
    2:today:=tue;
    3:today:=wed;
    4:today:=thu;
    5:today:=fri;
    6:today:=sat;
   end;
if (today=sat) then tomorrow:=sun else tomorrow:=succ(today);
   write('The tomorrow is ');
   case tomorrow of
    sun:writeln('sunday');
    mon:writeln('monday');
    tue:writeln('tuesday');
    wed:writeln('wednesay');
    thu:writeln('thursday');
    fri:writeln('friday');
    sat:writeln('saturday');
   end;
  end.
枚舉類型是一種有序類型,所以枚舉類型的變量可以作為循環變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM