第十一课 枚举、子界、集合及记录类型
pascal基础知识

PASCAL语言程序设计第一部分语言基础知识一、程序结构:例1.1计算半径为R的圆面积S{程序首部} program Area;{说明部分——数据描述}const pi=3.14159;{常量定义}var s,r:real;{变量定义}{执行部分——程序体}Beginreadln(r);{读入数据给r}s:=pi*sqr(r);{求圆的面积}writeln('s=',s);{在屏幕上输出面积}end.上述程序第一行称为程序首部。
其中用花括号(注释可以用{ }或(* *)来表示)括起来的内容是注释,注释除了给人看,增加程序的可读性外,对程序编译和运行不起作用。
一个程序可以包含多个出现在不同处注释,亦可无注释。
程序第二行是常量说明,程序第三行是变量说明。
程序从begin到end 都是执行(语句)部分(1)程序首部例1.1的第一行称为程序首部。
program是保留字,接着是程序名(由你依据“标示符”规则自行定义),最后以分号表示程序首部结束,下面是程序主体的开始。
程序首部在一个Turbo Pascal(仅在Turbo Pascal中有效)程序中并非必须出现,它是可选的。
写上它仅起了文档作用。
因此,在时间有限的情况下,如果用Turbo Pascal编程完全可以省略程序首部。
(2)程序体a.说明部分说明部分用于定义和说明程序中用到的数据,由单元说明、标号说明、常量说明、类型说明、变量说明、函数或过程说明组成,并且这些数据的说明次序必须按照以上次序。
但是一个简单的Turbo Pascal程序也可以不包含说明部分,也就是说说明部分是可选的。
b.执行部分执行部分描述了程序要执行的操作。
它必须以一个Turbo Pascal保留字begin开始,以保留字end后跟句点结束,其间是一些执行具体操作的语句,并且以分号作为语句之间的分隔符。
begin 和end必须成对出现,这是一个Turbo Pascal 程序所必须有的。
第二讲 PASCAL语言基础知识

3.字符型 (char) 两个单引号之间的字符(ASCII码) 只允许单引号之间有一个字符,否则就是字符串(string) 如:'A', '1', ':'分别表示字符A,数字字符1,冒号; '''', ' '分别表示字符''和空格
4.布尔型
(boolean)
true(逻辑真) false(逻辑假)
程序首部 说明部分
执行部分
程序体
四、PASCAL字符与符号(详见蓝书P20-21)
1.基本符号: 基本符号: 基本符号 (1)字母 A~Z,a~z (2)数字 0~9 (3)特殊符号 + <= >= := .
* ( ,
/ ) :
= [ ;
<> ] ’
< { ^
> } ..
2.保留字: 保留字: 保留字 (1)程序、函数、过程的符号 program,function,procedure (2)说明部分的专用定义符号 array,const,file,label,packed,var,record,set,type,of (3)语句专用符号 case,do,downto,else,for,goto,if,repeat,then,to,until,while, with,forward (4)运算符号 div,in,mod,not,and,or (5)分隔符号 begin,end (6)空指针常量 nil
七、变量(var)
1.变量:指在程序执行过程中其值可以改变的数据。 必须先说明再使用! 2.变量说明:出现在说明部分,每个变量说明均以分号结束。语法格式: var <变量标识符列表>:<类型>; ... <变量标识符列表>:<类型>;
Delphi之第四讲自定义数据类型

Delphi之第四讲⾃定义数据类型 为什么要使⽤⾃定义数据类型呢?原因很简单,在现实⽣活中,⽐如⼀个学⽣他有姓名,学号,年龄,⾝⾼,出⽣年⽉,⽽在上⼀讲中,我们提到的数据类型⽆法满⾜现实⽣活需求,这个时候,⾃定义数据类型该派上⽤场了,我们可以定⼀个学⽣类型。
从⽽达到我们的需求了。
⾃定义数据类型⼜可以分为⼦界类型,数组类型,记录类型,枚举类型,指针类型,集合类型等等。
下⾯分别对这些数据类型讲解 ⼦界类型 ⼦界类型定义了某种类型的取值范围(因此定名subrange)。
你可定义整数类型的⼦界类型,如取值从1到10或从100到1000,或者定义字符类型的⼦界类型,如下所⽰:typeTen = 1..10;OverHundred = 100..1000;Uppercase = 'A'..'Z';定义⼦界类型时,你不需要指定基类的名字,⽽只需提供该类型的两个常数。
所⽤基类必须是有序类型,定义结果将是另⼀种有序类型。
如定义⼀个⼦界变量,那么赋给该变量的值必须是⼦界定义范围内的值。
下⾯代码是正确的:varUppLetter: UpperCase;beginUppLetter := 'F';以下代码则是不正确的:varUppLetter: UpperCase;beginUppLetter := 'e'; // compile-time error以上代码将导致⼀个编译错误:“Constant expression violates subrange bounds”。
如果代之以下⾯代码:varUppLetter: Uppercase;Letter: Char;beginLetter :='e';UppLetter := Letter;Delphi 编译会通过,但在运⾏时,如果你开启了范围检查编译选项(在⼯程选项对话框的编译器页设置),你将得到Range check error (范围检测错误)信息。
Pascal语言1-3(Tp与Fp的区别、程序设计初步)

三、数据类型、常量、变量及说明方法
数据类型确定了该类型数据项的表示、取值范围以及 所能参与的运算。在pascal语言中,无论常量还是变量都 必须属于一个确定的数据类型。 Pascal 提供了丰富的数据类型,可以分为三大类: ① 简单类型:分为标准类型(整型、实型、字符型和布 尔型)和自定义类型(枚举型和子界型) ② 构造类型:分为数组类型、集合类型、记录类型和文 件类型 ③ 指针类型 这些数据类型中除了指针类型是动态数据类型外,其 他的都是静态数据类型。另外,我们把整型、字符型、 布尔型、枚举型和子界型称为顺序类型。
3. 标识符:
标识符是以字母开头的字母数字序列(大小写等效,可跟下划线_), 用来标识常量、变量、程序、函数等。Pascal中允许的标识符的有 效长度为63。 标识符分为两大类: ① 标准标识符: 标准常量:false,true,maxint(32767) 标准类型:integer,real,char,boolean,text 标准文件:input,output 标准函数:abs,arctan,chr,cos,eof,eoln,exp,ln,odd, ord,pred,round,sin,sqr,sqrt,succ,trunc 标准过程:get,new,pack,page,put,read,readln,reset, rewrite,unpack,write,writeln ② 自定义标识符 由用户自己在程序首部或说明部分进行定义,但要注意以下几 点:不能与保留字同名;避免与标准标识符同名;最好有一定的 含义,增加程序的可读性。 例如:在程序中如用到数学中的π,则在定义该常量时可用PI表示。
第二章 Pascal程序设计语言基础
一、概述
1.Pascal是结构化的语言 Pascal语言全面清晰地体现结构化思想。不仅提供了直接实现“顺序结 构”、“选择结构”和“循环结构”的语句,而且还可以定义子程序(“函 数”和“过程”)。在编程时可以完全不使用转向语句“goto”,使程序的执 行顺序与行文顺序保持一致,便于理解; 2.Pascal的数据类型丰富 Pascal语言不仅提供了整型、实型、字符型、布尔型等标准数据类型, 而且还允许用户按照语法规则自定义枚举型、子界型、数组型、集合型、记 录型、指针类型和文件类型,便于数值计算和非数值信息处理; 3.Pascal语言可以实现模块的独立化要求 Pascal语言允许在函数和过程内部定义局部变量,允许在主程序和子程 序之间传递参数,使得每一个子程序模块都能反映一个相对独立的性质,模 块之间的联系简单清晰,便于修改; 由于Pascal语言精确地表达了程序设计的基本概念,结构性好,表达能 力强,因此成为学校程序设计课程的教学语言,计算机会考和奥林匹克信息 学竞赛的规定语言。
全面初识Pascal语言(共七章)

第一讲初识Pascal语言一、Pascal 语言概述Pascal 语言是一种算法语言,它是瑞士苏黎世联邦工业大学的Niklaus Wirth教授于1968年设计完成的,1971年正式发表。
1975年对Pascal 语言进行了修改,作为“标准PASCAL 语言”。
Pascal 语言是一种结构化的程序设计语言,可以用来编写应用程序。
它又是一种系统程序设计语言,可以用来编写顺序型的系统软件(如编译程序)。
它的功能强、编译程序简单。
二、Pascal 语言的特点Pascal语言有以下几个主要的特点:⒈它是结构化的语言。
Pascal语言提供了直接实现三种基本结构的语句以及定义“过程”和“函数”的功能。
可以方便地书写出结构化程序。
在编写程序时可以完全不使用GOTO 语句和标号。
这就易于保证程序的正确性和易读性。
Pascal语言强调的是可靠性、易于验证性、概念的清晰性和实现的简化。
在结构化这一点上,比其它(如BASIC,FORTRAN77)更好一些。
⒉有丰富的数据类型。
Pascal提供了整数、实型、字符型、布尔型、枚举型、子界型、数组类型、集合类型、记录类型、和文件类型和指针类型。
⒊能适用于数值运算和非数值运算领域。
PASCAL的功能较强,能广泛应用于各种领域。
PASCAL语言还可以用于辅助设计,实现计算机绘图功能。
⒋PASCAL程序的书写格式比较自由。
PASCAL允许一行写多个语句,一个语句可以分写在多行上,这样就可以使PASCAL程序写得格式优美,便于阅读。
由于以上特点,许多学校选PASCAL作为程序设计语言,它能给学生严格而良好的程序设计的基本训练。
培养学生结构化程序设计的风格。
三、Pascal语言程序的基本结构程序设计语言都有着一组自己的记号和规则。
PASCAL语言必须采用其本身所规定的记号和规则来编写程序。
下面我们首先来了解Pascal语言的程序基本结构。
Pascal语言的程序结构为:程序首部标号说明语句常量定义语句类型定义语句程序的说明部分变量说明语句函数和过程说明语句分程序程序体程序的执行部分先看一个简单的PASCAL程序:program exam1(input,output);var r,s,c:real;beginreadln(r);c:=3.14*2*r;s:=3.14*r*r;writeln(c,s)end.从这个简单的程序可以看到:1、一个PASCAL程序分为两个部分:程序首部和程序体(或称分程序)。
02Pascal语言基础知识

02 pascal语言基础知识一、Pascal字符与符号1.标识符(1) 标识符的定义:标识符就是以字母开头的字母数字序列,有效长度为63个字符,并且大小写等效。
可以用来标示常量、变量、程序、函数等。
例如例1.1中的Area(程序名),pi(符号常量),s、r(变量名)都是标识符。
(2) 标识符的分类:a.保留字(关键字)所谓保留字是指在Pascal语言中具有特定的含义,你必须了解它的含义,以便于正确的使用,否则会造成错误。
下面是Pascal语言的保留字:AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,V AR,WHILE,WITH等b.标准标识符:指Pascal语言预先定义的标识符,具有特殊含义。
以下列举了Pascal语言部分常用的标准表识符:标准常量False Maxint True标准类型Boolean Char Real Integer标准函数Abs Arctan Chr Cos Eof Eoln Exp Ln Odd Ord Pred Round Sin Sqr Sqrt Succ Trunc标准过程Dispose Get New Pack Page Put ReadReadln Reset Rewrite Unpack Write Writeln标准文件Input Outputc.用户自定义标识符:由你自己根据需要来定义。
(1)选用的标识符不能和保留字相同。
(2)语法上允许预定义的标准标识符作为你自己定义的标识符使用,但最好还是不要用。
二、Pascal的数据及类型数据是程序设计中的一个重要内容,其重要特征----数据类型,确定了该数据的表示形式、取值范围以及所能参与的运算。
pascal语法
pascal语法2005年1月27日 09:45 作者:不详来源:中国烟机备件网第一章、pascal介绍一、pascal的基本语法单位1、基本符号A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,.,:,..,',^注意:pascal语言除了能使用以上规定的基本符号外,不得使用任何其它符号。
2、保留字AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DIWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,LABEL,MOD,NIL,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEA T,SET,THEN,TO,TYPE,UNTIL,V AR,WHILE,WITH。
注意:所起的文件名不能与保留字相同。
3、标识符以字母打头的字母数字串,长度小于等于8。
标准标识符(共三十九个):标准常量:false,true,maxint标准类型:integer,real,char,boolean,text标准文件:input,output标准函数:abs,arctan,chr,cos,eof,eoln,exp,ln,odd,ord,ored,round,sin,sqr,sqrt,succ,trunc标准过程:get,new,pack,page,put,read,readln,reset,rewrite,unpack,write, writeln二、程序结构1、由三大部分组成:程序首部,说明部分,语句部分。
PROGRAM 程序名(input,output);{……} 解释CONSTpi=3.14159;V ARr,l,s:real;BEGINwrite('input r:');read(r);l:=2*pi*r;write('l=',l,'s=',s);END;2、大量使用标点符号,保留字后不加标点符号(END除外)。
2.3 数据类型、常量、变量及说明方法
2、实数类型
• 实数类型包括正实数、负实数和实数零。它的 类型标识符为real。实数的表示方法有两种。 • (1)日常表示法:就是我们平常使用的带小 数点的表示方法。例:2.5,-1.6,0.0都是合 法的。必须注意小数点前后都应该有数字,例: 7.,.8都是非法的。一个整数可以当做实数使 用,单反过来不行。
2.3.1 标准数据类型
• 1、整数类型 整数类型包括正整数(+号可略)、负整数和零。 例:168,+520,0,-1都是合法的整数。 注意:1,024在会计学中是允许的,但在这里是 非法的,应去掉“,”号。 整数类型的标识符为integer。除了常用的 integer(整型)外,Turbo Pascal还支持以 下4种整数类型:
2.3.2 常量
• 所谓常量,是指在程序执行过程中其值不能改 变的量,他们可以是整型、实型、字符、字符 串。如5,6.8,‘F’,‘gj’,1E6都是常量。 • 常量定义的一般形式: const <常量标识符>=<常量>; 其中const是保留字。如const pi=3.14; t=true;
Pascal对常量定义要求如下:
Pascal语言规定,可以对实 型数据进行如下操作:
(1)算术运算 运算符有+、-、*、/,运算结果为实数。 /叫实 数除,即使有一个数为整数,甚至两个数都是 整数,系统自动将整数转换为实数后再运算, 结果仍为实数。 例:7 /2=3.5 6 /3=2.0 (2)关系运算 实数可以做关系运算,运算对象还可以有一个整 数,但运算结果都是布尔类型。
(2)逻辑运算
• not:表示对原值进行逻辑否定,假设x为布尔 量,其值为false,则not x的值为true。好像 电灯的开关钮,按一下开,再按一下关。 • and:表示对两个逻辑量(如x,y)进行“与” 运算,即x and y,只要x,y有一个为false, 则运算结果也为false,好像串联电路的开关。 • or:表示对两个逻辑量(如x,y)进行“或” 运算,即x or y,只要x,y有一个为true,则 运算结果也为true,好像并联电路的开关。
04第四讲
其中, 界的值不一定静态给出
function SUM(X:INT-VECTOR) return INTEGER; RESULT: INTEGER:=0; begin for I in X’FIRST..X’LAST loop RESULT:= RESULT+X(I); end loop; return RESULT; end SUM;
判定或可具有缺省初值 也可以说明一个对象的变体是冻结的 单独对判定或赋值是不允许的
PEACH:ITEM; ORANGE:ITEM(FALSE); COCA_COLA:ITEM; COCA_COAL:=ORANGE; (合法) COCA_COAL:=(PRICE=>1.99,AVAILABLE=>TRUE, AMOUNT=>1500,WHER=>FOOD);
2. 记录 ①说明形式
type COORDINATE is record X:INTEGER range 0..100; Y:CHARACTER; end record;
②Ada的判全或是安全的
type DEPT is (HOUSEWARE,SPORTS, DRUGS,FOOD,LIQUOR); type MONTH is range 1..12; type ITEM (AVAILABLE:BOOLEAN: =TRUE) is record PRICE:REAL; case AVAILABLE of when TRUE=>AMOUNT:INTEGER; WHERE:DEPT; when FALSE=>MONTH_EXPECTED:MONTH end case; end record;
四. 小结.(P37图2-4)
Pascal类型
非结构类型
信息学奥赛培训计划
2008年信息学奥赛培训计划青少年信息学奥林匹克竞赛是一项旨在推动计算机普及的学科竞赛活动,重在培养学生能力,使学生开阔眼界、扩大知识面,使得有潜质有才华的学生在竞赛活动中得到锻炼和发展。
全面提高学生的综合素质,努力培养高素质、高层次创新人才,是长鸿学校不断努力的目标。
与一般计算机竞赛不同,信息学奥赛是一种综合能力的测试。
针对我校学生的实际情况,为了争取在信息学奥赛中争得好成绩,现作如下计划:一、培训目标:1、培养学生具有参加全国信息学奥林匹克竞赛分区联赛(初赛、复赛)的能力。
2、培养学生的抽象逻辑推理能力、严谨的思维方式和严密的组织能力,加强对学生的综合素质的提高。
二、培训对象:初二年级信息兴趣班特长生3人三、培训内容:1、全面学习Pascal语言的基础知识、程序的调试,使学生能熟练掌握Pascal,并熟练应用常用基本算法。
2、深入学习各类算法设计思想,让学生形成一定的分析和解决问题的能力,在算法设计中展开各种数据结构的学习。
3、以实例为基础,展开强化训练,使学生能初步达到灵活运用的程度,独立解决实际问题。
加强与其他学科的合作。
信息学竞赛中的"信息"二字,其实就是计算机对现实世界的数字化表示。
用计算机解决现实问题其中最重要的一步表就是数据结构的设计。
数据模型的建立、数学公式的应用,在计算机中是关键。
因此,加强与其他学科的横向联系非常必要,特别是数学特长生的培养。
四、培训时间:1、星期一至星期五中午12:30----1:50 傍晚4:30----5:40。
五、培训基本步骤:1、2月初组织考试,选拔学生。
2、3月至5月,重点是基础知识和Pascal语言。
3、5月至7月,强化Pascal语言和编程环境。
4、9月至11月15号,算法学习和初赛准备。
5、11月15号至11月30号,对参加复赛人员进行强化培训。
六、培训要求:严格培训纪律,加强学生管理;兴趣小组的组建由学生自愿报名、教师考察确定,一经确定必须按时参加培训,无故参加培训三次以上视为自动退出,培训过程中做与培训无关的事,如打游戏、上网聊天等,一经发现作未参加培训处理,规定的作业、练习必须按时完成,否则同样作未参加培训处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十一课 枚举、子界、集合及记录类型 在前面几章中我们用到了整型、实型、布尔型、字符型的数据。以上数据类型是由pascal规定的标准数据类型,只要写integer,real,boolean, char, pascal 编译系统就能识别并按这些类型来处理。pascal还允许用户定义一些类型,这是其它一些语言所没有的,这就使得pascal使用灵活、功能丰富。
一、枚举类型 随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。例如,性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。 在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。 枚举类型是一种很有实用价值的数据类型,它是pascal一项重要创新。 (一)枚举类型的定义 枚举类型是一种自定义类型,要使用枚举类型当然也要先说明枚举类型。 枚举类型的一般格式: (标识符1,标识符2,…,标识符n) 说明:①括号中的每一个标识符都称为枚举元素或枚举常量。 ②定义枚举类型时列出的所有枚举元素构成了这种枚举类型的值域(取值范围),也就是说,该类型的变量所有可能的取值都列出了。 例如,下列类型定义是合法的: 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); ty=(for,do,while); (二)枚举类型变量 定义了枚举类型,就可以把某些变量说明成该类型。如: var holiday,workday:day; incolor:colors; 也可以把变量的说明与类型的定义合并在一起,如: var holiday,workday:(sun,mon,tue,wed,thu,fri,sat); incolor:(red,yellow,blue,white,black,green);
(三)枚举类型的性质 ⒈枚举类型属于顺序类型 根据定义类型时各枚举元素的排列顺序确定它们的序号,第一个枚举元素的序号为0。例如:设有定义: type days=(sun,mon,tue,wed,thu,fri,sat); 则: ord(sun)=0,ord(mon)=1,ord(sat)=6;succ(sun)=mon,succ(mon)=tue, succ(fri)=sat;pred(mon)=sun,pred(tue)=mon,pred(sat)=fri。 应注意的是:枚举类型中的第一个元素无前趋,最后一个元素无后继。 ⒉对枚举类型只能进行赋值运算和关系运算 一旦定义了枚举类型及这种类型的变量,则在语句部分只能对枚举类型变量赋值,或进行关系运算,不能进行算术运算和逻辑运算。 在枚举元素比较时,实际上是对其序号的比较。当然,赋值或比较时,应注意类型一致。 例如,设程序有如下说明: 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'); weekday<>sun 而下面比较或语句是不合法的: mon:=weekday; mon:=1; if weekday=sun or sat then write('rest'); sun>red weekday<>color ⒊枚举变量的值只能用赋值语句来获得 也就是说,不能用read(或readln)读一个枚举型的值。同样,也不能用write(或writeln)输出一个枚举型的值。如write(red)是非法的,会发生编译错误。千万不要误认为,该语句的结果是输出"red"三个字符。 但对枚举数据的输入与输出可通过间接方式进行。输入时,一般可输入一个代码,通过程序进行转换,输出时,也只是打印出与枚举元素相对应的字符串。这在后面的例题中将有使用示例。 ⒋同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。 如: type color1=(red,yellow,white); color2=(blue,red,black); 是不允许的,因为red属于两个枚举类型。 (四)、枚举类型应用举例 例1 一周七天用sun,mon,tue,wed,thu,fri,sat表示, 要求利用枚举类型编程:当输入星期几的数字,能输出它的后一天是星期几(也用英文表示)。 源程序如下: program ex6_1; type week=(sun,mon,tue,wed,thu,fri,sat); var i : integer; day,sucday : week; begin write('What date is it');readln(i); case i of {根据输入i转换成枚举型} 1:day:=mon; 2:day:=tue; 3:day:=wed; 4:day:=thu; 5:day:=fri; 6:day:=sat; 7:day:=sun; end; {计算明天sucday} if (day=sat) then sucday:=sun else sucday:=succ(day); {输出明天是星期几} write('The next day is '); case sucday of sun:writeln('sunday'); mon:writeln('monday'); tue:writeln('tuesday'); wed:writeln('wednesay'); thu:writeln('thursday'); fri:writeln('friday'); sat:writeln('saturday'); end; end. 评注:程序中变量day、sucday分别表示今天、明天。 二、子界类型 如果我们定义一个变量i为integer类型,那么i的值在微型机系统的pascal中,使用2字节的定义表示法,取值范围为-32768~32767。而事实上,每个程序中所用的变量的值都有一个确定的范围。 例如,人的年龄一般不超过150,一个班级的学生不超过100人,一年中的月数不超过12,一月中的天数不超过31,等等。 如果我们能在程序中对所用的变量的值域作具体规定的话,就便于检查出那些不合法的数据,这就能更好地保证程序运行的正确性。而且在一定程度上还会节省内存空间。 子界类型就很好解决如上问题。此外,在数组的定义中,常用到子界类型,以规定数组下标的范围,上一章有关数组知识中我们已用到。 (一)子界类型定义 子界类型的一般格式: .. 说明: ①其中常量1称为子界的下界,常量2称为子界的上界。 ②下界和上界必须是同一顺序类型(该类型称为子界类型的基类型),且上界的序号必须大于下界的序号。例如,下列说明: type age=0.5..150; letter=0..'z'; let1='z'..'a'; 都是错误的。 ③可以直接在变量说明中定义子界类型。如: type letter='a'..'d'; var ch1,ch2:letter; 可以合并成: var ch1,ch2:'a'..'d'; 当然,将类型定义和变量定义分开,则更为清晰。 (二)子界类型数据的运算规则 ⒈凡可使用基类型的运算规则同样适用该类型的子界类型。 例如,可以使用整型变量的地方,也可以使用以整型为基类型的子界类型数据。 ⒉对基类型的运算规则同样适用于该类型的子界类型。 例如,div,mod要求参加运算的数据为整, 因而也可以为整型的任何子界类型数据。 ⒊基类型相同的不同子界类型数据可以进行混合运算。 例如:设有如下说明: type a=1..100; b=1.1000; c=1..500; var x:a; y:b; t:c; z:integer; 则下列语句也是合法的: Z:=Sqr(x)+y+t; 下列语句: t:=x+y+z; 当X+Y+Z的值在1~500范围内时是合法的,否则会出错。 (三)子界类型应用举例 例2 利用子界类型作为情况语句标号,编一个对数字, 大小写字母和特殊字符进行判别的程序。 源程序如下: program cas; var c:char; begin readln(c); case c of '0'..'9':writeln('digits'); 'A'..'Z':writeln('UPPER-CASELETTERS'); 'a'..'z':writeln('lower-caseletters'); esle writeln('special charactors'); end; end. 例3 使用子界型情况语句,当输入月、日、年(10 30 1986),输出30 Oct 1986。 源程序如下: program ex6_3; var month:1..12; date:1..31; year:1900..1999; begin write('Enter date(mm-dd-yy):'); readln(month,date,year); write(date); case month of 1:write('Jan':5); 2:write('Feb':5); 3:write('Mar':5);