COBOL程序设计—5

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运算 溢出?
Y N
执行ON SIZE ERROR语句 执行下一句
说明
(1)当发生溢出时,错误的结果不存入结果数据项。
(2)如果有几个计算结果,有的发生溢出.有 的未溢出,则未发生溢山的,计算结果正常地 存入结果数值项、只有发生溢出的结果不存入。 (3)当ROUNDED与ON SIZE ERROR子句一起 使用时,先四舍五入,再判断是否溢出:
5.3 IF语句及较高技巧
语句组1 IF 条件 NEXT SENTENCE 语句组2 ELSE END-IF NEXT SENTENCE
1、 IF语句的嵌套
例子:如果1000<Q<5000,则显示Q的值,否则不显 示。
IF
Q > 1000


A3 PIC 9V9.
对应项相加语句:
ADD
CORR A TO B.
相当于:
ADD ADD ADD
A1 OF A TO A1 OF B. A2 OF A TO A2 OF B. A3 OF A TO A3 OF B.
注意:进行运算的各项必须是数值型初等项,如果 是字符型则不行 对应项相减语句呢?
AGE…
SEX … CLASS…
(二)用CORRESPONDING子句的传送
——对应传送(同名传送)

用受限名传送是可行的,但要一一写出受限名,如 上面那样,用三个MOVE语句才能完成。

……

缺点:如果有很多项呢?麻烦 思考:是否可以直接如下?

MOVE TODAY-DATE LAST-PERIODS-DATE
2、 ON SIZE ERROR(长度溢出处理)
计算结果的整数部分的长度如果比结果数据项描述 所规定的整数部分长,则称长度溢出 如
MULTIPLY
A BY B GIVING C
如果有:
77 77 77
关键问题是不会报错
A PIC 9V9 VALUE 1.2. B PIC 9V9 VALUE 9.0. C PIC 9V9.
03 A.


03 A.
A1 OF A OF SUM
A1 OF A OF TOTAL
思考:为什么要给不同的项以相同的名称呢?
01 TEACHER
02 02 02 02 …
NAME … SEX … AGE… COURSE…
01 STUDENT
02 02 02 02
NAME …
A和B的乘积应为10.8,将此结果放在C中,但C用 9V9描述,高位截断后为0.8
ON SIZE ERROR子句提供‚滥出处理‛。即当发生溢出 错误时,按程序设计者事先指定的操作处理。如:
MULTIPLY ON
A BY B GIVING C
SIZE ERROR DISPLAY „ SIZE ERROR‟ STOP RUN.

× √ ×

× √ × △

× √ × △
×
√ × √ △
×
√ √ √ √
×
√ √ √ √

√ √ √ √
ZERO SPACE 组 合 项

不同类型数据间传送规则归纳
• 1.
(一)非法的传送
数值编辑项、字符编辑项、SPACE,字母数据项 不能传送给数值数据项或数值编辑项。
2.
数值常量、ZERO,数值数据项、数值编辑项不能 传送给字母数据项。
非整数的数值数据项(如用PIC 99V99描述的)或数 值常量(如不带引号的数值)不能传送给字符数据项 或字符编辑数据项。
3.
(二)合法的传送
1.
接收项为字符数据项或字符编辑项,而发送项的长度 大于接收项的,按‚对齐‛的原则(一般为左对齐,当 有JUSTFIED子句时为右对齐),超过部分截断.如长 度小于接收项的,多余位置补空格。
DISPLAY B1.
DISPLAY B2. STOP RUN.
123456 12 34 56 123 456
3、对应传送 ——带CPRRESPONDING子句的MOVE语句 (一)数据名的受限和受限名的传送
COBOL数据的特性——如果不同数据项的某项数据数据名相同会
怎样?
如:
02 SUM. 04 A1 PIC X(2). 04 A2 PIC X(3). 04 A3 PIC 9(4). 02 TOTAL. 04 A1 PIC X(4).

算术运算语句中的ADD,SUBTRACT语句还可以用来 使两个组合项中的对应项进行运算,以下面两个组合 项为例
02 A.
03 03
02 B.
03 03
A1 PIC 9(3). A2 PIC 9(2)V99
A1 PIC 9(3). A2 PIC 9(2)V99
03
A3 PIC 9V9.
03
关于余数子句的一些说明
(1)商和余数的值不仅取决于被除数和除数。还取决 于数据部中对商和余数的描述。
(2)如用ROUNDED子句,它只对商起作用。余数不 作四舍五入处理。在计算余数时,仍按四舍五入前的 值为准。 (3)长度溢出也只检查商的值是否溢出,而不检查余 数。如商的值溢出,则执行ON SIZE ERROR后面的 语句序列,不将求出的商值放入商区中,余数仍置于 余数数据项中。
计算后,C=4,D=1
例如:
77 77 77 77
A PIC 9V9 C PIC 9V99. D PIC 9V99
VALUE 6.0.
B PIC 99V9 VALUE 16.3.
…… DIVIDE
A INTO B GIVING C REMAINDER D.
则C为2.71,D为0.04
2.
3.
2、组合项的传送

组合项的传送是将发送项的内容不加转换的按照字节 方式传送到接收项
(一)发送项和接收项都是组合项,而且其结构和描述 均相同。则可看作将各初等项对应传送。

(二)如发送项与接收项长度相同,但数据结构形 式不同,则将发送项的内容原样不变地自左而有 顺序地传送到接收项。
IDENTIFICATION DIVISION. PROGRAM-ID. EXAM1.

整 √ √
辑 编 辑 型 编 数 值 型 字 母 型 字 符 型 字 符 型 组 合 项 数 非 整 数 值
√ √ √ √ × × √ × √ × √ √

字 字 编


母 符


型 型
×
× △ ×
×
× △ ×
×
× △ ×
×
√ △ ×

√ √ √

√ √ √

√ √ √







数 值




IF Q < 5000
DISPLAY Q END-IF
COBOL-78: IF Q > 1000 IF Q < 5000 DISPLAY Q.
END-IF.
END-IF不是必须的
例:当金额AMOUNT<=50时,利率RATE为0.02,当 50<AMOUNT<100时,RATE为0.03;当AMOUNT>=100 时,RATE 为0.04

(2)传送的两者间必须有成对的同名数据项,而且 这一对中必须至少有一个项是初等项。否则不能 作为对应项传送。(只要求同名,并不要求层号也 相同)

(3)所谓同名,指的是它们有相同的全程受限,或 简单地说,全程同名
举例(例5.1)
5.2 算术运算语句的较高技巧
ROUNDED(四舍五入处理)
IF
AMOUNT < 100 IF AMOUNT > 50 MOVE 0.03 TO RATE ELSE MOVE 0.02 TO RATE END-IF MOVE 0.04 TO RATE
ELSE
END-IF.
IF和ELSE匹配问题
IF X = Y IF A = B IF X = Y IF A = B DISPLAY ‘YES’ ELSE DISPLAY ‘NO’
ENVIRONMENT DIVISION.
DATA 01 A. DIVISION. WORKING-STORAGE SECTION.
02 A1 PIC 99.
02 A2 PIC 99. 02 A3 PIC 99. 01 B. 02 B1 PIC 999. 02 B2 PIC 999. PROCEDURE DIVISION. S. MOVE 123456 TO A. MOVE A TO B. DISPLAY A. DISPLAY A1. DISPLAY A2. DISPLAY A3.
第五章 过程部之二
软件学院 代飞 2011.秋
5.1 传送语句(MOVE语句)的较高技巧
1、各种类型数据之间的传送 (一)回顾同类型数据间的传送规则

数值型数据之间的传送,按小数点位置对齐,如发送 项长于接收项,则多余位截去,如短于接收项,接收 项的空依补零。 字母或字符型数据间的传送,按左端对齐,如发送项 长于接收项,右端多余项截去,如短于接收项,右端 补空格。

(二)编辑传送
发送项是数值型数据,而接收项是编辑数值型数
据,则先将发送项的数据按接收项的描述要求进 行编辑,然后再传送。
注意:传送的方向是,由数值型数据传送给编辑
型数据.而不能把编辑型数据传送给数值型数据。
(三)不同类型数据间传送的规则
见下页图表
接收项
发送项 整 数 值 型 非 整 数 数
只有加法语句和减法语句可以有CORR操作,乘法语句、 除法语句以及计算语句是不能带CORR子句的。
4、除法语句中的余数子句(REMAINDER子句)
77
PIC C 9
DIVIDE
1.5 INTO 7 GIVING C.
计算后,C=4,余数无法表示,需要REMIANDER
子句
DIVIDE
1.5 INTO 7 GIVING C REMAINDER D.
ADD
2.36 TO A ROUNDED ON SIZE ERROR STOP RUN.
(考虑如果A=7.6且描述为9V9) 当无ROUNDED,A=9.9
当有ROUNDED,A=10.0,发生溢出,因此执行
溢出处理,停止运行,A保持原值。
3、 对应项间的运算(带CORRESPONDING 子句的算术运算语句)
ROUNDED子句表示将截断后的一位按照四舍五入 的方式处理 例如有如下语句:
ADD
A , B TO C ROUNDED.
如果计算结果有多个,则应分别说明哪一个接收项要进行 舍入处理 如以下语句:
ADD
A, B, C TO D, E, F ROUNDED, G ROUNDED, H.
若D,E,F,G和H在加上(A+B+C)之后的值均为1283.657, 则各数据项中的值见下表
MOVE A1 TO A1 ? ?
04 A3 PIC 9(5).
05 B2 PIC 99V99.
为了区分,用OF子句限定具体的是哪一个,例如:
MOVE A1 OF SUM TO A1 OF TOTAL.
可以多次限定 02 02
SUM. 04 A1 PIC X(4). TOTAL. 04 A1 PIC X(2). A1 OF A ? ?
2.

2. 接收项是数值项或数值编辑项(初等项),可以 接收数值型的数据以及内容为全数字的字符型 数据项。
3. 接收项是字母型,按左对齐原则接收字母字 符,多余位置补空格。但它不应接收非字母的字 符。(注意,发送项和接收项在内存中不能有重 叠的部分
在程序中,最常见的传送有:
1.
同类型数据的传送,如数值型数据项之间(包括整 数型数据项与非整数型数据项之间的传送),字符 型数据项之间的传送。 数值型数据项向编辑数值型数据项的传送,以便 在编辑后输出。 各类型数据项(除了非整数数值型数据项,如 99V99类型)可向字符型数据项传送。从前表中可 以看出,字符型数据项能够接纳除了非整数数值 型和数值常量以外的所有类型数据项。
对应传送——把一个组合项中若干项传送给另一组合项 中同名的项 例如:
MOVE Or MOVE
CORRESPONDING TODAY-DATE TO LASTPERIODS-DATE. CORR TODAY-DATE TO LAST-PERIODS-DATE.
关于对应传送的一些说明

(1)如果两个组合项中包括的项不同,则只传送同名的 项
ON SIZE ERROR(长度溢出处理)
CORRESPONDING(对应项间的运算)
REMAINDER(ห้องสมุดไป่ตู้法语句中的余数子句)
1、四舍五入处理(ROUNDED子句)

在加、减、乘、除等计算语句中,计算结果可能比接 收项允许的长度长(包括整个数字长度,或者整数部分 长度,或小数部分的长度),则发生截断
相关文档
最新文档