枚举类型与子界类型 谁教教我啊???

 我来答
abc19990827
2011-09-03 · TA获得超过479个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:168万
展开全部
枚举类型与子界类型
◆枚举类型
定义枚举类型的一般格式为:
type
枚举类型标识符=(标识符1,标识符2,……,标识符n);
var
枚举类型变量表:枚举类型标识符;
例如:
type
daystype=(sunday,tuesday,monday, wednesday,thursday,friday,saturday);
var
xq:daystype;
注:枚举类型标识符室我们自定义的枚举类型的名字,如xq。括号中的标识符称为枚举元素,枚举类型标识符跟等号。
枚举元素只能是标识符,而不能是数值常量或字符常量。
例如以下的定义是错误的:
type daystype=('sun','mon','tue','wed','thu','fri','sat')
  枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。
注意点:1、type在const与var之间;
2、枚举值只能是标识符;
3、每个枚举值只能在一个枚举类型定义中出现一次;
4、枚举值是有序的,序号为0~n-1;
例如:已经定义daystype
   ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday
  枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Turbo Pascal不允许直接读写枚举值,所以枚举值的输出常用case语句间接的输出。枚举值的输入,则要一一判断读入字符是否是枚举类型的标识符。若是才能赋给枚举变量,否则就会出错。
例如:枚举值的输出
case xq of
  sunday:write('sunday');
  monday:write('monday');
  tuesday:write('tuesday');
  wednesday:write('wednesday');
  thursday:write('thursday');
  friday:write('friday');
  saturday:write('saturday');
 end;

例1:输入今天是星期几的序号,给今天和明天赋枚举值,并输出明天是星期几。
算法:
1. 输入今天的序号;
2. 转换成今天的枚举值;
3. 求明天的枚举值;
4. 转换输出明天的枚举值;
program todaytomorrow (input,output);
var
today,tomorrow:( sunday,monday,tuesday,wednesday,thursday,friday,saturday);
number:integer;
begin
read(number);
case number of {给今天枚举赋值}
0:today:=sunday;
1:today:=monday;
2:today:=tuesday;
3:today:=wednesday;
4:today:=thursday;
5:today:=friday;
6:today:=saturday;
end;
if today=Saturday {求明天的值}
then tomorrow:=sunday
else tomorrow:=succ(today);
write('tomorrow is'); {输出明天的值}
case tomorrow of
sunday :writeln('sunday');
monday :writeln('monday');
tuesday :writeln('tuesday');
wednesday :writeln('wednesday');
thursday :writeln('thursday');
friday :writeln('friday');
saturday :writeln('saturday');
end;
end.
枚举类型也可以直接在var中定义:
如:
var
today,tomorrow:(sunday,monday,tuesday,wednesday,thursday,friday,saturday);
练习:1、下列枚举类型定义正确的是:
a、type a1=(‘a’, ‘b’, ‘c’ ,‘d’ ,‘e’); b、type a2=(1,2,3,4,5);
c、type a3=(class1,class2,class3); d、type a4=(red,blue,green,red);
2、变量说明如下:var s1,s2:(red,blue,green,yellow);
k:integer;
下面语句正确的是:
a、k:=succ(red); b、read(s1,s2); c、s2:=green; d、writeln(s1,s2);
◆子界类型
考试结束了,可以编写程序来计算全班同学的总分和平均数,有时输入的时候会把分数打错,比如分数一定是0~100之间的,可是你输入了655,这是非常明显的错误,如果计算机能告诉你错了,就好了。
Pascal可以通过之间类型变量来做到这一点。
如:type
fs=0..100;
子界类型是由整型、字符型、枚举型、布尔型的两个常量指定该类型的值域区间。
子界类型的形式:
        type 子界类型标识符=常量1..常量2;
  两个常量必须是同一种顺序类型。例如:a..b,要求a<=b
例如:
  type a=1..3; b='a'..'d';
一个子界类型继承它的常量类型的运算符和标准函数,常量类型相容的不同子界类型可以混合运算,可以赋值。可以将子界类型的定义和变量的定义结合在一起。
⑴Type
fs=10..200;
zm='a'.. 'p';
Var
a1,a2:fs;
ch:zm;
⑵定义子界类型:
type age=1..100;
month=1..12;
letter='a'.. 'r';
day=(sunday,monday,tuesday,wednesday,thursday,friday,saturday);
workday=monday..friday;
var
a1,a2:age;
ch:letter;
m:month;
d1,d2:workday;

子界类型的运算:
1. 对于基类型的各种运算都适用该子界类型。
2. 在同一程序,相同基类型的子界类型数据可以进行混合运算。

Type at=1..20; bt=1..200; ct=1..4000;
Var a:at; b:bt; c:ct;
以下语句是正确的: a:=10; b:=a+50; c:=a*b;
例:输入年、月,输出这个月有几天。
 program date;
  var
    month:1..12;
    days:28..31;
    year:1..10000;
 begin
  read(year,month); 1996 2
   case month of
    1,3,5,7,8,10,12:days:=31;
    2:if ((year mod 4=0)and(year mod 100<>0)or(year mod 400 =0)
     then days:=29
     else days:=28;
    4,6,9,11:days:=30;
   end;
  writeln(day);
 end.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式