RPG

514. フリー・フォーマットの剰余計算

フリー・フォーマットでも四則演算は
_

四則演算 演算記号
足し算    +
引き算 –
掛け算 *
割り算 /
剰余 %REM

と剰余(余り)の算出だけは MVRではなく組込み関数 %REM を
使わねばならない。
しかしRPG解説書では %REM の使用サンプルがあまりにも
不親切なのでサンプル・ソースを紹介する。

[ TESTKSN : RPGソース]

ソースはこちらから

0001.00 H DFTNAME(TETSKSN) DATEDIT(*YMD/) BNDDIR('QC2LE')                            
0002.00 F**********  算術計算テスト *******************************************      
0003.00 F*                                                                           
0004.00 F**********************************************************************      
0005.00                                                                              
0006.00  * CRTRPGMOD  OBJ(QTEMP/TESTKSN)    SRCFILE(R610SRC/QRPGLESRC)               
0007.00  * DBGVIEW(*SOURCE) AUT(*ALL)                                                
0008.00  * CRTPGM PGM(ASNET.COM/TESTKSN)   MODULE(QTEMP/TESTKSN)  ACTGRP(*NEW)       
0009.00  *        AUT(*ALL)                                                          
0010.00                                                                              
0011.00  *-------------------------------------------------------------------*       
0012.00  *  2020/08/24 : 作成                                                        
0013.00  *-------------------------------------------------------------------*       
0014.00  *( 作業変数 )                                                               
0015.00 D SUA             S              4S 0 INZ(10)                                
0016.00 D SUB             S              4S 0 INZ(5)                                 
0017.00 D TOTAL           S              4S 0                                        
0018.00 D GOKEI           S              4S 0                                        
0019.00                                                                              
0020.00 C*-------------------------------------------------------------------------+ 
0021.00  /FREE                                                                       
0022.00    TOTAL = SUA + SUB;         // 足し算                                      
0023.00    SUB   = TOTAL - SUA;       // 引き算                                      
0024.00    GOKEI = SUA * SUB;         // 掛け算                            
0025.00    SUB   = GOKEI / SUA;       // 割り算                            
0026.00    GOKEI = 102;                                                    
0027.00    SUB   = %REM(GOKEI:SUA);   // 余り                              
0028.00  /END-FREE                                                         
0029.00 C                   SETON                                        LR
0030.00 C                   RETURN                                         
0031.00 C******************************************************            
0032.00 C     *INZSR        BEGSR                                          
0033.00 C******************************************************            
0034.00 C*  初期 CYCLE のみの実行                                          
0035.00 C                   ENDSR     


                                     

_

[解説]

余りの算出方法は

  SUB(余り) = %REM(GOKEI / SUA);

ではなく

  SUB(余り) = %REM(GOKEI : SUA);

が正しい記述である。( GOKEIを SUAで割った余りが SUB )
普通に考えれば %REM(GOKEI / SUA); のほうが
自然であるが IBM の規定によれば

  SUB(余り) = %REM(GOKEI : SUA);

となる。不自然ではあるが定義であるので仕方がない。
_