最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.26.構造化に基づくプログラム

[ Previous ] [ HOME ] [ Upper ] [ Next ]


構造化に基づくプログラム

まず、「ストラクチャード定理」を予め学習しておいてください。

フローチャート

NSチャート

参考記事:ストラクチャード定理 NSチャート

NSチャートをRPGで表現してみる

 
                   EXCPT#HED                       
 
                     READ BALLP                    90
 DoWhile
           *IN90     DOWEQ*OFF                       
 
                     Z-ADD0         O1CNT   50        
 
                   MOVE COLOR     W1OLDC                
 
                     EXSR @SUM                     
 
                     EXCPT#TOL                     
 
                     ENDDO                            
 
                     MOVE *ON       *INLR
                     RETRN                           

@SUM

 DoWhile
            *IN90    DOWEQ*OFF                     
 
            COLOR    ANDEQW1OLDC                     
 
                     ADD  1         O1CNT            
 
                     EXCPT#DTL                       
 
                     READ BALLP                    90
 
                     ENDDO                             

2001-6-30 上の表で、無意味な行がありました。削除させていただきました。

全手順(DOWEQ)構造化の例 BALLR6

     H            Y/                                    1
     FBALLP   IF  E           K        DISK
     FQPRINT  O   F     132     OF     PRINTER
     C           *LIKE     DEFN COLOR     W1OLDC           
     C*
     C                     TIME           O1TIME  60       
     C                     EXCPT#HED                       
     C*
     C                     READ BALLP                    90
B001 C           *IN90     DOWEQ*OFF                       
 001 C                     Z-ADD0         O1CNT   50
 001 C                     MOVE COLOR     W1OLDC                  
 001 C                     EXSR @SUM                     
 001 C                     EXCPT#TOL                       
E001 C                     ENDDO                             
     C*                                                    
     C                     MOVE *ON       *INLR            
     C                     RETRN                           
     C*----------------------------------------------------
     C           @SUM    BEGSR                       
    C*-----------------------------------------------------
B001 C           *IN90     DOWEQ*OFF                       
+001 C           COLOR     ANDEQW1OLDC                     
 001 C                     ADD  1         O1CNT            
 001 C   OF                EXCPT#HED                       
 001 C                     EXCPT#DTL                       
 001 C                     READ BALLP                    90
E001 C                     ENDDO                             
    C*                                             
    C                   ENDSR                         
     OQPRINT  E  101           #HED
     O                                    1 'H'
     O                                   26 'NUMBER OF BALLS BALLR6'
     O                                   43 '実行日付:'
     O                         UDATE Y   52
     O*
     O        E  1             #HED
     O                                    1 'H'
     O                                   43 '実行時間:'
     O                         O1TIME    52 '0 :  :  '
     O*
     O        E  1             #DTL
     O                                    1 'D'
     O                         COLOR     10
     O*
     O        E  1             #TOL
     O                                    1 'T'
     O                         O1CNT JB  20

もう、特に説明なしでも、分かりますね。ここからからは、補足、または老婆心で書き留めます。

DO-ENDのENDは、ENDDOと表記することも、ENDと表記することもできます。ENDDOやENDIFといった命令語は、後からサポートされたものです。

キーブレイクは、2つのフィールドW1OLDCとCOLORの中の値が、同じか違うかで行います。COLORは読み込みファイルBALLPのフィールドで、W1OLDCは、プログラム内部で定義されています。この2つは、名前は違いますが、同じ属性でなくればなりません。文字なら文字同士で、5桁なら5桁同士で、比較するのが、原則です。

*LIKE  DEFNというのは、コンパイル時に、フィールドの属性を、指定した別のフィールドから取り込む(言ってみれば、属性をコピーしている感じかな)というものです。上の例では、W1OLDCというフィールドを定義したいときに、

MOVE COLOR     W1OLDC  5

などと、直接指定しないで、間接的に別に定義しています。この場合、BALLPの中の、COLORという5バイトの文字フィールドの属性をW1OLDCにコピーしています。こうしておくと、将来、COLORというフィールドの桁数が変わっても、リコンパイル(再度コンパイルすること)すれば、コンパイラが再び、そのときのBALLPのCOLORの属性を取り出して、W1OLDCにコピーしてくれます。もしそうでないと、いちいち、COLORというフィールドを探し出して、一行一行調べて、修正しなくてはなりません。もし、プログラムが100本あったら、大変ですよね。この手間を省くことが、なんというか、重要なんですよ。開発コストを下げるというか、ハ−ドコードでは無くて、すべてが一つの定義を参照して、無駄の無いシステムを作る精神に貢献するというのか、...

起立、礼、着席

2000/1/4


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送