【5.高级数据类型】1.枚举

1.枚举

枚举类型使用一组有限的标识符来表示一组连续的整数常数,其值是有限的。

1.1枚举类型的定义

枚举类型的定义格式:

type
    <类型名称>  = (<标识符1>, <标识符2>, ..., <标识符n>);

说明:

  1. type保留字用于定义高级数据类型

  2. <类型名称>是定义的枚举类型的名称

  3. <标识符>是枚举类型的数据元素,圆括号中是该数据类型所有的取值,也称为枚举常量

  4. 枚举常量只能是标识符,不能是其他的数据类型

  5. 同一枚举常量不允许出现在同一个枚举类型定义中,也不允许出现在不同的枚举类型定义中

如:

type
    Direction=(North,East,South,West);

1.2枚举类型变量的声明

对于已经定义的枚举类型,可以进行枚举变量的声明,声明的方法与其他类型的变量相同,如:

Var
    d: Direction;

1.3枚举类型的运算

枚举类型就是用一组枚举常量来表示一组连续的整数。枚举常量不能进行算术运算,但可以通过函数进行间接的算术运算,也可以进行关系运算。

1.枚举函数

枚举函数功能调用格式
Ord计算枚举序数Ord(枚举常量或枚举变量)
Pred前趋值Pred(枚举常量或枚举变量)
Succ后继值Succ(枚举常量或枚举变量)
Low第一个枚举常量Low(枚举类型名称)
High最后一个枚举常量High(枚举类型名称)

说明:

  1. 枚举类型定义时每个枚举常量都对应一个唯一的序数,称为枚举序数,默认情况下,第一个枚举常量的枚举序数为0,以此类推。

  2. 在定义枚举类型时,某个枚举常量的前一个枚举常量称为该枚举常量的前趋值,后一个称为后继值;第一个枚举常量没有前趋值,最后一个枚举常量没有后继值。

  3. 枚举常量之间不能直接进行算术运算,可以先转换为枚举序数后晋算术运算,结果类型为整型。

2.关系运算

枚举常量之间可以直接进行关系运算,运算依据其序数进行。

1.4枚举类型应用示例

示例:在界面中选择日期,然后显示星期几,点击前一天按钮显示前一天是星期几,点击后一天显示后一天是星期几,界面如下图:

 

代码如下:

implementation
​
type
  week = (sun, mon, tue, wed, thu, fri, sat);
​
{$R *.dfm}
​
var
  CurrentWeek: week;
​
// 将枚举类型转换为中文星期几
function CNDay(day: week): String;
begin
  case day of
    sun: CNDay := '星期日';
    mon: CNDay := '星期一';
    tue: CNDay := '星期二';
    wed: CNDay := '星期三';
    thu: CNDay := '星期四';
    fri: CNDay := '星期五';
    sat: CNDay := '星期六';
  end;
end;
​
// 将星期数值转换为枚举类型
function DayToWeek(day: Integer): week;
begin
  case day of
    1: DayToWeek := sun;
    2: DayToWeek := mon;
    3: DayToWeek := tue;
    4: DayToWeek := wed;
    5: DayToWeek := thu;
    6: DayToWeek := fri;
    7: DayToWeek := sat;
  end;
end;
​
// 计算前一天
function Before(day: week): week;
begin
  if Ord(day) = 0 then
    Before := sat
  else
    Before := pred(day);
end;
​
// 计算后一天
function After(day: week): week;
begin
  if Ord(day) = 6 then
    After := sun
  else
    After := succ(day);
end;
​
procedure TForm1.FormCreate(Sender: TObject);
begin
  DateTimePicker1.DateTime := Now;
  DateTimePicker1Change(Sender);
end;
​
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  // 选择的日期改变事件
  CurrentWeek := DayToWeek(DayOfWeek(DateTimePicker1.DateTime));
  Memo1.Lines.Add(DateToStr(DateTimePicker1.DateTime) + '是' + CNDay(CurrentWeek));
end;
​
procedure TForm1.Button1Click(Sender: TObject);
var
  p: week;
begin
  // 前一天按钮单击事件
  p := Before(CurrentWeek);
  Memo1.Lines.Add('前一天是' + CNDay(p));
end;
​
procedure TForm1.Button2Click(Sender: TObject);
var
  s: week;
begin
  // 后一天按钮单击事件
  s := After(CurrentWeek);
  Memo1.Lines.Add('后一天是' + CNDay(s));
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janeb1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值