2014-12-06 8 views
-2

온도 변환기 (CELSIUS TO KELVIN 및 VERSA VERSA)로 사용할 프로그램을 만듭니다. 하지만 내 코드에 문제가있다. (또는 컴파일러에 문제가있을 수있다.) 처음에는 잘못된 공식을 사용하고 있다고 생각했습니다. 그러나 변수를 표시하여 저장되는 입력을 검사하면 입력의 한 자리 만 표시됩니다. 그것은, 내 위의 예와입력이 변수에 올바르게 저장되지 않음

01 CELSIUS PIC S9(2)V99. 

예를 들어 .. 내 입력 15 살, 그것은 단지 .. '1'소요 또는의 45을 가정 해 봅시다, 그것은 단지 내가 이런 식으로 입력을 선언 .. '4'소요 나에게 준다 : 01.00 또는 04.00 도와주세요.

IDENTIFICATION DIVISION. ------------------ 
PROGRAM-ID. temp. 
ENVIRONMENT DIVISION. ------------------ 
CONFIGURATION SECTION. 
*----------------------- 
INPUT-OUTPUT SECTION. *----------------------- 
DATA DIVISION. ------------------ 
FILE SECTION. *----------------------- 
WORKING-STORAGE SECTION. 

01 TEMP-CELSIUS PIC S9(2)V99. 
01 CELSIUS-RESULT PIC +ZZ9.99. 
01 TEMP-KELVIN PIC S9(2)V99. 
01 KELVIN-RESULT PIC +ZZ9.99. 
01 VAR-OPTION PIC X. 
01 X   PIC S9(5)V99. 
*----------------------- 
PROCEDURE DIVISION. 
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 
MAIN-PROCEDURE. 
** 
* The main procedure of the program 
** 

    DISPLAY 'OPTION 1: CELSIUS TO KELVIN' 
    DISPLAY 'OPTION 2: KELVIN TO CELSIUS' 
    DISPLAY 'ENTER YOUR OPTION: ' 
    ACCEPT VAR-OPTION 

    MOVE +273.15 TO X 
    IF VAR-OPTION = '1' 
    DISPLAY 'ENTER CELSIUS:  ' 
     ACCEPT TEMP-CELSIUS 
     DISPLAY TEMP-CELSIUS 
     ADD X TEMP-CELSIUS GIVING KELVIN-RESULT 
     DISPLAY KELVIN-RESULT 
    ELSE 
    IF VAR-OPTION = '2' 
     DISPLAY 'ENTER KELVIN:  ' 
     ACCEPT TEMP-KELVIN 
     DISPLAY TEMP-KELVIN 
     SUBTRACT X FROM TEMP-KELVIN GIVING CELSIUS-RESULT 
     DISPLAY CELSIUS-RESULT 

    END-IF 
    STOP RUN. 
** add other procedures here 
END PROGRAM temp. 
+0

코드를 표시하지 않을 때 사람들이 어떻게 코드를 디버깅 할 것으로 예상합니까? 이러한 문제를 일으키는 _exact_ 코드를 게시하여 재현 할 수 있도록해야합니다. – csmckelvey

+0

어떤 컴파일러를 사용하고 있는지 알고 있어야합니다 (OS가 유용 할 수도 있음). –

답변

1

ACCEPTDISPLAY는 (그 작가는 사용자의 화면 입력을하고 화면 출력을 제공하기 위해 기본 COBOL을 원했다는 것을, 좋은 이유) 컴파일러 작가에 의해 표준이 아닌 가장 넓은 범위의 구현과 함께 COBOL 동사입니다 .

Gnu COBOL 2.0을 사용하면 프로그램에서 찾고있는 오류가 없습니다. 나는 Micro Focus의 여러 컴파일러와 동일하다고 생각합니다.

DISPLAY 출력에 대한 설명 (소수점 포함)에서 코드가 그 지점까지 작동하지 않는다는 것에 놀랐습니다. 그러나 우리는 컴파일러를 알아야합니다. 실제 코드를 보여주고 숨겨진 컴파일러 옵션/swtiches가 없다면, 내 생각 엔 동의하는 것으로부터 S (암시 적 기호)를 제거하는 것입니다.

몇 가지 다른 의견입니다.

다른 언어와 마찬가지로 프로그램의 첫 번째 부분을 "기본"으로 간주하는 것 같습니다. 그 생각을 잊어 버려라, "main"은 COBOL이 가지고 있지 않은 것과는 아주 다른 것이다.

MAIN-PROCEDURE와 같은 레이블 (프로 시저 이름)이있는 경우 "this is the main procedure"라는 주석이 없습니다.

왜 X를 불러야하나요? 좋은 설명이 포함 된 이름을 사용하십시오.

1/2 테스트를 위해 88 레벨 조건 이름을 사용하십시오. 중첩 된 IF보다는 EVALUATE를 사용하십시오. 당신은 아직이 일을하지 않았을 수도 있습니다. 만약 가지고 있다면 그것을 사용하십시오. 그렇게하지 않으면 그들을 찾아 봐서 소개 될 때 더 잘 알게 될 것입니다.

왜 VAR-이라고 부르죠? 변수 (VAR)를 필드 (변수)로만 사용할 수있는 경우 무언가를 호출하면 좋은 이름을위한 공간이 낭비됩니다.

프로그램의 일부분 (아직 모름)은 COBOL에 고정 길이 필드가 있다는 것을 항상 알고 있어야합니다. COBOL에 길이를 알려주기 때문에 항상 길이를 말해야합니다. 올바른 크기. 나는 어느 쪽의 규모에서도 물의 끓는점을 변환 할 수 없으며 어는점을 섭씨에서 켈빈으로 변환 할 수 있습니다.

+0

상세한 답변과 몇 가지 제안을 해주셔서 감사합니다. 그러나 나는 그것이 내가 사용해온 IDE 버전의 호환성이라는 것을 알게되었다. 다른 버전을 다운로드하려고 시도했는데 효과가있었습니다. 당신의 도움을 주셔서 감사합니다. 정말 감사합니다! :) – sab

+0

문제에 대한 자신의 답변을 작성하고 해결 방법을 확인할 수 있습니까? 비슷한 문제로 다른 사람들을 도울 수 있습니다. 컴파일러, IDE 및 OS의 이름을 지정하십시오. –