2012-10-27 1 views
0

일부 cobol 코드에 문제가 있습니다. 다음 코드에서는이 두 가지 오류가 발생합니다. 컴파일러는 추가 작업을 시도 할 때 좋아하지 않습니다. 다음 Cobol 숫자 이름이 아닙니다.

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 회비 및 NEW 보험

CH7PPB.CBL:158: Error: 'NEW-DUES' is not numeric name 
CH7PPB.CBL:161: Error: 'NEW-INSURANCE' is not numeric name 

정의된다.

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

도움 주셔서 감사합니다.

답변

0

두 가지 임시 변수를 사용하여이를 해결했으나 제대로 작동하는지 확인하지 못했습니다.

  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 
+1

나는 이것이 당신이 COMPUTE 동사에 대해 배울 좋은 시간이라고 생각합니다! 위의 코드는 작동하지만 끔찍한 코딩입니다! 예를 들어,'COMPUTE NEW-SALARY = ANNUAL-SALARY + (ANNUAL-SALARY * 0.07)'또는'COMPUTE NEW-SALARY = 1.07 * ANALUAL-SALARY'를 시도 할 수 있습니다. – NealB

+0

+1 Neal에게 돈. 'ON SIZE ERROR' 선언 문을 반드시 읽으십시오. –

2

이미 문제가 해결 되었기 때문에 기쁩니다.

레코드 용으로 편집 된 형식을 계산에 사용할 수 없습니다. 두 변수의 PICTURE 문자열에있는 "Z"문자는 컴파일러에서 변수로 간주하지 않습니다.

실제로 전체 숫자 변수 (형식 지정 없음)를 선언하고 그 결과 값을 형식화 된 변수로 이동해야합니다. NealB 제안한 COMPUTE 외에

0

:

 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 절)에 의존하며 두 번째로는 블록 끝의 'ZEROS TO TEMP, TEMP2'에 의지합니다. 그것은 그것을하는 나쁜 방법입니다. TEMP는 항상 GIVING의 "대상"이기 때문에 TEMP의 반복 된 초기화는 무의미하므로 MULTIPLY의 시점에서의 값은 부적합합니다.