Declarar variáveis COBOL • Cláusula PICTURE (PIC)

Tipos de Variáveis no COBOL: Domine a Sintaxe PICTURE (PIC)

Aprenda a declarar variáveis COBOL com a cláusula PICTURE (PIC) e entenda os níveis de dados COBOL (01, 05, 10, 77). O coração da precisão do COBOL está aqui.

Precisão Financeira
Aritmética decimal exata (PIC/COMP-3).
Tipagem Estática
Formatos explícitos garantem integridade.
Eficiência de Memória
DISPLAY vs PACKED (COMP‑3) otimizam armazenamento.

O Conceito de Nível (Level Numbers)

Em COBOL, os níveis definem a hierarquia dos dados. O nível 01 representa a estrutura pai (um registro completo). Dentro dele, níveis 05, 10 (e assim por diante) detalham subcomponentes do registro. O nível 77 é usado para itens independentes que não pertencem a nenhuma estrutura pai.

Dica: Projetar a hierarquia ajuda na auditoria e manutenção do código, facilitando a leitura dos registros.
01 CLIENTE-REGISTRO (Group Item)

Estrutura pai que agrupa itens elementares

05 NOME-CLIENTE (Elementary)

PIC X(30)

05 ENDERECO (Group Item)

Agrupa campos de endereço

10 LOGRADOURO (Elementary)

PIC X(40)

10 CEP (Elementary)

PIC 9(8)

77 MOEDA-LOCAL (Isolada)

PIC X(3) • Não pertence a 01

A Sintaxe PIC (O coração da página)

Tipo Descrição Exemplo Uso comum
PIC X(n) Alfanumérico (letras, números e símbolos) PIC X(20) Nomes, endereços, códigos mistos
PIC 9(n) Numérico puro (dígitos 0–9) PIC 9(06) Quantidades inteiras, contadores
PIC 9(n)V9(n) Numérico com ponto decimal implícito PIC 9(07)V9(2) Valores monetários (ex.: 1234567,89)
PIC S9(n)V9(n) Numérico com sinal (positivo/negativo) PIC S9(05)V9(3) Saldo (crédito/débito), variações
SEO: cláusula picture cobol, tipos de dados cobol, pic 9 v 9 cobol, níveis de dados cobol.

Armazenamento e Precisão (DISPLAY vs PACKED)

Formato Representação Uso típico Vantagem
PIC X(n) Caractere (DISPLAY) Textos, códigos mistos Flexível, porém não numérico
PIC 9(n) Dígitos (DISPLAY) Números inteiros/visuais Leitura direta, custo maior de armazenamento
COMP‑3 (PACKED) Decimal empacotado (2 dígitos/byte) Financeiro (precisão/eficiência) Menos espaço e aritmética decimal exata
Precisão implícita: PIC 9(07)V9(02) define duas casas decimais fixas sem ponto flutuante (IEEE‑754), evitando erros de arredondamento comuns em Java/Python.

Exemplo Prático (Missão Crítica)

Simulação de conta bancária com decimal empacotado e sinal para garantir exatidão monetária e eficiência:

conta-bancaria.cbl
DATA DIVISION.
WORKING-STORAGE SECTION.
01  SALDO-CONTA              PIC S9(07)V99 COMP-3.
77  MOEDA-LOCAL              PIC X(3) VALUE "BRL".

PROCEDURE DIVISION.
    MOVE +000100050 TO SALDO-CONTA     *> 1000,50 com duas casas decimais
    DISPLAY "SALDO (" MOEDA-LOCAL "): " SALDO-CONTA.
Por que S e COMP‑3? S registra o sinal (crédito/débito) e COMP‑3 usa decimal empacotado para eficiência de memória e aritmética exata — padrão em missão crítica.

Diferenciação Crucial: V não é ponto flutuante

Em COBOL, o V fixa a posição decimal — não há float/double. O valor é armazenado em decimal (ex.: COMP‑3 para compactação), o que evita os erros de arredondamento comuns em ponto flutuante de linguagens de uso geral. Resultado: auditoria mais simples e conformidade sob alta volumetria.

FAQ de Especialista

Porque é que o COBOL não usa ponto flutuante?

Por exatidão aritmética: decimal (ex.: COMP‑3) evita os erros do IEEE‑754 sob alta volumetria. É um requisito de auditoria e conformidade em finanças.

Qual a diferença entre uma variável 01 e 77?

01 define uma estrutura (Group Item) que pode conter subitens (05/10...). 77 define itens independentes (Elementary) fora de qualquer grupo — úteis para constantes e variáveis isoladas.

O que acontece se eu tentar colocar um número numa PIC X?

Apenas o caractere do número será armazenado (ex.: '1'), não um valor numérico. Para operações matemáticas, use PIC 9 / 9V9 e formatos decimais.

O que é uma variável de nível 77?

É um item independente, fora da hierarquia de um registro nível 01. Útil para constantes e variáveis isoladas.

Como o COBOL lida com datas?

Com formatos explícitos (ex.: YYYYMMDD como PIC 9(8)) e, em ambientes modernos, funções de data podem ser usadas. A clareza evita ambiguidades.