枚举类型与子界类型 谁教教我啊???
作者&投稿:敏药 (若有异议请与网页底部的电邮联系)
虽然很鄙视这类问题----完全可以翻书
但很高兴还有人在学Delphi
以下说明按数据类型的复杂度从易到难
数组是连续的同类型数据在内存中的连续顺序分配,占用内存大小为 数据类型大小x数组个数
数据类型大小可用 sizeof()函数获取, Delphi/Pascal的数组可以指定开始下标这一点同其它语言不同。所以Delphi 中 用Low(x) High(x) 来取数组的开始下标与结束下标
子界 是一种数据类型,本身不占用任何内存。可以利用Delphi强类型特点用子界实现数据越界检查与限制,子界也是有序类型可以使用 Ord() 函数
集合 是一种类似位操作的的数据类型,特点是可以支持集合运算,常用于多值组合或多属性配置
枚举 同子界很相似,默认是一个从 0 开始的子界,而且子界各成员都有别名,枚举是有序类型,可以用Ord(),就单个枚举成员来说相当于你const 了一个整型常量。
◆枚举类型
定义枚举类型的一般格式为:
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.
牛呢艾旭: 虽然很鄙视这类问题----完全可以翻书 但很高兴还有人在学Delphi 以下说明按数据类型的复杂度从易到难 数组是连续的同类型数据在内存中的连续顺序分配,占用内存大小为 数据类型大小x数组个数 数据类型大小可用 sizeof()函数获取, ...
德宏傣族景颇族自治州18398497277: 枚举类型的用法? - ?
牛呢艾旭: C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. 举个例子来说明一吧,为了让大家更明白一点,...
德宏傣族景颇族自治州18398497277: 枚举类型是什么意思?
牛呢艾旭: 一般的定义方式如下: enum enum_type_name { ENUM_CONST_1, ENUM_CONST_2, ... ENUM_CONST_n } enum_variable_name; 注意:enum_type_name 是自定义的一种数据数据类型名,而enum_variable_name 为 enum_type_name类...
德宏傣族景颇族自治州18398497277: C# 什么是枚举类型? - ?
牛呢艾旭: 浅谈C#中的枚举枚举类型是一种的值类型,它用于声明一组命名的常数. (1)枚举的声明:枚举声明用于声明新的枚举类型. 访问修辞符 enum 枚举名:基础类型 { 枚举成员 } 基础类型必须能够表示该枚举中定义的所有枚举数值.枚举声明可以...
德宏傣族景颇族自治州18398497277: 什么是c语言里面的枚举类型 - ?
牛呢艾旭: 枚举是用标识符表示的整型常数集合,这些常数是该类型变量可取的合法值,这些标识符称为枚举常量. 定义:enum<枚举名>{<标识符1>,<标识符2>...<标识符n>}; 比如enum weekday{sun,mon,tue}; 就表示定义了3个枚举型常量,默认他们...
德宏傣族景颇族自治州18398497277: 在c中,枚举类型是什么意思 - ?
牛呢艾旭: 就是你声明的这个枚举变量的值,只能取其中的东西,比如: enum {monday,tuesday,wednesday,thursday,friday} weekday; 那weekday这个变脸的值只能是{}中的值.(他们分别对应数字0,1,2,3,4,因为枚举型变量也是整型)
德宏傣族景颇族自治州18398497277: 什么叫枚举类型,还有什么类型? - ?
牛呢艾旭: 很高兴能为您解答:枚举型就是将所有的通过方正的排布方便计算数目.还有很多其他的类型.列表型:通过列表格的方法观察.树状图型:通过画树状图理清.希望对您有帮助~ 望采纳
德宏傣族景颇族自治州18398497277: c语言中的布尔类型、枚举类型是个什么概念? - ?
牛呢艾旭: 布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假". 布尔常量 在Pascal语言中"真"用ture表示,"假"用False表示.所以布尔类型只有TRUE与FALSE两个常量. C语言或C++的一种构造类型,它用于声明一组...
德宏傣族景颇族自治州18398497277: Java语言中的枚举类型如何使用? - ?
牛呢艾旭: Java语言中的枚举类型的使用方法如下: 用法一:常量;public enum Color {RED, GREEN, BLANK, YELLOW } 用法二:switch; enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() ...
德宏傣族景颇族自治州18398497277: c语言解释一下枚举类型 - ?
牛呢艾旭: 如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始, 顺 次赋给标识符0, 1, 2, ....但当枚举中的某个成员赋值后, 其后的成员按依次 加1的规则确定其值.例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3.enum ...