0

いくつかの COBOL コードで問題が発生しています。以下のコードでは、これら 2 つのエラーが発生します。私が足し算をしようとすると、コンパイラは気に入らない。

CH7PPB.CBL:158: Error: 'NEW-DUES' is not numeric name
CH7PPB.CBL:161: Error: 'NEW-INSURANCE' is not numeric name
   MOVE UNION-DUES TO OLD-DUES
   MULTIPLY UNION-DUES BY .04 GIVING NEW-DUES
   ADD UNION-DUES TO NEW-DUES
   MOVE INSURANCE TO OLD-INSURANCE
   MULTIPLY INSURANCE BY .03 GIVING NEW-INSURANCE
   ADD INSURANCE TO NEW-INSURANCE

NEW-DUES および NEW-INSURANCE は、次のように定義されます。

       05   NEW-DUES                       PIC Z9(4).99.
       05   NEW-INSURANCE                  PIC Z9(4).99.

助けてくれてありがとう。

4

3 に答える 3

2

あなたがすでに問題を解決してくれたことをうれしく思います。

念のために言っておきますが、編集した形式を計算に使用することはできません。両方の変数の文字列に文字 "Z" があるPICTUREと、変数はコンパイラによって数値と見なされなくなります。

実際、完全な数値変数 (書式設定なし) を宣言し、その結果の値を後で書式設定された変数に移動する必要があります。

于 2012-10-27T19:15:58.100 に答える
0

これを行う方法であるかどうかわからない2つの一時変数を使用することでこれを解決しましたが、機能しました。

           MOVE ANNUAL-SALARY TO OLD-SALARY
           MULTIPLY ANNUAL-SALARY BY .07 GIVING TEMP
           ADD ANNUAL-SALARY,TEMP TO TEMP2
           MOVE TEMP2 TO NEW-SALARY
           MOVE ZEROS TO TEMP, TEMP2
           MOVE UNION-DUES TO OLD-DUES
           MULTIPLY UNION-DUES BY .04 GIVING TEMP
           ADD UNION-DUES,TEMP TO TEMP2
           MOVE TEMP2 TO NEW-DUES
           MOVE ZEROS TO TEMP, TEMP2
           MOVE INSURANCE TO OLD-INSURANCE
           MULTIPLY INSURANCE BY .03 GIVING TEMP
           ADD INSURANCE,TEMP TO TEMP2
           MOVE TEMP2 TO NEW-INSURANCE
           MOVE ZEROS TO TEMP, TEMP2
于 2012-10-27T18:49:05.770 に答える
0

NealB によって提案された COMPUTE に加えて:

       MOVE ANNUAL-SALARY TO OLD-SALARY
       MULTIPLY ANNUAL-SALARY BY 1.07 GIVING NEW-SALARY
       MOVE UNION-DUES TO OLD-DUES
       MULTIPLY UNION-DUES BY 1.04 GIVING NEW-DUES
       MOVE INSURANCE TO OLD-INSURANCE
       MULTIPLY INSURANCE BY 1.03 GIVING NEW-INSURANCE

示されたコードでの TEMP2 の使用は特に悪いです。最初に初期値 (おそらく VALUE 句) に依存し、2 回目はブロックの最後にある 'MOVE ZEROS TO TEMP, TEMP2' に依存します。それは悪い方法です。TEMP は常に GIVING の「ターゲット」であるため、TEMP の繰り返しの初期化は無意味です。そのため、MULTIPLY 時の値は無関係です。

于 2013-01-20T00:55:09.203 に答える