フリー・フォーマットでも四則演算は
_
四則演算 演算記号
足し算 +
引き算 –
掛け算 *
割り算 /
剰余 %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);
となる。不自然ではあるが定義であるので仕方がない。
_
