子界类型
如果我们定义一个变量i为integer类型,那么i的值在微型机系统的pascal中,使用2字节的定义表示法,取值范围为-32768~32767。而事实上,每个程序中所用的变量的值都有一个确定的范围。
例如,人的年龄一般不超过150,一个班级的学生不超过100人,一年中的月数不超过12,一月中的天数不超过31,等等。
如果我们能在程序中对所用的变量的值域作具体规定的话,就便于检查出那些不合法的数据,这就能更好地保证程序运行的正确性。而且在一定程度上还会节省内存空间。
子界类型就很好解决如上问题。此外,在数组的定义中,常用到子界类型,以规定数组下标的范围,
子界类型的定义
子界类型数据的运算规则
⒈凡可使用基类型的运算规则同样适用该类型的子界类型。
例如,可以使用整型变量的地方,也可以使用以整型为基类型的子界类型数据。
⒉对基类型的运算规则同样适用于该类型的子界类型。
例如,div,mod要求参加运算的数据为整, 因而也可以为整型的任何子界类型数据。
3.基类型相同的不同子界类型数据可以进行混合运算。
例如:设有如下说明:
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范围内时是合法的,否则会出错。
练习
利用子界类型作为情况语句标号,编一个对数字, 大小写字母和特殊字符进行判别的程序。
如果该字符为数字,则输出‘digits’
如果该字符为大写字母,则输出‘UPPER-ASELETTERS’
如果该字符为小写字母,则输出‘lower-caseletters’
否则输出‘special charactors’
集合类型
集合是由具有某些共同特征的元素构成的一个整体。在pascal中,一个集合是由具有同一有序类型的一组数据元素所组成,这一有序类型称为该集合的基类型。
集合类型的定义和变量的说明
集合类型的一般形式为: set of <基类型>;
说明:
①基类型可以是任意顺序类型, 而不能是实型或其它构造类型。同时,基类型的数据的序号不得超过255。例如下列说明是合法的:
type
letters=set of ’A’..’Z’;
numbers=set of 0..9;
s1=set of char;
②与其它自定义类型一样, 可以将类型说明与变量说明合并在一起.如:
type numbers=set of 0..9;
var s:numbers;
与 var s:set of 0..9;等价。
集合的运算
⒈赋值运算
只能通过赋值语句给集合变量赋值,不能通过读语句赋值,也不能通过write(或writeln)语句直接输出集合变量的值。
⒉集合的并、交、差运算
可以对集合进行并、交、差三种运算,每种运算都只能有一个运算符、两个运算对象,所得结果仍为集合。三种运算符分别用“+”、“*”、“-”表示。注意它们与算术运算的区别。
⒊集合的关系运算
集合可以进行相等或不相等、包含或被包含的关系运算,还能测试一个元素是否在集合中。所用的运算符分别是:=、<>、>=、<=、in。它们都是二目运算,且前4个运算符的运算对象都是相容的集合类型,最后一个运算符的右边为集合,左边为与集合基类型相同的表达式。
type weekday=(sun,mon,tue,wed,thu,fri,sat);
week=set of weekday;
subnum=set of 1..50;
写出下列表达式的值:
⑴[sun,sat]+[sun,tue,fri]
⑵[sun,fri]*[mon,tue]
⑶[wun,sat]*[sun..sat]
⑷[sun]-[mon,tue]
⑸[mon]-[mon,tue]
⑹[sun..sat]-[mon,sun,sat]
⑺[1,2,3,5]=[1,5,3,2]
⑻[1,2,3,4]<>[1..4]
⑼[1,2,3,5]>=[1..3]
⑽[1..5]<=[1..4]
⑾[1,2,3]<=[1..3]
⑿ 2 in[1..10]
练习
1、输入一系列字符,对其中的数字字符、字母字符和其它字符分别计数。输入‘?’后结束。
2、调用随机函数产生10个互不相同的随机整数(0<=x<=40),放入集合中并一起输出(5个一行)。
3、编写一个译码程序,将输入的一串字符,(只有小写字母、数字和空格,输入时以句号结束)翻译成原码。译码规则如下:
①数字0,1,2,3,…,9分别和字母a,b,c,…,j互换;
②字母k,m,p,t,y分别和它们的后继互换;
⑶其他字母和空格保持不变。
4、用集合做筛法求1——100以内的素数
记录类型
在程序中对于组织和处理大批量的数据来说,数组是一种十分方便而又灵活的工具,但是数组在使用中有一个基本限制,这就是:一个数组中的所有元素都必须具有相同的类型。但在实际问题中可能会遇到另一类数据,它是由性质各不相同的成份组成的,即它的各个成份可能具有不同的类型。例如,有关一个学生的数据包含下列项目:
学号 字符串类型
姓名 字符串类型
年龄 整型
性别 字符型
成绩 实型数组
Pascal给我们提供了一种叫做记录的结构类型。在一个记录中,可以包含不同类型的并且互相相关的一些数据。
记录类型的定义
在pascal中,记录由一组称为“域”的分量组成,每个域可以具有不同的类型。
记录类型定义的一般形式:
record
<域名1>:<类型1>;
<域名2>:<类型2>;
: :
<域名n>:<类型n>;
end;
记录类型的定义
记录类型的嵌套
开域语句
练习
读入10 个日期,再对每个日期输出第二天的日期。输入日期的格式是月、日、年,如9□30□1993,输出的格式为10/1/1993
分析: 可用一个记录变量today 表示日期。 知道一个日期后要更新为第二天的日期,应判断输入的日期是否为当月的最后一天,或当年的最后一天。
文件类型
在程序设计中,常常需要从键盘输入大量数据,操作相当麻烦、也很容易出错;同时,在程序运行后也往往会产生大量的输出数据(结果),这给验证结果的正确性和测试程序的对错也带来了很大的麻烦。能不能有一种方法,让程序自动从某个地方读取数据运行,再将程序的运行结果保存到指定的地方呢?当然可以,这就是Pascal中的“文件”类型。
在Pascal 中,文件被定义为同一类型的元素组成的顺序集合。文件所含元素的个数,称为文件的长度。长度为0的文件,即不含任何一个元素的文件,称为空文件。从定义上看,文件与数组很相似,但它们有明显的不同。数组的长度是固定的,而文件的长度不固定,而且可以很长;数组可通过下标对任一数组元素进行访问,而文件一般必须从前往后逐个进行访问,直到找到或找完为止;数组可以整体赋值,而文件却不可以。
文件类型的特点
⑴ 顺序性
文件是由同一类型的元素组成的,它们是按一定的顺序排列和存放的,一般读取文件中的数据或输出文件的内容,都必须从文件头到文件尾顺序访问。在Pascal 中定义的每个文件类型变量,都自动附带一个文件指针,通过文件指针来指向文件中的某个元素,并对该元素进行操作;
⑵ 永久性
前面讲过的所有数据类型如数组、记录、集合等,它们都是在程序运行时在内存空间临时开辟和存储的,所以不具备永久性;而文件是存储在磁盘等外部存储介质上的,因而它们可以永久地存储起来。并且,数据以文件的形式存放后,还可以被其它程序调用,成为共享数据。
⑶ 容量大
由于内存容量很有限,所以我们在定义和使用数组等数据类型时,数据存储容量往往受到很大的限制;而文件是存储在磁盘等外存中,因而容量可以很大、甚至是无限的。
文件操作的常用函数和过程
文件操作的一般步骤
在Pascal中,不管使用哪种类型的文件,必须按照以下步骤操作,当然,不同类型的文件操作的具体语句和格式可能略有不同。
1、 在使用文件前,必须对文件类型和变量进行说明;
2、 把磁盘上的实际文件(外部文件)和Pascal程序当中的文件(内部文件)建立关联;
3、 打开文件,将文件指针指向开始位置,为文件读写作准备;
4、 对文件进行读、写操作;
5、 在使用完文件后,一定要记住关闭文件,确保文件的完整性和可靠性,否则会引起文件处理错误。切记切记!!!
示例(简化版)
Begin
assign(input,’input.txt’);
assign(output,’output.txt’);
reset(input);
rewrite(output);
{程序主体部分}
close(input);
close(output);
End.
练习
1、将文本文件input.txt中的内容复制到一个新的文本文件output.txt中。
2、从键盘输入n 个学生的记录(记录项有学号、语文、数学、英语、总分),存入到文件中,求出每个学生的总分,最后将所有数据输出到屏幕上。
版权声明:本文为博主原创文章,未经博主允许不得转载。