Translate

quarta-feira, 7 de março de 2007

O que é o Comando DISPLAY em COBOL?

 

Bellacosa Mainframe e o comando display em cobol

O que é o Comando DISPLAY em COBOL?

O comando DISPLAY é uma das instruções mais simples e mais utilizadas do COBOL.

Sua função é:

exibir informações na tela, terminal, log ou SYSOUT.

Ele é equivalente a comandos como:

  • PRINT (BASIC)

  • printf() (C)

  • System.out.println() (Java)

  • print() (Python)


Para que serve o DISPLAY?

O DISPLAY é utilizado para:

  • mostrar mensagens;

  • exibir variáveis;

  • acompanhar processamento;

  • depurar programas;

  • registrar informações no SYSOUT.


Sintaxe básica

DISPLAY item

Exemplo simples

DISPLAY 'OLA MUNDO'

Saída:

OLA MUNDO

Exibindo uma variável

01 WS-NOME PIC X(20).

MOVE 'VAGNER' TO WS-NOME

DISPLAY WS-NOME

Resultado:

VAGNER

Exibindo texto e variável

DISPLAY 'CLIENTE: ' WS-NOME

Saída:

CLIENTE: VAGNER

Analogia simples

Imagine um operador olhando o console.

O DISPLAY envia informações para ele:

PROGRAMA
    ↓
DISPLAY
    ↓
TELA / SYSOUT

DISPLAY em Batch

No ambiente z/OS batch, normalmente o DISPLAY não aparece diretamente na tela.

Ele é gravado no:

  • SYSOUT

  • JES2

  • Spool

  • SDSF


Exemplo

DISPLAY 'PROCESSAMENTO INICIADO'

No SDSF aparecerá algo semelhante:

PROCESSAMENTO INICIADO

DISPLAY para Debug

Uma das utilizações mais comuns.

DISPLAY 'SALDO = ' WS-SALDO

Ajuda a verificar:

  • valores;

  • fluxo;

  • erros;

  • cálculos.


Exemplo de depuração

MOVE 1000 TO WS-SALDO

DISPLAY 'ANTES CALCULO: '
        WS-SALDO

Resultado:

ANTES CALCULO: 1000

DISPLAY de números

01 WS-VALOR PIC 9(5).

MOVE 12345 TO WS-VALOR

DISPLAY WS-VALOR

Saída:

12345

DISPLAY de COMP-3

Nem sempre gera saída legível.

Exemplo:

01 WS-SALDO PIC S9(7)V99 COMP-3.

Antes de exibir, normalmente usa-se:

MOVE WS-SALDO TO WS-EDITADO
DISPLAY WS-EDITADO

DISPLAY de datas

DISPLAY FUNCTION CURRENT-DATE

Exemplo:

2026060215304599

DISPLAY com Funções Intrínsecas

DISPLAY FUNCTION UPPER-CASE(WS-NOME)

Resultado:

VAGNER

DISPLAY em Programas Interativos

Muito comum em:

  • TSO;

  • Micro Focus;

  • GnuCOBOL;

  • ambientes educacionais.


Exemplo

DISPLAY 'DIGITE O NOME:'
ACCEPT WS-NOME

DISPLAY e ACCEPT

São comandos complementares.


DISPLAY:

DISPLAY 'INFORME O CPF'

Mostra informação.


ACCEPT:

ACCEPT WS-CPF

Recebe informação.


Fluxo típico

DISPLAY
     ↓
USUÁRIO VISUALIZA
     ↓
ACCEPT
     ↓
USUÁRIO DIGITA

DISPLAY UPON

Permite direcionar saída para dispositivos específicos.


Exemplo:

DISPLAY WS-MENSAGEM
        UPON CONSOLE

DISPLAY UPON CONSOLE

Muito usado por operadores e Sysprogs.

DISPLAY 'JOB FINALIZADO'
        UPON CONSOLE

Mensagem enviada ao console do sistema.


DISPLAY em CICS

Em aplicações CICS normalmente utiliza-se:

EXEC CICS SEND

mas DISPLAY ainda pode ser usado para debug.


DISPLAY no SYSOUT

Exemplo de saída:

INICIO PROCESSAMENTO

CLIENTE = 12345

SALDO = 5000.00

FIM PROCESSAMENTO

Exemplo completo

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(20).

PROCEDURE DIVISION.

    MOVE 'BELLACOSA'
         TO WS-NOME

    DISPLAY 'NOME: '
            WS-NOME

    STOP RUN.

Resultado:

NOME: BELLACOSA

Onde o DISPLAY é mais usado?

Batch

Mensagens no SYSOUT.


Debug

Análise de variáveis.


Testes

Validação de resultados.


Ensino COBOL

Primeiros programas.


Operação

Mensagens para operadores.


Curiosidades

1. DISPLAY é normalmente o primeiro comando aprendido em COBOL


2. Grande parte dos testes iniciais utiliza DISPLAY


3. Em batch, o DISPLAY geralmente vai para o spool JES2


4. Muitos programadores usam DISPLAY para investigar ABENDs


DISPLAY vs ACCEPT

ComandoFunção
DISPLAYExibe dados
ACCEPTRecebe dados

DISPLAY vs WRITE

ComandoDestino
DISPLAYTela/SYSOUT
WRITEArquivo

Resumo rápido

ComandoFinalidade
DISPLAYExibir dados
DISPLAY variávelMostrar conteúdo
DISPLAY textoMostrar mensagem
DISPLAY FUNCTIONMostrar função
DISPLAY UPON CONSOLEConsole operador
DISPLAY + ACCEPTEntrada e saída

Conclusão

O comando DISPLAY é a principal instrução de saída do COBOL. Ele permite exibir mensagens, variáveis, resultados de cálculos e informações de processamento, sendo amplamente utilizado para debug, monitoramento e geração de mensagens no SYSOUT de aplicações executadas em mainframes IBM Z.


terça-feira, 6 de março de 2007

O que é o Comando ACCEPT em COBOL?

 

Bellacosa Mainframe e o comando accept no cobol

O que é o Comando ACCEPT em COBOL?

O comando ACCEPT é utilizado para:

receber dados de uma fonte externa e armazená-los em uma variável COBOL.

Na prática, ele funciona como uma operação de:

ENTRADA DE DADOS

É o oposto do comando:

DISPLAY

Enquanto o DISPLAY mostra informações, o ACCEPT recebe informações.


Analogia simples

Imagine um terminal 3270.

O usuário digita:

VAGNER

O COBOL precisa capturar esse valor.

Quem faz isso é o:

ACCEPT


Sintaxe básica

ACCEPT nome-do-campo

Exemplo simples

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(30).

PROCEDURE DIVISION.

    DISPLAY 'DIGITE O NOME:'

    ACCEPT WS-NOME

    DISPLAY WS-NOME

    STOP RUN.

Resultado

DIGITE O NOME:
VAGNER

VAGNER

ACCEPT em programas interativos

Muito comum em:

  • TSO

  • Micro Focus COBOL

  • GnuCOBOL

  • ambientes de treinamento


Fluxo

DISPLAY
   ↓
USUÁRIO DIGITA
   ↓
ACCEPT
   ↓
PROCESSAMENTO

ACCEPT Numérico

01 WS-IDADE PIC 9(3).

ACCEPT WS-IDADE

Entrada:

25

Resultado:

WS-IDADE = 25

ACCEPT e Datas do Sistema

O ACCEPT também pode obter informações do sistema operacional.


Data atual

01 WS-DATA PIC 9(8).

ACCEPT WS-DATA FROM DATE

Resultado:

20260802

Formato:

AAAAMMDD

(depende do compilador)


Data Juliana

ACCEPT WS-DATA
       FROM DAY

Exemplo:

2026153

Ano + dia juliano.


Hora atual

01 WS-HORA PIC 9(8).

ACCEPT WS-HORA
       FROM TIME

Resultado:

14302599

Data e Hora

Alguns compiladores suportam:

ACCEPT WS-DATETIME
       FROM DATE YYYYMMDD

ACCEPT FROM DATE

Muito comum em batch.

ACCEPT WS-DATA-SISTEMA
       FROM DATE

ACCEPT FROM DAY

Retorna:

AAAA + DIA JULIANO

Exemplo

2 de junho de 2026:

2026153

ACCEPT FROM TIME

Retorna:

HHMMSSCC

Horas, minutos, segundos e centésimos.


Exemplo

15451035

ACCEPT em Mainframe Batch

No z/OS tradicional, ACCEPT de teclado é pouco utilizado.

Normalmente os dados vêm de:

  • arquivos;

  • parâmetros JCL;

  • SYSIN;

  • DB2;

  • VSAM.


Exemplo SYSIN

JCL:

//SYSIN DD *
VAGNER
/*

COBOL:

ACCEPT WS-NOME

ACCEPT e PARM do JCL

Muitas instalações utilizam:

//STEP1 EXEC PGM=PROG1,
 // PARM='PRODUCAO'

COBOL:

ACCEPT WS-PARM

ou

LINKAGE SECTION

dependendo do padrão adotado.


ACCEPT vs DISPLAY

DISPLAY:

DISPLAY 'OLA'

Mostra informação.


ACCEPT:

ACCEPT WS-NOME

Recebe informação.


Exemplo combinado

DISPLAY 'DIGITE O SALDO:'

ACCEPT WS-SALDO

DISPLAY WS-SALDO

Exemplo completo

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(30).

PROCEDURE DIVISION.

    DISPLAY 'NOME: '

    ACCEPT WS-NOME

    DISPLAY 'VOCE DIGITOU: '
    DISPLAY WS-NOME

    STOP RUN.

Onde o ACCEPT é mais usado?

Ambientes educacionais


Micro Focus COBOL


GnuCOBOL


Aplicações de terminal


Captura de data/hora do sistema


Curiosidades

1. ACCEPT existe desde as primeiras versões do COBOL


2. Em z/OS batch seu uso é mais restrito


3. ACCEPT FROM DATE era muito usado antes das funções intrínsecas


4. Hoje muitos programadores preferem:

FUNCTION CURRENT-DATE

em vez de:

ACCEPT FROM DATE

ACCEPT vs FUNCTION CURRENT-DATE

Forma antiga:

ACCEPT WS-DATA
       FROM DATE

Forma moderna:

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA

Resumo rápido

ComandoFunção
ACCEPTRecebe dados
ACCEPT FROM DATEData atual
ACCEPT FROM DAYData Juliana
ACCEPT FROM TIMEHora atual
DISPLAYExibe dados
CURRENT-DATEAlternativa moderna

Conclusão

O comando ACCEPT é a principal instrução de entrada de dados do COBOL. Ele permite receber informações digitadas pelo usuário ou obter dados do sistema, como data e hora, sendo um recurso clássico presente desde os primórdios da linguagem e ainda encontrado em aplicações COBOL executadas em ambientes IBM Z, Micro Focus e GnuCOBOL.

segunda-feira, 5 de março de 2007

O que é o Comando EVALUATE em COBOL?

 

Bellacosa Mainframe e o comando evaluate em cobol

O que é o Comando EVALUATE em COBOL?

O comando EVALUATE é uma das estruturas de decisão mais poderosas do COBOL.

Ele é equivalente ao:

  • CASE (C, Java, C#)

  • SWITCH (Java, JavaScript)

  • MATCH (algumas linguagens modernas)

Seu objetivo é:

executar diferentes ações dependendo do valor de uma variável ou condição.


Por que o EVALUATE existe?

Imagine um programa com vários IFs:

IF WS-OPCAO = 1
   PERFORM CONSULTA
ELSE
   IF WS-OPCAO = 2
      PERFORM INCLUSAO
   ELSE
      IF WS-OPCAO = 3
         PERFORM ALTERACAO
      END-IF
   END-IF
END-IF

Funciona, mas fica difícil de ler.

Com EVALUATE:

EVALUATE WS-OPCAO

   WHEN 1
      PERFORM CONSULTA

   WHEN 2
      PERFORM INCLUSAO

   WHEN 3
      PERFORM ALTERACAO

END-EVALUATE

Muito mais limpo.


Sintaxe básica

EVALUATE variável

   WHEN valor-1
      ação

   WHEN valor-2
      ação

   WHEN valor-3
      ação

END-EVALUATE

Exemplo simples

EVALUATE WS-NOTA

   WHEN 10
      DISPLAY 'EXCELENTE'

   WHEN 8
      DISPLAY 'MUITO BOM'

   WHEN 6
      DISPLAY 'APROVADO'

END-EVALUATE

WHEN OTHER

Funciona como:

DEFAULT
ELSE

Exemplo

EVALUATE WS-OPCAO

   WHEN 1
      DISPLAY 'CONSULTA'

   WHEN 2
      DISPLAY 'ALTERACAO'

   WHEN OTHER
      DISPLAY 'OPCAO INVALIDA'

END-EVALUATE

EVALUATE TRUE

Muito utilizado em sistemas corporativos.

Permite avaliar condições.


Exemplo

EVALUATE TRUE

   WHEN WS-SALDO > 10000
      DISPLAY 'CLIENTE VIP'

   WHEN WS-SALDO > 5000
      DISPLAY 'CLIENTE GOLD'

   WHEN OTHER
      DISPLAY 'CLIENTE NORMAL'

END-EVALUATE

Comparação com IF

IF:

IF WS-IDADE >= 18
   DISPLAY 'MAIOR'
ELSE
   DISPLAY 'MENOR'
END-IF

EVALUATE:

EVALUATE TRUE

   WHEN WS-IDADE >= 18
      DISPLAY 'MAIOR'

   WHEN OTHER
      DISPLAY 'MENOR'

END-EVALUATE

Avaliando faixas

EVALUATE TRUE

   WHEN WS-NOTA >= 9
      DISPLAY 'A'

   WHEN WS-NOTA >= 7
      DISPLAY 'B'

   WHEN WS-NOTA >= 5
      DISPLAY 'C'

   WHEN OTHER
      DISPLAY 'D'

END-EVALUATE

Avaliando múltiplos valores

EVALUATE WS-MES

   WHEN 1 2 3
      DISPLAY 'TRIMESTRE 1'

   WHEN 4 5 6
      DISPLAY 'TRIMESTRE 2'

   WHEN 7 8 9
      DISPLAY 'TRIMESTRE 3'

   WHEN 10 11 12
      DISPLAY 'TRIMESTRE 4'

END-EVALUATE

Avaliando múltiplas variáveis

Uma das características mais poderosas.

EVALUATE WS-TIPO ALSO WS-STATUS

   WHEN 'PF' ALSO 'A'
      DISPLAY 'PESSOA FISICA ATIVA'

   WHEN 'PJ' ALSO 'A'
      DISPLAY 'EMPRESA ATIVA'

   WHEN OTHER
      DISPLAY 'OUTRA SITUACAO'

END-EVALUATE

ALSO

Permite comparar vários campos simultaneamente.


Exemplo bancário

EVALUATE WS-CANAL ALSO WS-PRODUTO

   WHEN 'APP' ALSO 'PIX'
      PERFORM PROCESSA-PIX

   WHEN 'ATM' ALSO 'SAQUE'
      PERFORM PROCESSA-SAQUE

   WHEN OTHER
      PERFORM TRATA-ERRO

END-EVALUATE

Intervalos com THRU

EVALUATE WS-NOTA

   WHEN 0 THRU 4
      DISPLAY 'REPROVADO'

   WHEN 5 THRU 6
      DISPLAY 'RECUPERACAO'

   WHEN 7 THRU 10
      DISPLAY 'APROVADO'

END-EVALUATE

EVALUATE com LEVEL 88

Combinação muito elegante.

01 WS-STATUS PIC X.

   88 STATUS-OK VALUE 'S'.
   88 STATUS-ERRO VALUE 'N'.
EVALUATE TRUE

   WHEN STATUS-OK
      DISPLAY 'SUCESSO'

   WHEN STATUS-ERRO
      DISPLAY 'FALHA'

END-EVALUATE

Vantagens do EVALUATE

Mais legível

Menos IF aninhado

Fácil manutenção

Excelente para regras de negócio

Melhor organização do código


Cuidados

  • A ordem dos WHEN é importante.

  • WHEN OTHER deve ficar por último.

  • Em EVALUATE TRUE, a primeira condição verdadeira é executada.


Onde é mais utilizado?

Praticamente em todos os sistemas COBOL modernos:

  • Bancos

  • Seguradoras

  • Cartões

  • PIX

  • Folha salarial

  • Processamento batch

  • CICS


Exemplo completo

WORKING-STORAGE SECTION.

01 WS-OPERACAO PIC 9.

PROCEDURE DIVISION.

    MOVE 2 TO WS-OPERACAO

    EVALUATE WS-OPERACAO

       WHEN 1
          DISPLAY 'CONSULTA'

       WHEN 2
          DISPLAY 'INCLUSAO'

       WHEN 3
          DISPLAY 'ALTERACAO'

       WHEN OTHER
          DISPLAY 'INVALIDO'

    END-EVALUATE

    STOP RUN.

Saída:

INCLUSAO

EVALUATE vs IF

IFEVALUATE
Bom para poucas condiçõesIdeal para muitas condições
Pode gerar IFs aninhadosCódigo mais limpo
Menos legível em regras complexasExcelente legibilidade
SimplesMais poderoso

Resumo rápido

ElementoFunção
EVALUATEEstrutura de decisão
WHENCondição
WHEN OTHERCaso padrão
ALSOMúltiplas variáveis
THRUIntervalo
EVALUATE TRUEAvaliação de expressões

Conclusão

O comando EVALUATE é a principal estrutura de decisão múltipla do COBOL. Ele substitui grandes blocos de IF aninhados, melhora a legibilidade do código e é amplamente utilizado em sistemas corporativos executados em mainframes IBM Z para implementar regras de negócio complexas de forma organizada e eficiente.


domingo, 4 de março de 2007

O que é o Comando MOVE em COBOL?

 

Bellacosa Mainframe e o comando move em cobol

O que é o Comando MOVE em COBOL?

O comando MOVE é um dos comandos mais utilizados em COBOL.

Sua função é simples:

copiar dados de um campo para outro.

Praticamente todo programa COBOL utiliza MOVE para:

  • transferir valores;

  • inicializar variáveis;

  • mover dados de arquivos;

  • preencher layouts;

  • preparar registros para gravação.


Sintaxe básica

MOVE origem TO destino

Exemplo simples

MOVE 100 TO WS-SALDO

Resultado:

WS-SALDO = 100

Movendo texto

MOVE 'BELLACOSA'
     TO WS-NOME

Resultado:

WS-NOME = BELLACOSA

Movendo entre variáveis

MOVE WS-SALDO-ATUAL
     TO WS-SALDO-ANTERIOR

Analogia simples

Imagine um operador copiando um documento de uma pasta para outra.

O MOVE faz exatamente isso:

ORIGEM
   ↓
DESTINO

Exemplo completo

WORKING-STORAGE SECTION.

01 WS-NOME     PIC X(20).
01 WS-CLIENTE  PIC X(20).

PROCEDURE DIVISION.

    MOVE 'VAGNER'
         TO WS-NOME

    MOVE WS-NOME
         TO WS-CLIENTE

    DISPLAY WS-CLIENTE

    STOP RUN.

Saída:

VAGNER

MOVE Numérico

MOVE 5000
     TO WS-SALARIO

MOVE Decimal

MOVE 1234.56
     TO WS-VALOR

MOVE entre formatos diferentes

COBOL realiza conversões automáticas em muitos casos.

Exemplo:

01 WS-TEXTO PIC X(5).
01 WS-NUM   PIC 9(5).

MOVE WS-NUM TO WS-TEXTO

MOVE para grupos

Uma característica poderosa do COBOL.

01 CLIENTE.
   05 NOME  PIC X(20).
   05 IDADE PIC 9(3).

01 CLIENTE-BKP PIC X(23).
MOVE CLIENTE
     TO CLIENTE-BKP

Move toda a estrutura.


MOVE CORRESPONDING

Também chamado:

MOVE CORR

Move campos com o mesmo nome.


Exemplo

01 CLIENTE-A.
   05 NOME PIC X(20).
   05 IDADE PIC 9(3).

01 CLIENTE-B.
   05 NOME PIC X(20).
   05 IDADE PIC 9(3).
MOVE CORRESPONDING CLIENTE-A
                   TO CLIENTE-B

O que acontece?

NOME  → NOME
IDADE → IDADE

Automaticamente.


MOVE HIGH-VALUES

Preenche com o maior valor hexadecimal.

MOVE HIGH-VALUES
     TO WS-CAMPO

Muito usado em:

  • VSAM;

  • inicialização;

  • pesquisas.


MOVE LOW-VALUES

Preenche com o menor valor hexadecimal.

MOVE LOW-VALUES
     TO WS-CAMPO

MOVE SPACES

Preenche com espaços.

MOVE SPACES
     TO WS-NOME

Equivalente:

MOVE ' '
     TO WS-NOME

MOVE ZEROES

Preenche com zeros.

MOVE ZEROES
     TO WS-SALDO

MOVE ALL

Repete um valor.

MOVE ALL '*'
     TO WS-LINHA

Resultado:

********************

MOVE em arquivos

Muito usado antes do WRITE.

MOVE WS-NOME
     TO NOME-SAIDA

WRITE REG-SAIDA

MOVE em DB2

Muito usado para preencher host variables.

MOVE WS-CPF
     TO HV-CPF

MOVE em CICS

Também extremamente comum.

MOVE WS-MENSAGEM
     TO MSG-AREA

Cuidados com MOVE

Truncamento

Campo menor que origem.

Exemplo:

PIC X(5)

Recebendo:

BELLACOSA

Resultado:

BELLA

Perda de casas decimais

MOVE 123.99
     TO PIC 9(3)

Pode perder precisão.


Conversões inválidas

Mover texto para numérico pode gerar erro lógico.


MOVE vs COMPUTE

MOVE:

MOVE 100 TO WS-A

Apenas copia.


COMPUTE:

COMPUTE WS-A = 50 + 50

Calcula.


MOVE vs ADD

MOVE:

MOVE 100 TO WS-A

Substitui conteúdo.


ADD:

ADD 100 TO WS-A

Soma ao conteúdo existente.


Onde o MOVE é utilizado?

Praticamente em todos os programas COBOL:

  • Batch;

  • CICS;

  • DB2;

  • VSAM;

  • Arquivos QSAM;

  • APIs;

  • Processamento financeiro.


Curiosidades

1. MOVE é provavelmente o comando mais utilizado do COBOL

2. Alguns sistemas executam milhões de MOVEs por segundo

3. MOVE CORRESPONDING é muito usado em sistemas corporativos

4. Grande parte da integração entre layouts depende de MOVE


Resumo rápido

ComandoFunção
MOVECopia dados
MOVE CORRESPONDINGCopia campos iguais
MOVE SPACESPreenche espaços
MOVE ZEROESPreenche zeros
MOVE HIGH-VALUESMaior valor hexadecimal
MOVE LOW-VALUESMenor valor hexadecimal
MOVE ALLRepete conteúdo

Conclusão

O comando MOVE é a principal instrução de transferência de dados do COBOL. Ele permite copiar informações entre variáveis, registros e estruturas de forma simples, eficiente e segura, sendo um dos pilares de praticamente todos os sistemas executados em mainframes IBM Z.


sábado, 3 de março de 2007

O que são ADD, SUBTRACT, MULTIPLY e DIVIDE em COBOL?

 

Bellacosa Mainframe e os comandos de calculo no COBOL

O que são ADD, SUBTRACT, MULTIPLY e DIVIDE em COBOL?

Antes do comando COMPUTE se popularizar, os cálculos em COBOL eram realizados principalmente através de quatro verbos aritméticos clássicos:

  • ADD

  • SUBTRACT

  • MULTIPLY

  • DIVIDE

Esses comandos fazem parte do COBOL desde suas primeiras versões e continuam sendo amplamente utilizados em sistemas batch e online.


ADD

O comando ADD realiza:

soma de valores.


Sintaxe básica

ADD valor-1 TO valor-2

Exemplo:

ADD 100 TO WS-SALDO

Se WS-SALDO era:

500

Passará a ser:

600

Usando GIVING

ADD WS-A WS-B
    GIVING WS-TOTAL

Exemplo:

WS-A = 10
WS-B = 20

Resultado:

WS-TOTAL = 30

SUBTRACT

O comando SUBTRACT realiza:

subtração.


Sintaxe básica

SUBTRACT valor-1
    FROM valor-2

Exemplo:

SUBTRACT 100
    FROM WS-SALDO

Se WS-SALDO era:

500

Resultado:

400

Com GIVING

SUBTRACT WS-DESCONTO
    FROM WS-VALOR
    GIVING WS-LIQUIDO

MULTIPLY

O comando MULTIPLY realiza:

multiplicação.


Sintaxe básica

MULTIPLY valor-1
    BY valor-2

Exemplo:

MULTIPLY 10
    BY WS-TOTAL

Se WS-TOTAL era:

50

Resultado:

500

Com GIVING

MULTIPLY WS-QTD
    BY WS-PRECO
    GIVING WS-TOTAL

Exemplo

QTD   = 5
PRECO = 100

Resultado:

500

DIVIDE

O comando DIVIDE realiza:

divisão.


Sintaxe básica

DIVIDE valor-1
    INTO valor-2

Exemplo

DIVIDE 2
    INTO WS-TOTAL

Se WS-TOTAL era:

100

Resultado:

50

Forma mais usada

DIVIDE WS-SOMA
    BY WS-QTD
    GIVING WS-MEDIA

Exemplo

SOMA = 100
QTD  = 5

Resultado:

MEDIA = 20

ON SIZE ERROR

Todos os comandos matemáticos podem usar:

ON SIZE ERROR

Exemplo:

ADD WS-A TO WS-B

   ON SIZE ERROR
      DISPLAY 'ERRO'
END-ADD

END-ADD

COBOL moderno permite fechamento explícito.

ADD WS-A TO WS-B
END-ADD

END-SUBTRACT

SUBTRACT WS-A
    FROM WS-B
END-SUBTRACT

END-MULTIPLY

MULTIPLY WS-A
    BY WS-B
END-MULTIPLY

END-DIVIDE

DIVIDE WS-A
    INTO WS-B
END-DIVIDE

Exemplo completo

WORKING-STORAGE SECTION.

01 WS-SALARIO     PIC 9(7)V99.
01 WS-BONUS       PIC 9(5)V99.
01 WS-TOTAL       PIC 9(7)V99.

PROCEDURE DIVISION.

    MOVE 5000 TO WS-SALARIO
    MOVE 1000 TO WS-BONUS

    ADD WS-BONUS
        TO WS-SALARIO
        GIVING WS-TOTAL

    DISPLAY WS-TOTAL

    STOP RUN.

Resultado:

6000.00

Comparação com COMPUTE

ADD

ADD A TO B GIVING C

Equivalente:

COMPUTE C = A + B

SUBTRACT

SUBTRACT A FROM B
GIVING C

Equivalente:

COMPUTE C = B - A

MULTIPLY

MULTIPLY A BY B
GIVING C

Equivalente:

COMPUTE C = A * B

DIVIDE

DIVIDE A INTO B
GIVING C

Equivalente:

COMPUTE C = B / A

Quando usar ADD, SUBTRACT, MULTIPLY e DIVIDE?

Muitos sistemas legados COBOL utilizam esses comandos porque:

  • são extremamente claros;

  • seguem o padrão COBOL clássico;

  • facilitam manutenção de sistemas antigos.


Quando usar COMPUTE?

Quando a fórmula for mais complexa:

COMPUTE WS-TOTAL =
       (WS-A + WS-B)
       * WS-C
       / WS-D

Curiosidade

Durante décadas, praticamente todos os sistemas bancários COBOL foram escritos usando:

ADD
SUBTRACT
MULTIPLY
DIVIDE

O comando COMPUTE tornou-se popular posteriormente por deixar as fórmulas mais próximas da matemática tradicional.


Resumo rápido

ComandoFunção
ADDSoma
SUBTRACTSubtração
MULTIPLYMultiplicação
DIVIDEDivisão
GIVINGGuarda resultado
ON SIZE ERRORTrata estouro
COMPUTEFórmulas completas

Conclusão

ADD, SUBTRACT, MULTIPLY e DIVIDE são os verbos aritméticos clássicos do COBOL. Eles continuam presentes em milhões de linhas de código executadas diariamente em mainframes IBM Z, especialmente em aplicações financeiras, bancárias e de processamento batch.


sexta-feira, 2 de março de 2007

O que é o Comando COMPUTE em COBOL?

 

Bellacosa Mainframe e o comando compute no cobol

O que é o Comando COMPUTE em COBOL?

O comando COMPUTE é uma das instruções mais importantes do COBOL para realizar:

  • cálculos matemáticos;

  • fórmulas financeiras;

  • operações aritméticas;

  • expressões complexas.

Ele foi criado para simplificar operações que antes exigiam vários comandos separados.


O que faz o COMPUTE?

O COMPUTE permite:

calcular uma expressão matemática completa em uma única instrução.


Sintaxe básica

COMPUTE resultado = expressão

Exemplo:

COMPUTE WS-TOTAL = WS-VALOR1 + WS-VALOR2

Exemplo simples

Sem COMPUTE:

ADD WS-VALOR1 TO WS-VALOR2 GIVING WS-TOTAL

Com COMPUTE:

COMPUTE WS-TOTAL =
        WS-VALOR1 + WS-VALOR2

Operações suportadas

Soma

COMPUTE WS-TOTAL =
        WS-A + WS-B

Subtração

COMPUTE WS-SALDO =
        WS-CREDITO - WS-DEBITO

Multiplicação

COMPUTE WS-TOTAL =
        WS-QUANTIDADE * WS-PRECO

Divisão

COMPUTE WS-MEDIA =
        WS-SOMA / WS-QTD

Potência

COMPUTE WS-RESULTADO =
        WS-VALOR ** 2

Operadores matemáticos

OperadorSignificado
+Soma
-Subtração
*Multiplicação
/Divisão
**Potência

Exemplo de expressão complexa

COMPUTE WS-RESULTADO =
       (WS-A + WS-B)
       * WS-C
       / WS-D

Ordem de precedência

O COBOL segue regras matemáticas normais:

()
**
* /
+ -

Exemplo

COMPUTE WS-TOTAL =
        10 + 20 * 3

Resultado:

70

Porque:

20 * 3 = 60
60 + 10 = 70

Usando parênteses

COMPUTE WS-TOTAL =
       (10 + 20) * 3

Resultado:

90

COMPUTE com valores monetários

Muito comum em sistemas bancários.

COMPUTE WS-JUROS =
        WS-SALDO * WS-TAXA

Exemplo financeiro

COMPUTE WS-VALOR-FINAL =
        WS-VALOR +
        (WS-VALOR * WS-PERCENTUAL / 100)

COMPUTE com COMP-3

Extremamente comum.

01 WS-SALDO      PIC S9(7)V99 COMP-3.
01 WS-JUROS      PIC S9(5)V99 COMP-3.
01 WS-TOTAL      PIC S9(9)V99 COMP-3.

COMPUTE WS-TOTAL =
        WS-SALDO + WS-JUROS

COMPUTE e Funções Intrínsecas

Podem ser usados juntos.

Exemplo:

COMPUTE WS-RAIZ =
        FUNCTION SQRT(625)

Resultado:

25

Exemplo com ABS

COMPUTE WS-VALOR =
        FUNCTION ABS(-500)

Resultado:

500

COMPUTE com CURRENT-DATE

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA

Embora CURRENT-DATE normalmente seja usado com MOVE, ele também pode participar de expressões.


ON SIZE ERROR

Muito importante.

Detecta estouro de campo.

Exemplo:

COMPUTE WS-TOTAL =
        WS-A * WS-B

   ON SIZE ERROR
      DISPLAY 'ERRO DE TAMANHO'
END-COMPUTE

O que é Size Error?

Quando o resultado não cabe no campo.

Exemplo:

Campo:

PIC 9(3)

Máximo:

999

Resultado calculado:

1500

Ocorre:

SIZE ERROR


Exemplo completo

WORKING-STORAGE SECTION.

01 WS-SALARIO      PIC 9(7)V99.
01 WS-BONUS        PIC 9(5)V99.
01 WS-TOTAL        PIC 9(7)V99.

PROCEDURE DIVISION.

    MOVE 5000 TO WS-SALARIO
    MOVE 1000 TO WS-BONUS

    COMPUTE WS-TOTAL =
            WS-SALARIO + WS-BONUS

    DISPLAY WS-TOTAL

    STOP RUN.

Saída:

6000.00

COMPUTE vs ADD

ADD:

ADD A TO B GIVING C

COMPUTE:

COMPUTE C = A + B

COMPUTE vs MULTIPLY

MULTIPLY:

MULTIPLY A BY B GIVING C

COMPUTE:

COMPUTE C = A * B

Vantagens do COMPUTE

Código mais legível

Menos instruções

Expressões complexas

Fácil manutenção

Mais próximo da matemática tradicional


Cuidados

  • Verificar tamanho dos campos.

  • Usar ON SIZE ERROR quando necessário.

  • Atenção com casas decimais.

  • Validar divisões por zero.


Onde o COMPUTE é mais usado?

Praticamente em todos os sistemas COBOL:

  • bancos;

  • cartões;

  • seguros;

  • folha salarial;

  • faturamento;

  • cálculo de juros;

  • cálculo de impostos.


Curiosidade

Antes do COMPUTE, muitos cálculos exigiam combinações de:

ADD
SUBTRACT
MULTIPLY
DIVIDE

O COMPUTE trouxe uma sintaxe muito mais próxima das fórmulas matemáticas tradicionais.


Resumo rápido

ComandoFunção
COMPUTEExecuta cálculos
+Soma
-Subtração
*Multiplicação
/Divisão
**Potência
ON SIZE ERRORTrata estouro
FUNCTIONUsa funções intrínsecas

Conclusão

O comando COMPUTE é a principal instrução de cálculo do COBOL. Ele permite executar operações matemáticas simples ou complexas de forma clara, legível e eficiente, sendo amplamente utilizado em aplicações financeiras e sistemas corporativos executados em mainframes IBM Z.

quinta-feira, 1 de março de 2007

O que é Função Intrínseca em COBOL?

 

Bellacosa Mainframe e as funções intrinsecas em COBOL

O que é Função Intrínseca em COBOL?

As funções intrínsecas (Intrinsic Functions) são funções internas do COBOL que permitem realizar operações comuns sem a necessidade de criar rotinas próprias.

Elas foram introduzidas para facilitar tarefas como:

  • manipulação de datas;

  • cálculos matemáticos;

  • conversão de dados;

  • tratamento de strings;

  • operações estatísticas.

Em vez de escrever dezenas de linhas de código, você pode usar uma função pronta fornecida pelo compilador COBOL.


O que significa "intrínseca"?

Significa:

embutida na linguagem.

Ou seja, já faz parte do compilador COBOL.

Não é necessário:

  • COPY;

  • CALL;

  • subprograma;

  • biblioteca externa.


Sintaxe básica

FUNCTION nome-da-funcao(argumentos)

Exemplo:

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA

Exemplo simples

Sem função intrínseca:

COMPUTE WS-IDADE = ANO-ATUAL - ANO-NASCIMENTO

Com função:

COMPUTE WS-RAIZ =
        FUNCTION SQRT(144)

Resultado:

12

Principais categorias

Datas e Horas

Matemáticas

Conversão de Dados

Strings

Estatísticas

Financeiras


Função CURRENT-DATE

Uma das mais usadas.

Retorna:

  • data;

  • hora;

  • milissegundos;

  • fuso horário.

Exemplo:

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA-HORA

Resultado:

2026080215304500

Função LENGTH

Retorna o tamanho de um campo.

Exemplo:

COMPUTE WS-TAM =
        FUNCTION LENGTH(WS-NOME)

Função UPPER-CASE

Converte texto para maiúsculo.

MOVE FUNCTION UPPER-CASE(WS-NOME)
     TO WS-NOME-MAIUSCULO

Função LOWER-CASE

Converte texto para minúsculo.

MOVE FUNCTION LOWER-CASE(WS-NOME)
     TO WS-NOME-MINUSCULO

Função REVERSE

Inverte caracteres.

MOVE FUNCTION REVERSE("COBOL")
     TO WS-TEXTO

Resultado:

LOBOC

Função NUMVAL

Converte texto para número.

Exemplo:

MOVE FUNCTION NUMVAL("12345")
     TO WS-VALOR

Função NUMVAL-C

Converte valores monetários.

Exemplo:

MOVE FUNCTION NUMVAL-C("R$1.234,56")
     TO WS-VALOR

(Dependendo da configuração regional do compilador.)


Função INTEGER

Remove casas decimais.

COMPUTE WS-INTEIRO =
        FUNCTION INTEGER(123.99)

Resultado:

123

Função ABS

Valor absoluto.

COMPUTE WS-VALOR =
        FUNCTION ABS(-500)

Resultado:

500

Função SQRT

Raiz quadrada.

COMPUTE WS-RAIZ =
        FUNCTION SQRT(625)

Resultado:

25

Função RANDOM

Gera número aleatório.

COMPUTE WS-NUM =
        FUNCTION RANDOM

Função MOD

Retorna resto da divisão.

COMPUTE WS-RESTO =
        FUNCTION MOD(10 3)

Resultado:

1

Função MAX

Maior valor.

COMPUTE WS-MAX =
        FUNCTION MAX(10 20 30)

Resultado:

30

Função MIN

Menor valor.

COMPUTE WS-MIN =
        FUNCTION MIN(10 20 30)

Resultado:

10

Função MEAN

Média aritmética.

COMPUTE WS-MEDIA =
        FUNCTION MEAN(10 20 30)

Resultado:

20

Função ORD

Retorna código ordinal do caractere.

COMPUTE WS-COD =
        FUNCTION ORD("A")

Função CHAR

Retorna caractere de um código.

MOVE FUNCTION CHAR(65)
     TO WS-LETRA

Resultado:

A

Função TRIM

Remove espaços.

MOVE FUNCTION TRIM(WS-NOME)
     TO WS-NOME-LIMPO

Exemplo prático

WORKING-STORAGE SECTION.

01 WS-NOME          PIC X(20).
01 WS-NOME-MAIUS    PIC X(20).

PROCEDURE DIVISION.

    MOVE 'bellacosa'
         TO WS-NOME

    MOVE FUNCTION UPPER-CASE(WS-NOME)
         TO WS-NOME-MAIUS

    DISPLAY WS-NOME-MAIUS

    STOP RUN.

Saída:

BELLACOSA

Funções muito usadas em Mainframe

As mais encontradas em sistemas corporativos:

  • CURRENT-DATE

  • LENGTH

  • NUMVAL

  • NUMVAL-C

  • UPPER-CASE

  • LOWER-CASE

  • TRIM

  • INTEGER

  • MOD

  • ABS


Vantagens

Menos código

Mais legibilidade

Melhor manutenção

Menos rotinas auxiliares

Melhor produtividade


Cuidados

Nem todas as funções estão disponíveis em compiladores muito antigos.

Alguns ambientes COBOL legados podem não suportar:

  • TRIM

  • UPPER-CASE

  • LOWER-CASE

  • funções estatísticas mais modernas


Curiosidade

Antes das funções intrínsecas, tarefas simples exigiam dezenas de linhas de código COBOL.

Converter um texto para maiúsculo, por exemplo, frequentemente exigia tabelas de tradução e loops complexos.

As funções intrínsecas simplificaram enormemente o desenvolvimento COBOL moderno.


Resumo rápido

FunçãoFinalidade
CURRENT-DATEData e hora atual
LENGTHTamanho do campo
UPPER-CASEMaiúsculas
LOWER-CASEMinúsculas
TRIMRemove espaços
NUMVALTexto → Número
ABSValor absoluto
SQRTRaiz quadrada
MODResto da divisão
MAXMaior valor
MINMenor valor
RANDOMNúmero aleatório

Conclusão

As funções intrínsecas são recursos nativos do COBOL que simplificam cálculos, manipulação de dados, datas e strings. Elas tornam os programas mais legíveis, reduzem a quantidade de código e são amplamente utilizadas em aplicações modernas de COBOL no ambiente mainframe IBM Z.