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.
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.
Estrutura pai que agrupa itens elementares
PIC X(30)
Agrupa campos de endereço
PIC X(40)
PIC 9(8)
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 |
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 |
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:
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.
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.