




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章31 例题1 第二章,学习了DATA DIVISION。 这一章我们学习PROCEDURE DIVISION的写法。 在这里,再一次认一下例题。输入输出数据形式 (a) 输入数据形式(b) 输出数据形式 处理标准 输入文件以50记录/存储块为单位输出 单价,采购数量,采购额以PACK形式输出 采购额用下列公式求出采购额 = 单价 * 采购数量32 数据处理的流程和PAD 刚开始,先考虑1条记录的处理问题。然后试着考虑让这个处理反复进行,直到全部记录处理完为止。321 1条记录的处理 1条记录处理的顺序 在主存储器中,根据DATA DIVISION中的FILE SECTION写的记录记述,设定为保存输入记录的输入区域,和为保存输出记录的输出区。 记录处理,使用这些区域的数据,按下面的步骤进行作业。 采购数据输入 输入区域的商品编号,商品名,单价,进货数量等数据移动到输出区域。这时,将单价和进货数量的数据从ZONE形式转换成PACK形式单价乘以采购数量,即采购额。输出区域中的所有数据都备齐了之后,向采购文件进行输出。(2)处理1条记录的PAD在第一章我们已经学习过,PAD是用3种记录符号。使用这些符号,有下面3种处理的基本模式。处理 在符号中表示处理 根据处理的顺序,从上向下书写符号反复(循环) 反复(循环)符号的中间记述着反复的条件 反复处理写在右边选择 选择符号中写着选择的条件 满足条件,按上方进行处理不满足条件,按下方进行处理 用PAD表示例题的处理顺序 纪录的输入在表示输入记录时,标记READ及输入文件的名称 数据的移动表示数据移动时,指明移动项目和移动目的地项目。 记录的输出表示输出记录时,标明WRITE和输出文件名 用PAD表示处理顺序时,从上到下画一条线,沿着条线从上到下的顺序就是处理的顺序,并写出基本的模式。 像这样,一连串的处理以怎么样的顺序进行都可以的时候,可以将它们都归纳成1个符号中。322记录处理的循环 循环处理 在入力文件中的采购数据中,因为有很多条输入纪录,所以必须每个记录都以同样的顺序进行处理。同样的处理反复进行时,处理顺序只写1次,直接用循环符号来表示这一操作反复进行。 反复处理,直到输入的记录全部处理完毕,在反复符号中写上“直到文件结束”这一条件。 第一件记录的输入,第二件以后记录的输入 使用反复符号记述的反复处理,先检查条件,条件没满足之前、执行循环处理。 在例题里,检查输入文件的记录是否都读完了(文件结束),没读完就进行一连串的处理。然后再检查,没读完再处理,循环往复。 但是,输入数据是否读完,不试着输入记录是检查不出来的。为此在我们检查输入数据是否读完前,最开始需要先读入一条记录。 检查输入数据是否读完。 虽然正在循环中,但是因为第一件记录已经输入,所以处理顺序就变成了移动,计算,输出这样的顺序。 因为1个记录已经处理完成,输入下面的记录(输入二条以后的记录)在所有的数据被处理完之前,按-的顺序进行反复。第一件记录是在进行反复处理前输入,第二条以后的记录,在循环处理中的最后输入。3.2.3数据的结束和 所谓的数据结束,是在输入文件的记录时,没有数据则被认定为结束。 此时,为了让循环处理可以结束时用了这一项目。 事先定义(Endflag)的标志位。根据输入数据的状态,在程序中采用以下值。 的内容 输入记录未读完之前0 输入数据全部读完后1数据是否读完,就可以根据判断。为1时表示数据全部结束,因此,循环操作一直进行到为1。PAD的写法(a) 数据结束的判断 对于数据结束来说,输入数据时,计算机能自动判断。 在PAD中READ之后写选择的部分,条件中写上AT END。选择的上侧,是数据完了后的处理,下侧是数据未完时的处理。在COBOL中,READ以及AT END在一起配套来进行一连串的处理。 (b)处理的PAD 在3、2、2的PAD中追加处理。最开始的一件记录输入之前,的最初值为0。而在1件与2件以后的记录输入处理,要追加当输入数据全部读完后,设为1 的处理。 数据还未读完时,的数字一直保持为0。条件不成立时的处理不必写。反复的条件为到为1为止在PAD中,0或1用围起来,叫文字定数(常数)。在COBOL中文字定数一定要用引用号围起来,文字定数在3、5、2中学习。第一件记录输入时出现AT END的现象时,不进行循环操作,而进入下一步的处理。第二件以后的记录出现AT END时,就结束循环。3.2.4文件的准备与结束 在输入输出数据前和后,都需要进行文件的准备和结束。打开处理 在数据进行输入输出之前,必须保证文件处于可以输入输出的状态。这个关于文件的准备处理叫做打开处理。在PAD上标明OPEN及打开处理文件的名称。关闭处理 全部数据处理结束,文件处于结束状态,文件的结束处理叫做关闭处理,在PAD中标明CLOSE以及关闭处理文件的名称。包括打开处理和关闭处理的PAD记录处理前后,追加打开处理和关闭处理。3.2.5整体的PAD 在开始和结束处,加上START END,这样PAD就完成了。练习题3-1 1 下面的文章是关于到现在为止所学的内容。在()中填入适当的语句。 循环处理的PAD的写法 循环处理的PAD,(反復)符号使用,循环处理到何时为止的条件写在(反復)符号中,循环符号写在(反復)符号的右侧。 记录的输入 第(件)件记录的读入在进入循环处理之前读入,第2件记录开始,在循环处理(最後)时输入。 判断数据结束的PAD 输入数据是否结束由计算机进行判断,在PAD的REDA的后面写有(選択)符号,中间写着()。(選択)符号的右边上侧为条件成立时,即输入数据全部结束后所进行的处理,下侧为条件不成立时,即输入记录没有全部结束时使用, 的初始值为0,输入数据全部处理完之后设定为()。而且,循环处理在到达()之前会一直进行。3.2.6程序的构造化 构造化的程序 一般来说,随着程序的完成,业务内容的变化,修正就很必要。这种修正是维护作业,很多情况下不是程序员而是其他人在做,而且,这种工作比想象的要更费时间。在这里意识到了系统需要修正和维护,现在重要的怎样才能使修正变得简单。 为此,首先要讲程序结构的单纯化,让它不再更多地依赖程序员,而是趋向标准化。为此而进行的程序技法构造化被叫做程序构造化。 程序构造的单纯化 程序的构造,不管是什么样的处理内容,都可以用3种简单模式组合而成,即顺序,循环,分支。这3种基本模式组合即可构成程序,构造简单,方便易懂。 以3种基础的模式组合构成的程序被称为构造化程序。即,用PAD表现出来的程序为构造化程序。 在这里,还要介绍一种构成程序构造标准化的方法。 程序的分割 制作程序时,先将要处理的部分分成几块,对一块一块的处理加以讨论。 对程序进行的处理多分为前处理,主处理,后处理。现在将其分成3部分,进行讨论。 将例题的PAD分成前处理,主处理,后处理来看一看。 在程序中主要做的是记录处理,这为主处理。 主处理之前进行的处理为前处理。主处理之后进行的处理为后处理。在这个例题中,没有后处理。在PAD上,对处理的块用双重框圈起来,每一个块分别用独立的PAD记述做出来。 每一块的处理,用双线条框并引出双线来表示。 处理的部件化 前处理和主处理由两个地方需要对输入的记录进行处理。前处理是第一件输入的记录,主处理是从第二件开始输入的记录,因为处理相同,因此也作为1个部分单独做成PAD加以记述。像这样有很多地方需要做同样的处理时,把这块作为部件用独立的PAD写出。 主结构与子处理 程序的处理大体上可分割为前处理、主处理、后处理,再按执行顺序写出的程序叫主结构,分割开来的程序叫子模块。3.2.7完成的例题的PAD 练习题3-2 1 下面的文章是关于到现在为止所学的内容。在()中填入适当的语句制作程序时,分割处理,分割处理的每一部分制成程序。处理可分为(前処理),(主処理),(後処理)。在COBOL程序中,被分割的不同的程序叫做(),()的执行顺序写成的程序叫()。3.3 PROCEDURE DIVISION的构成 PROCEDURE DIVISION被称为过程部,是COBOL中最后记述的DIVISION 这里,记述处理过程。3.3.1 PROCEDURE DIVISION的写法 根据PAD上画着的顺序,记述COBOL程序。在COBOL中,处理语句的集合被称为过程。过程是主结构和子模块的单位,首先是主结构,然后是子模块。数量众多的子模块按照什么顺序记述并不重要,但是如果按处理顺序来记述,就比较容易理解。3.3.2 过程 对于一个过程,是从给定一个过程名开始记述。 ()从一个过程名开始到下一个过程名为止是过程的一个单位。 ()过程名从第8位开始写,最后添加终止符。 ()过程名根据以下的规则记述 可以使用的文字,英文,数字,连字符,长度在30个文字以内。 使用日本文字时,长度在13个文字之内 连字符不能放在开头或结尾。 ()正文从12位以后开始记述。 ()一个过程的结尾一定要加上终止符。根据例题,作了一个表示处理内容的简单的过程。3.4 PROCEDURE DIVISION(主结构)3.4.1 文件的准备(OPEN命令) 使文件处于能够输入输出的状态。 ()INPUT 表示输入文件 其后写上输入文件的名称 ()OUTPUT 表示输出文件 其后写上输出存储的名称 ()文件名必须是ENVIRONMENT DIVISION的SELECT指定的文件名。 (注)一般形式的中括号 内表示的是程序员可以任选的内容。编程时不能把“ ”也写上。 例题的编成 当打开的有两个以上的文件时,可以用1个OPEN语句记述。3.4.2 子过程的执行命令 让子过程执行的命令 ()过程名 指定子过程的过程名。 ()条件 指定条件时,直到条件满足为止,一直循环进行子过程的处理。 ()执行PERFORM,就转到被指定的子过程,进行子过程的处理,(从一个过程名开始到下一个过程名为止),完了时回到PERFORM的下一语句。当有追加条件时,在条件满足之前会一直持续子过程的循环执行。 前处理执行的指示在子过程中,当文件的打开处理进行完之后,在PERFORM文中作出执行前处理的指示,前处理没有循环执行的必要,所以不必指定UNTIL 使用这个PERFORM的指示,前处理过程被执行,前处理过程结束后,转到PERFORM下面的语句执行。 主处理执行的指示 主处理的子过程的执行指示也采用PERFORM文,主处理在输入数据全部处理完之前,或者说在到1之前一直循环,所以要指定UNTIL、(注)文字定数的1使用时必须加上引号。 = 号前后,需要1个文字以上的空格。 PERFORM文中UNTIL以后的条件的写法见4、9、1,关于定数见3、5、2用这个PERFORM文的指示,先要进行是否达是1的检查处理,再执行主处理的过程。变成1后,转到PERFORM文后的第一条命令去执行。433.4.3 文件结束(CLOSE文) 使文件处于结束关闭状态。()文件名 指定要关闭的文件名。有很多文件的情况时,文件名之间要有1个字以上的空格。3.4.4 程序执行结束(STOP文) 使程序结束。主程序的过程中STOP 文是最后的文,所以必须加休止符。 前处理和主处理的子过程的执行,在PERFORM文中作了指示。主处理有循环,所以需要指定UNTIL。过程必须从过程名开始,注意最后的语句要加终止符。练习题3-31 下面的文章是关于目前为止所学的内容。在()中填入适当的语句 过程名 过程名的写法规则,与文件名及数据名大致相同,不同点是仅由(数字)组成的文字列也可以,刚开始写的位置是第(8)位,最后加上(終止符)。 (子)过程的最开始,必须写过程名。 子过程执行的命令 使子过程执行的命令是()文。子过程循环执行的时候,在()文上写(),再写上“到什么时候为止”的循环条件。3.5 PROCEDURE DIVISION(前处理) 前处理中,要设定初期值和执行读入数据的处理。3.5.1 初期值的设定 为设定初期值,要使用数据移动的MOVE语句。 ()数据名 指定接受一侧的数据名。 (注)MOVE具体的规则,见3.6.13.5.2 定数 定数,是程序执行中数值不能改变的值。因此直接指定特殊的文字或值。定数分为文字定数,数字定数,日语定数,表意定数等。 文字定数 ()文字定数,文字列一定要加上引号。 ()可以使用的文字,包括英语,数字,假名,特殊文字及空格。 ()文字列长度,最大可指定为160(半角) 数字定数 ()数字定数由数字,符号,小数点构成。 数字 09 符号 +,- 小数点 . ()整数部,小数部分合起来,最多可以达到18位。 ()符号在左端指定。 ()不加符号,被默认为是正值。 ()小数点不能放在最右侧。 日语定数 ()日语定数,将日语文字列用引用符包裹,前头加上NC ()可以使用的文字,汉子,平假名,片假名,英语,数字,特殊文字等日语文字。 ()编程时,1个文字占编程用纸的2位。 ()文字列的长度,最高可指定78个文字。 表意定数 所谓表意定数,是指为保证出现指定的文字或值而事先定了拼写的约定用语。主要的表意定数及其意义如下图所示。例题前处理的编程3.6 PROCEDURE DIVISION(主处理) 主处理,是进行数据移动,计算,数据输出等处理。3.6.1 数据的移动 在给设定初始值时,使用MOVE文字将定数转移到数据项目中。在这里学习一下将数据项目移动到另一个数据项目中去的MOVE文。 ()数据名1 指定发送方的数据名 ()数据名2 指定接受方的数据名。 ()数据移动的规律,根据项目的形式长短而有所区别。 英数字项目间的移动 发送方和接受方同样都是用英数字项目时,从左侧开始移动。接受方比发送方长时,空白处追加空格。接受方比较短时,余下的数字无法移动。 ()接受方与发送方数位相等时 ()接受方较长时 ()接受方较短时 数字项目(ZONE形式)间的移动 发送方,接受方都使用ZONE形式数字项目时,以小数点为基准移动。接受方比发送方长时,空白处填入0,接受方比发送方短时,剩余部分无法移动。 ()接受方较长时 ()接受方较短时 数字项目(PACK形式)间的移动 发送方,接受方都使用PACK形式数据时,与ZONE形式相同,以小数点为基准移动,接受方长时加入0,接受方短时剩余部分无法移动。 ()接受方长时 数字项目,接受方与发送方的形式不同的移动 数字项目,发送方与接受方的数据的形式不同时,要配合接受方的形式进行数据移动。 (),发送方为ZONE形式,接受方为PACK形式时,移动后ZONE形式被转化为PACK形式。 ()发送方为PACK形式,接受方为ZONE形式,移动后由PACK形式转化为ZONE形式。 日语项目之间的移动 同英数字项目之间的移动一样,从左端开始移动。接受方比发送方长时,在空白处填上空格,接受方比较短时,剩余的数据无法移动。 接受方较长时 集团项目间的移动 与集团项目包含的基本的数据形式无关,与英数字项目之间的移动相同,从左端开始移动。例题的程序入力领域的商品号码,商品名,担架,采购数量移动到出力领域。练习题3-41 下面的文章是关于到目前为止所学的内容。在()中填入适当的语句 数据的移动使用(MOVE)文,英数字项目之间的移动从(左)段开始。接受方较长时,空白的地方加入(空白),接受方较短时,发送方多出来的部分无法移动。数字项目间的移动以(小数点)为基础,接受方较长时,空白的地方加入(0)。接受方较短时,发送方多出来的部分无法移动。而且数字项目间的移动,有时还会出现接受方和发送方数据形式不同,这时,按照(受取側)的数据为准来移动。还有,日语项目间,集团间项目的移动规则,同(英数字)项目间的移动规则相同。2下面MOVE文,被实施后,将接受方的内容填入表中。 问题1 用MOVE文移动数据后,发送方的数据的内容没有改变吗? 答:不变。发送方的内容通用MOVE文实行前是一样的。数据的内容改变,只是数据在送到那一区域的那一刻而已。 问题:在集团项目间的移动上,发送方与接受方的数据形式与长度不符时怎么办? 答:集团间的移动,于这个集团内包含的数据的形式没有关系,与英数字项目之间的移动遵循同样的规则。 也就是说,接受方比,发送方长时,用空格补入,接受方较短时,余下部分的数值不能被移动。 ()接受方较长时 ()接受方较短时 但是,(),()的例子,O-数据2要通过计算,如果计算的数字不正确就会出现很大的问题。因此,集团项目之间的移动,接受方与发送方都要十分注意数据的形式。问题3 从输入区向输出区各个项目移动时的顺序,必须从头开始吗?答:,不是,按什么顺序移动都可以。用WRITE文,输出数据时,只要把应该输出的项目都收集到就可以了。 问题4 将例文编程的各个项目用MOVE文总结一下。 答:不能写,理由如下:集团项目间的移动规则,与英数字项目的移动规则是一样的。但是,接受方从左开始接受了36位。如图所示,商品的编码,和商品名,只有这两种项目的移动是正确的,单价以后的项目不能从ZONE形式换成PACK形式,产生错位,所以没有办法正确移动。集团项目间的移动,因为无法从ZONE形式换成PACK形式,所以例题这种情况。不能采取集团移动。问题5 MOVE文的送出方,有时会写表意定数,具体该怎么写呢? 362计算演算 进行计算演算。 ()数据名 指定接受演算的结果的数据名。 演算的结果,以接受方的数据形式为基准,进行移动。 ()ROUNDED 指定计算结果四舍五入。 根据最后数据的形式四舍五入。 比如说,接受方如果是小数点后1位,那么就要进行小数点后两位的四舍五入操作。 ()演算式 由数据名,数学定数,以及加减乘除符号来表示。数据是基本项目,同时必须是数字项目 加减乘除符号 数学符号由以下几种,在符号前后也必须有1字以上的空格。运算符号以及运算顺序 运算,从优先顺位比较高的运算开始,优先级一样时,从左向右进行运算,想改变优先级就要加上括号。指定四舍五入 进行A*0.5运算 把上式的结果带到P中。这时候根据ROUNDED的指定,接受方项目P的小数点位数再加上一位小数点进行四舍五入的运算,然后把结果带入P当中。比如说,当A是255时,进行运算后就是127.5,因为P的整数部是3位,所以对小数点的后一位进行四舍五入的运算,则P的值就是128。363输出数值(WRITE文) 将记录输出到文件中。()记录名 必须是DATA DIVISION的FILE SECTION指定的记录名。过程的最后一定要加上终止符。3.7 PROCEDURE DIVISION(输入处理)3.7.1 数据的输入 从文件中读入记录。 ()文件名 指定输入文件名 ()文 文件结束时(没有要输入的数据)进行记述整理。 文件可以有多个记述。 ()END-READ 这是READ文最后必须记述的。过程的最后必须加终止符。3.8 程序的实际的流程 打开文件 根据PERFORM文,进行子过程的前处理 前处理结束后,根据PERFORM文,转为子过程的输入处理。 输入处理完成后,返回原来的子过程的前处理。然后进行PERFORM文后的程序。 因为前处理已经完成,回到原来的主程序。然后进行PERFORM文后的程序。 因为是有UNTIL指定的PERFORM文,所以先检查是否为1,如果不是1,则返回子过程的主处理。 实行主处理,根据PERFORM文,从子过程的主处理转为输入处理 完成输入处理后,再回到原程序的主处理。然后进行PERFORM文后的程序。 在变成1之前,循环。 变成1时,停止循环,回到主程序。然后进行PERFORM文后的程序。 文件关闭 程序结束3.9 完成的PAD3.10总结 PAD 记号顺序,循环,分支 基本模式顺序,循环,分支 处理的表示法 处理1件记录 循环处理 作为循环处理的结束条件使用的 程序构造化 程序构造的单纯化将顺序,循环,分支组合起来 程序的分割前处理,主处理,后处理 主程序和子过程 主程序按子过程的实际顺序写的程序 子过程按各个功能、或处理分割的程序模块 PROCEDURE DIVISION PROCEDURE DIVISION由过程构成,为过程起名。 准备文件OPEN文 文件结束CLOSE文 程序结束STOP文 执行子过程PERFORM文 数据移动MOVE文 算术演算COMPUTE文 数据输出WRITE文 数据输入READ文演習問題35问题1在COMPUTE 文中,如果计算式一行写不下的话怎么办?答:在语和语之间,或者在演算子之间的任何地方分开,写不下的写在下一行,不用写接续的指定。问题2例题中,在计算采购额的时候,使用了出力领域中的单价和采购数量,如果使用入里领域中的单价和采购数量可以吗?答:没关系。计算式如下:使用哪个领域都没有关系。在例题中,入力领域中的数据是ZONE形式,出力领域中的是PACK形式,所以使用出力领域中的数据计算会更有效率。但是,实现必须把个数据移动到出力领域。问题3负号和连字符,小数点和终止符有何区别? 答:在COBOL中,用前后是否有空格来区别。问题4ZONE形式和PACK形式的数据,如下所示。含有符号的数据信息,具体是怎样存储的?答:用3位的正整数+123被存储到3 Byte的ZONE领域中的例子来说。+123在计算机当中,按照EBCDIK码,换成1位是1Byte的数据。这种Bit的排列,可以用16进制表示。16进制,把1个Byte分成4个4个的Bit,4个Bit可以用英文字母和数字来表示,Bit的构成和16进制表示的文字的对应关系如下所示。+123的Bit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论