COBOL子程序调用

精通COBOL--11.4.2 被调用程序中参数的引用   被调用程序是在过程部标志PROCEDURE DIVISION后实现参数引用的。引用方式仍然是通过USING语句。实际上,这种引用方式在前面的被调用程序代码中已有所涉及。此处不妨以上一小节中的被调用程序为例,重点关注其对于参数的引用。该程序代码如下。IDENTIFICATION   DIVISION.PROGRAM-ID      CALLED-PROG.AUTHER       阅读详情

内部子程序
    IDENTIFICATION DIVISION.
    PROGRAM-ID. PROC-A.
    ENVIRONMENT DIVISION.
    ...
    DATA DIVISION.
    ...
    PROCEDURE DIVISION.
    ...
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROC-B.
       ENVIRONMENT DIVISION.
       ...
       DATA DIVISION.
       ...
       PROCEDURE DIVISION.
       ...
       END PROGRAM PROC-B.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROC-C.
       ENVIRONMENT DIVISION.
       ...
       DATA DIVISION.
       ...
       PROCEDURE DIVISION.
       ...
           IDENTIFICATION DIVISION.
           PROGRAM-ID. PROC-D.
           ENVIRONMENT DIVISION.
           ...
           DATA DIVISION.
           ...
           PROCEDURE DIVISION.
           ...
           END PROGRAM PROC-D.
       END PROGRAM PROC-C.
    END PROGRAM PROC-A.
    程序A包含B,C两个子程序,其中C又包含子程序D。
    A能调用B,C。C能调用D。B不能调用C,A不能调用D。
    如果C声明为公用的,则B可以调用C,语法为:
    PROGRAM-ID. PROC-C IS COMMON PROGRAM.

    当前函数中定义的变量都只是对当前函数有效。可以用GLOBAL声明为对所有函数有效。
    01 DATA-NAME IS GOLBAL ...
    文件也有此声明:FD FILE-NAME IS GOLBAL ...

    如果调用的不是本程序中的文件或变量,则可以用EXTERNAL声明。
    FD FILE-NAME IS EXTERNAL.../01 DATA-NAME IS EXTERNAL...

    CALL PROC VAR1 [ON EXCEPTION CODE1] [NOT ON EXCEPTION CODE2] END-CALL.
    如果找不到PROC程序名,执行CODE1(如果有此声明),找到将参数VAR1传递给PROC,并执行。PROC返回时执行CODE2(如果有此声明)。
    参数应该在文件,工作存储或连接节中定义,应为01层数据项,77层数据项或基本数据项。
    子程序要返回调用程序,执行EXIT PROGRAM

    传递参数有3步:
    首先在调用程序的CALL语句列出要传递的参数。
    CALL PROC VAR1 .
    然后在被调用程序的过程部标题,使用USING短语列出相应的参数。
    PROCEDURE DIVISION USING VAR1.
    最后在被调用程序的连接节(LINKAGE SECTION)提供参数的存储空间。
    LINKAGE SECTION.
    01 VAR1 PIC XX.

    参数传递有2中方式:
    BY CONTENT    传递的参数值只在被调用函数中被改变,调用函数中的值不变。
    BY REFERENCE. 传递的参数值在被调用函数中被改变,调用函数中的值也改变。
    CALL PROC VAR1 BY CONTENT/REFERENCE.

    再次调用子程序,子程序处于上次退出的状态(除了连接节中的数据),打开的文件依然打开。
    可以用INITIAL声明函数被调用时处于初始状态。
    PROGRAM-ID. PROC-C IS INITIAL PROGRAM.

    如果不想每次执行都初始化,只在需要的时候初始化,可以用CANCEL PROC.初始化PROC程序,但不执行PROC。

精通COBOL--11.4.1 被调用程序中参数的定义   被调用程序的参数都是在其连接节中定义的。前面讲到,在主调用程序中也可存在连接节,但在主调用程序中的连接节是可选的。当该主调用程序同时也作为被调用程序时才使用连接节。而在被调用程序中,存在于数据部的连接节通常则是必须要求存在的。连接节在程序代码中对应为LINKAGE SECTION。被调用程序中的连接节主要用于描述传递给该程序的各项参数。需要注意的是,在连接节中所定义的参数数据是不被分配 阅读详情

相关推荐

cobol子程序

1.基本概念 1.1.主程序:调用其他程序的程序。 1.2.子程序:被其他程序所调用的程序。 2.COBOL中的子程序类似于Java中被调用的类,其基本结构是与主程序一样的。以下是它们的区别之处: 2.1主程序结构: 过程部的部头: PROCEDURE DIVISION USING 要传入子程序中的参数名1,参数名2,…… 过...

qq_34822461的博客 1332

cobol 中call的功能测试总结

cobol中 call的功能类似于c众的函数调用,其调用方式有以下三种:                  (1)  by  reference                    (2) by    content                  (3) by  value其中by reference 和by value  可以改变主函数的所传参数的值,而by  conten

gchqf的专栏 3749

精通COBOL--11.2.1 子程序的命名规则

  子程序的命名通常和普通程序的命名方式相同。但是需要注意的是,对于子程序而言,不可将其前缀命名为以下这几个名字。AFB           AFH           CBC          CEE          EDCIBM            IFY             IGY            IGZ            ILB实际上,以上名字都属于IBM

COBOL 1982

java调用cobol_COBOL子程序调用

内部子程序IDENTIFICATION DIVISION.PROGRAM-ID. PROC-A.ENVIRONMENT DIVISION....DATA DIVISION....PROCEDURE DIVISION....IDENTIFICATION DIVISION.PROGRAM-ID. PROC-B.ENVIRONMENT DIVISION....DATA DIVISION....PROCE...

weixin_32042443的博客 822

62、COBOL编程深度解析:调用子程序(续)

本文深入解析了COBOL编程中调用子程序的关键技术,包括基本原理、数据传递机制、高级应用以及性能优化策略。通过具体示例和流程图,展示了主程序与子程序之间的交互过程,帮助开发者更好地理解和应用子程序调用技术。

brown的博客 151

子程序调用

CALL 'SUBPROG' USING ORGIN-DATA NEW-DATA ON OVERFLOW ···. --- PROGRAM-ID SUBPROG. --- PROCEDURE DIVISION USING ORGIN-DATA NEW-DATA. --- CALL 指明调用的程序 SUBPROG 被调用的程序 USING 指明参数 ON OVERFLOW 如果被调用程序不能载入,执行ON OVERFLOW 的内容 参数传递必须保证存储空间一致 子程序的终止方式: 调用另一个

大道至简 901

COBOL中调用子程序的方法

COBOL程序中调用子程序的方法

qq_34349768的博客 842

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析)

本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。

7z8x2c4v6b9的博客 295

一步步Cobol 400上手自学入门教程06 - 子程序调用

子程序的命名通常和普通程序的命名方式相同。但是需要注意的是,对于子程序而言,不可将其前缀命名为以下这几个名字。 AFB           AFH           CBC          CEE          EDC IBM            IFY             IGY            IGZ            ILB 实际上,以上名字都属于IBM相关产品

昕友软件博客 692

群晖Hyper Backup还原实战:加密与非加密备份的完整操作指南

本文详细介绍了群晖Hyper Backup在加密与非加密备份场景下的完整还原操作指南。通过实战案例和高级技巧,帮助用户应对硬盘故障或系统崩溃时的数据恢复挑战,特别是加密备份恢复中的关键节点和常见陷阱。

weixin_29323365的博客 439

PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)java

PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)java 小博是新城小学二年级学生,这孩子人很老实,数学、语文成绩都是中等。不过一旦坐在电脑前,写起代码来,则有些霸气侧漏,尤其擅长各种暴力方法。本题就是数学莫老师的题目之一,请你和小博一起暴力求解吧。 输入格式: 第一行给出这个和N(图中例子的和N为2000)。 输出格式: 第一行输出所有解的数目K,随后K行按照DCBA 4位数字从...

qryzhfj的博客 2187

C15-COBOL 子程序

COBOL 子程序 COBOL子程序是可以独立编译但不能独立执行的程序。有两种类型的子程序:内部子程序,如perform语句;和外部子程序,如CALL动词。 Call(调用)动词 调用动词用于将控件从一个程序转移到另一个程序。包含CALL动词的程序是Calling Program(调用程序),被调用的程序被称为Called Program(被调用程序)。调用程序的执行将停止,直到被调用的程序完成执行。Exit Program语句用在被调用程序中传送回控件。 被调用程序的约束条件 以下是被调用的程序要求:

adozoo 1022

从翼型到湍流:用生活化案例图解空气动力学核心概念(中英双语版)

本文通过飞机机翼、F1赛车、高尔夫球等生活化案例,图解空气动力学核心概念。深入浅出地解释了攻角如何产生升力、边界层与流动分离如何影响阻力、马赫数如何划分速度世界,以及涡流与湍流的特性与应用。文章还介绍了计算流体动力学(CFD)这一现代数字风洞工具,帮助读者直观理解这些塑造现代交通与运动设计的无形之力。

metaverse5vr的博客 475

精通COBOL--第11章 子程序调用

  一个大型的软件产品通常是由多个程序所组成的。其中有一个程序为主程序。该程序实现系统主体框架,并调用其他程序完成系统各个模块的功能。被调用的程序即称作子程序。本章将主要讲解子程序调用方面的知识,为开发大型软件产品奠定基础。

COBOL 1189

用STM32的SPI接口读取MT6835磁编码器,手把手教你避开数据读取的坑

本文详细介绍了如何使用STM32的SPI接口读取MT6835磁编码器,并提供了21个实战细节与避坑指南。从硬件连接、SPI配置到数据解析和实时调试,全面解析了读取位置信息过程中的常见问题及解决方案,帮助工程师在工业控制、伺服电机等场景中高效应用AMR技术。

weixin_30729609的博客 1438

宽压 DC⇌DC 也能“随心所欲”——全桥 LLC 混合控制硬核拆解

硬件派 vs. 软件派:多电平是“器件堆砌”,混合控制是“算法魔改”。预算紧 → 先搞软件。仿真别嫌烦:PLECS 把两条曲线扫透,切换点、死区、φ 都调到波形平滑再上板。温升留 20 ℃ 余量:车规≥125 ℃,实验室测 105 ℃ 就算危险,别玩极限。

weixin_43199439的博客 925

精通COBOL--11.7.2 嵌套子程序的调用权限

  在嵌套子程序中,程序通常只能调用其直接包含的子程序。若要调用其他子程序,必须在该子程序的标志部定义的程序名后面加上COMMON选项。例如,下面为一段嵌套子程序的大体结构。为便于观察,其中只显示其程序名及结束标志。该结构如下。PROGRAM-ID.  P.PROGRAM-ID.  P1  IS  COMMON.   END PROGRAM  P1.PROGRAM-ID.  P

COBOL 1370

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

XiaoqiangClub的博客 3360

精通COBOL--11.8 小结

  本章在学习完单一COBOL程序的基础上,介绍了如何在多个程序之间进行互相调用的概念和方法。COBOL中程序的调用通常也称为子程序调用。本章首先介绍了子程序调用的基本作用和特点,其后分别从三个方面对子程序调用进行了讲解。第一个方面是从调用关系的角度出发,将调用过程中所涉及到的程序分为两类。其中一类为主调用程序,另一类为被调用程序。关于主调用程序和被调用程序,需要掌握各自程序中参数的定义、

COBOL 1284

FC7300 SPI MCAL配置引导

Example - QMI8A01z外设:Example - QMI8A01z外设:

舊梦的博客 257

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精通COBOL--11.2.2 子程序的调用顺序

   首先需要说明的是,子程序实际上就是普通的程序。当某一程序被其他程序调用时,该程序才相对调用的程序而言被称作子程序。因此,当某一程序作为子程序被调用后,该程序也可再将其他程序作为子程序进行调用。当多个程序进行调用时,便存在一个调用顺序的问题。关于子程序的调用顺序,通常是提倡进行线形调用的。例如,以下这种调用顺序对于初学者是提倡的。q      程序A调用程序Bq     

COBOL 1429

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

精通COBOL--11.2 子程序调用的特点

  本节仅讨论子程序调用最基本的特点以及一些常见的注意事项。关于子程序调用更详细的特点及应用,将在后面的章节中陆续进行讲解。此处主要从子程序的命名规则,子程序的调用顺序,以及子程序的终止方式这3个方面进行讲解。

COBOL 1101

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: COBOL程序格式
下一篇: http://www.csis.ul.ie/COBOL/
Corey
博客等级 码龄26年 9粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值