子界类型、集合类型、记录类型、文件类型

子界类型

如果我们定义一个变量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 个学生的记录(记录项有学号、语文、数学、英语、总分),存入到文件中,求出每个学生的总分,最后将所有数据输出到屏幕上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 00:29:47

子界类型、集合类型、记录类型、文件类型的相关文章

2.1-Apache不记录指定文件类型日志

在apache访问日志中,默认会记录所有动作.包括本地一些静态小图片,从而日志变得繁多臃肿. 这时我们可以指定,不记录指定文件类型的日志,来达到只记录我们想要的日志. 配置步骤: 1:标记指定文件类型 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/src/Discuz" ServerName www.llzdwyp.com ServerAlias www.wyp.com S

nginx不记录指定文件类型的日志

1.指定记录文件日志记录的内容. vim /usr/local/nginx/conf/nginx.conf如下部分: log_format dd '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "$http_user_agent"'; 其中dd是指日志格式的名字,可修改.2.在虚拟主机配置文件中,指

apache日志切割与不记录指定文件类型日志

1.# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 修改日志文件为: ErrorLog "logs/test.com-error_log"       错误日志 CustomLog "logs/test.com-access_log" combined  访问日志  相对路径 Apache的common日志格式定义: # vim /usr/local/apache2/conf/httpd.conf <

访问日志不记录指定文件类型 、 访问日志切割 、静态元素过期时间

一:访问日志不记录指定文件类型 #vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 在对应的虚拟主机配置文件中加入 相关配置为: SetEnvIf Request_URI "..gif$" image-request SetEnvIf Request_URI "..jpg$" image-request SetEnvIf Request_URI "..png$" image-request S

1.9-nginx不记录指定文件类型日志

nginx的日志记录和格式,在主配置文件中有配置 vim /usr/local/nginx/conf/nginx.conf 中这一行 log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "$http_user_agent"'; combined_re

LAMP--Apache 不记录指定文件类型的日志

如果一个站点的访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略的,比如网站的一些图片,还有 js,css 等静态对象.而这些文件的访问往往是巨量的,记录这些日志也没什么用,那就可以忽略掉这些访问的日志了. 相关配置是在虚拟主机配置文件中加入以下语句: [[email protected] ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf     SetEnvIf Request_URI ".*\.gif$&quo

LNMP - Nginx不记录指定文件类型日志

用户请求一个页面,日志除了会记录页面的URL以外,页面里的静态文件的URL同样也会被加载,从而被记录到访问日志里去,这个日志量是很大的,会妨碍我们分析日志,因为其实我们只是想看看用户访问的页面的URL,而不是页面里面的静态文件. 1. 定义日志格式:vim /usr/local/nginx/conf/nginx.conf log_format test '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri&

httpd之不记录指定文件类型的日志

在访问量很大的站点,有些访问的日志可以不记录,如图片js,css 方法一: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Refere

apache不记录指定文件类型日志

Apache日志中有许多不需要记录的,比如图片图像什么的. 这就需要我们去设置虚拟主机文件,把图片等一些不需要记录的去做一个标记,然后根据这个标记去做限制. 具体操作: [[email protected] logs]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf SetEnvIf Request_URI ".*\.gif$" image-requestSetEnvIf Request_URI ".*\.jpg$&q

LAMP 2.1Apache不记录指定文件类型日志

访问日志只需要记地址,不用记录图片. 对无用的图片日志做标记,针对标记做限制.打开 vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 把 ErrorLog "logs/denny.com-error_log" CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/denny.com-access_%Y%m%d_log 86400&q