2
respostas

[Dúvida] Cobol - Possível reajuste necessário na definição de variáveis com vírgula

Opa, tenho o seguinte código, referente ao curso de COBOL dentro do módulo 04. Tomando Decisões e Operadores Relacionais e dentro da aula 05 - Comparando valores:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGCOB09.
      **************************************
      * COMMENT AREA - REMARKS
      * AUTHOR = JOAO ( BRITO ) JOAOVB
      * OBJECTIVE: RECEIVE THE PRODUCT, VALUE, AND CALCULATE SHIPPING
      * USE EVALUATE COMMAND
      * DATA   = 23/02/2024
      **************************************
       ENVIRONMENT DIVISION.
           CONFIGURATION SECTION.
               SPECIAL-NAMES.
                   DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
           77 WRK-PRODUCT    PIC  X(20)       VALUE SPACES.
           77 WRK-UF         PIC  X(02)       VALUE SPACES.
           77 WRK-VALUE      PIC  9(06)V99    VALUE ZEROS.
           77 WRK-SHIPPING   PIC  9(04)V99    VALUE ZEROS.
       PROCEDURE DIVISION.
          DISPLAY 'PRODUTO.. '
          ACCEPT WRK-PRODUCT.
          
          DISPLAY 'VALOR.. '
          ACCEPT WRK-VALUE.
          
          DISPLAY 'ESTADO.. '
          ACCEPT WRK-UF.
          
          EVALUATE WRK-UF
               WHEN 'SP'
                   COMPUTE WRK-SHIPPING = WRK-VALUE * 1,05
               WHEN 'MG'
                   COMPUTE WRK-SHIPPING = WRK-VALUE * 1,10
               WHEN 'RJ'
                   COMPUTE WRK-SHIPPING = WRK-VALUE * 1,15   
               WHEN OTHER
                   DISPLAY 'NAO PODEMOS ENTREGAR NESTE ESTADO'
          END-EVALUATE
          
          DISPLAY '==============='
          DISPLAY 'VALOR DO FRETE ' WRK-SHIPPING
       STOP RUN.

Li e revisei o código várias vezes e, se não estiver enganado, ele está exatamente igual ao do professor no minuto 8:22 desta aula, quando ele recebeu no terminal o valor de 1050,00 após rodar o código. No entanto, ao utilizar um código similar e enviar os valores da mesma forma, meu terminal retornou o valor 105000.

Não sei se a definição de vírgulas em variáveis está diferente da época em que os vídeos foram gravados, ou se há algo no código que está obsoleto. Além disso, não encontrei resposta em outros fóruns ou com o auxílio de IAs revisando o código.

Na aula número 2 deste módulo, enfrentei o mesmo problema, mas consegui contorná-lo com uma máscara. No entanto, neste caso, em que é usado o evaluate, tem se mostrado mais complicado encontrar uma solução.

Alguém poderia me dar uma luz, pf? <3

Captura de tela do código citado acima

2 respostas

Se puder passar o link desse curso seria uma boa pra conseguir entender, nem sabia que cobol ainda existia! To fascinado!

Mas eu pedi ajuda pro gepete e vê se a solução dele tá dá uma luz:

Tem a linha DECIMAL-POINT IS COMMA. na seção CONFIGURATION, DIZENDO que a vírgula deve ser tratada como ponto decimal. Mas sinto que o compilador pode não estar interpretando corretamente isso.

Você pode tentar substituir as vírgulas por pontos nos cálculos para ver se resolve o problema. Exemplo, muda de COMPUTE WRK-SHIPPING = WRK-VALUE * 1,05 para COMPUTE WRK-SHIPPING = WRK-VALUE * 1.05. Faz isso para todas as linhas onde a vírgula é usada no cálculo.

Verifica se o ambiente de compilação está configurado para usar a vírgula como ponto decimal. Pode ser uma configuração do sistema operacional ou do compilador COBOL.

Se essas soluções não funcionarem, você pode tentar outra abordagem no cálculo, multiplicando por 105, 110 e 115, e depois dividindo por 100 para obter o valor correto com duas casas decimais.

Por exemplo:

   WHEN 'SP'
       COMPUTE WRK-SHIPPING = (WRK-VALUE * 105) / 100
   WHEN 'MG'
       COMPUTE WRK-SHIPPING = (WRK-VALUE * 110) / 100
   WHEN 'RJ'
       COMPUTE WRK-SHIPPING = (WRK-VALUE * 115) / 100

Isso evita o uso da vírgula e pode resolver o problema que você está enfrentando.

Opa, vlw pela luz amigo, testei essas abordagens e outras que achei na internet, mas não solucionou, acredito que realmente o compilador ñ está reconhecendo a definição de DECIMAL-POINT IS COMMA. vou tentar procurar mais a fundo alguma nova informação sobre isso.

o link do curso é : https://cursos.alura.com.br/cobol-moisesfcosta-1632885439149-p227861