1
resposta

Valor total errado no final do programa

Boa tarde. Fiz o seguinte programa COBOL, com auxilio das informações da aula do título 3 (Controlando fluxos e condições lógicas), item 2 (tomando decisões com IF):

   IDENTIFICATION     DIVISION.
   PROGRAM-ID.  CLIENTES.
  * PROGRAMA RECEBENDO E CALCULANDO DADOS
   ENVIRONMENT         DIVISION.
   CONFIGURATION       SECTION. 
   SPECIAL-NAMES. 
       DECIMAL-POINT IS COMMA. 
   DATA               DIVISION. 
  * NADA NA DATA DIVISION PARA ESTE PROGRAMA
   WORKING-STORAGE    SECTION.
   01  WRK-NOME       PICTURE X(20)  VALUE SPACES.
   01  WRK-SALDO      PICTURE 9(05) COMP VALUE ZEROS.
   01  WRK-SALDO-ED   PICTURE Z.ZZZ.ZZZ9,99.         
  * WRK-SALDO-ED usa mascara para mostrar os valores
   PROCEDURE          DIVISION.
       DISPLAY "DIGITE O SEU NOME "
          ACCEPT WRK-NOME.
       DISPLAY "OLA " WRK-NOME 
       DISPLAY "DIGITE SEU SALDO"
          ACCEPT WRK-SALDO.
       IF WRK-SALDO GREATER THAN OR EQUAL TO 1000
          DISPLAY "NOSSA," WRK-NOME "VC TEM GRANA PACAS HEIN!" 
  *     DISPLAY WRK-NOME.
       COMPUTE WRK-SALDO = WRK-SALDO * 1,10.
          MOVE WRK-SALDO TO  WRK-SALDO-ED. 
       DISPLAY "SALDO APOS APLICACAO DE UMA TAXA DE 10% "
       DISPLAY "SALDO " WRK-SALDO-ED. 

       STOP     RUN.
      
      

Contudo, ao executa-lo pegando como valor 50000, o resultado final é esse:

PS C:\CURSO_COBOL> .\CLIENTES.exe
DIGITE O SEU NOME
JOTAPE
OLA JOTAPE
DIGITE SEU SALDO
50000
NOSSA,JOTAPE VC TEM GRANA PACAS HEIN!
SALDO APOS APLICACAO DE UMA TAXA DE 10%
SALDO 5.5000,00 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Aqui não deveria aparecer 55.000,00?

Acredito que tem a ver com a máscara utilizada.

Contudo, se for isso mesmo, que máscara devo usar para corrigir a saida?

Fico no aguardo.

Obrigado!

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá estudante.
O que está ocorrendo no seu código é que o valor calculado está sendo exibido com um formato errado, provavelmente devido à máscara de formatação WRK-SALDO-ED, que você declarou como PICTURE Z.ZZZ.ZZZ9,99.
Quando você aplica a taxa de 10% ao saldo de 50.000, o valor se torna 55.000.
Contudo, a máscara Z.ZZZ.ZZZ9,99 tem um comportamento que está fazendo com que o número seja exibido de forma inesperada, com a vírgula e o ponto nas posições erradas.
A máscara Z.ZZZ.ZZZ9,99 tem as seguintes implicações:

  • Z é um símbolo que permite números, mas não coloca zeros à esquerda (o que é bom para mostrar números sem preencher com zeros).
  • 9 indica uma posição numérica que pode ser ocupada por dígitos.
  • A vírgula , está sendo interpretada como parte da formatação e pode estar deslocando a posição dos números.

O ideal seria usar uma máscara que:

  • Exiba corretamente o valor com separação de milhar.
  • Não cause confusão com a vírgula.

A máscara mais adequada para exibir valores monetários no formato brasileiro (como 55.000,00) seria:

PICTURE Z,ZZZ,ZZZ.99

Essa máscara fará com que:

  • Os milhar sejam separados por ponto.
  • A vírgula fique antes dos centavos.
  • O valor seja formatado corretamente.

Aqui está o código com a correção na máscara de WRK-SALDO-ED:

IDENTIFICATION     DIVISION.
PROGRAM-ID.  CLIENTES.
* PROGRAMA RECEBENDO E CALCULANDO DADOS
ENVIRONMENT         DIVISION.
CONFIGURATION       SECTION. 
SPECIAL-NAMES. 
    DECIMAL-POINT IS COMMA. 
DATA               DIVISION. 
* NADA NA DATA DIVISION PARA ESTE PROGRAMA
WORKING-STORAGE    SECTION.
01  WRK-NOME       PICTURE X(20)  VALUE SPACES.
01  WRK-SALDO      PICTURE 9(05) COMP VALUE ZEROS.
01  WRK-SALDO-ED   PICTURE Z,ZZZ,ZZZ.99.         
* WRK-SALDO-ED usa mascara para mostrar os valores
PROCEDURE          DIVISION.
    DISPLAY "DIGITE O SEU NOME "
       ACCEPT WRK-NOME.
    DISPLAY "OLA " WRK-NOME 
    DISPLAY "DIGITE SEU SALDO"
       ACCEPT WRK-SALDO.
    IF WRK-SALDO GREATER THAN OR EQUAL TO 1000
       DISPLAY "NOSSA," WRK-NOME "VC TEM GRANA PACAS HEIN!" 
*     DISPLAY WRK-NOME.
    COMPUTE WRK-SALDO = WRK-SALDO * 1.10.
       MOVE WRK-SALDO TO  WRK-SALDO-ED. 
    DISPLAY "SALDO APOS APLICACAO DE UMA TAXA DE 10% "
    DISPLAY "SALDO " WRK-SALDO-ED. 

    STOP     RUN.

Explicação:

  • A máscara PICTURE Z,ZZZ,ZZZ.99 agora vai formatar o valor de forma mais apropriada.
  • Quando você digitar o saldo como 50000, o valor após a aplicação da taxa de 10% será 55.000,00.

Com esse ajuste, o resultado será algo assim:

DIGITE O SEU NOME 
JOTAPE
OLA JOTAPE
DIGITE SEU SALDO
50000
NOSSA,JOTAPE VC TEM GRANA PACAS HEIN!
SALDO APOS APLICACAO DE UMA TAXA DE 10% 
SALDO 55.000,00

Agora, o formato está correto!
Qualquer duvida comente ai.
Bons estudos.