Translate

Mostrar mensagens com a etiqueta Estruturas de Dados. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Estruturas de Dados. Mostrar todas as mensagens

segunda-feira, 11 de agosto de 2025

Programa COBOL usando ponteiro de memória

 

Programa COBOL usando ponteiro de memória

4,424 followers

Salve jovem padawan, nesta inspirada sexta-feira resolvi explorar um tema um pouco mais complexo.

Em minhas aulas sinto uma certa dificuldade em apresentar o tema, às vezes, a explicação acaba confundindo ainda mais. Por isso nada melhor que colocarmos a mão na massa, digo no teclado.

Relebrando conceitos

SET - O comando SET designa um valor para uma referência COBOL.

ADDRESS - Método simples de obter capacidade de endereçamento para áreas de dados de memoria definidas na LINKAGE SECTION usando variáveis de ponteiro e o registro especial ADDRESS

Programa COBOL120.

O programa COBOL120 é bem interessante, no DATA DIVISION teremos duas áreas de memórias distintas:


  1. Working Storage Section
  2. Linkage Section


As variáveis na Working são do gênero Grupo com 4 variáveis do tipo string e inicializadas com valores. Um ponteiro de memória e um índice contador.

Na Linkage temos uma Tabela interna com string de 4 bytes e com 4 ocorrências.

Processamento

O código é simples, contem alguns displays, dois laço Perform Varying e comandos SET e Address of, para capturar o endereço da memória e alocar na nova variáveis. Ao final faço novo display mostrando a tabela inicializada sem MOVE/ACCEPT/REDEFINES.

 *****************************************************************
      * DATA     : 06/09/2024
      * AUTOR    : VAGNER RENATO BELLACOSA
      * OBJETIVO : PROGRAMA EXEMPLO ARQUIVO QSAM LOOP
      * USO DE ENDERECO DE MEMORIA E TABELA INTERNA
      * USO DE ALOCACAO DINAMICA
      * CPD      : INEFE
      *****************************************************************
       IDENTIFICATION DIVISION.
      *************************
       PROGRAM-ID. COBOL120.
       AUTHOR. VAGNER BELLACOSA.
       DATE-WRITTEN. 06/09/24 @ 21:18:00.
       DATE-COMPILED. 2024-09-06.
       SECURITY. TESTE INEFE
       INSTALLATION. INEFE MARIST

      **********************
       ENVIRONMENT DIVISION.
      **********************
      *
       CONFIGURATION SECTION.
      *
       SOURCE-COMPUTER. IBM-I.
       OBJECT-COMPUTER. IBM-I.
       SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
      *
       INPUT-OUTPUT SECTION.
      *

      ***************
       DATA DIVISION.
      ***************
      *
       WORKING-STORAGE  SECTION.
      *
       01 WORK-AREA.
        05 WSS-DATA1           PIC X(4) VALUE 'AAAA'.
        05 WSS-DATA2           PIC X(4) VALUE 'BBBB'.
        05 WSS-DATA3           PIC X(4) VALUE 'CCCC'.
        05 WSS-DATA4           PIC X(4) VALUE 'ZZZZ'.
      *
       77 WSS-PTR POINTER.
       77 WSS-IDX              PIC 9.
      *
       LINKAGE SECTION.
      *
       01 TBL-DATA.
        05 TBL-DATA-ALPHA      PIC X(4) OCCURS 4 TIMES.
      *
      ********************
       PROCEDURE DIVISION.                                              00210000
      ********************

           DISPLAY ' '
           DISPLAY ' '
           DISPLAY ' COBOL120'
           DISPLAY ' USO DE TABELA INTERNA E MOVIMENTACAO POR PONTEIRO'
           DISPLAY ' DE MEMORIA.'
           DISPLAY ' '

      *
           DISPLAY ' TABELA INICIAL - VAZIA'.
           DISPLAY ' '.

           PERFORM VARYING WSS-IDX FROM 1 BY 1
                                 UNTIL WSS-IDX > 4
             DISPLAY ' TBL-DATA-ALPHA [' WSS-IDX '] = '
                       TBL-DATA-ALPHA(WSS-IDX)
           END-PERFORM.

           DISPLAY ' '.

      *
           SET WSS-PTR TO ADDRESS OF WORK-AREA.
           SET ADDRESS OF TBL-DATA TO WSS-PTR.
      *
           DISPLAY ' RECEBI O MESMO ENDERECO DA WORKING'
           DISPLAY ' TABELA INTERNA INICIALIZADA PELO ADDRESS E SET'
           DISPLAY ' '.

           PERFORM VARYING WSS-IDX FROM 1 BY 1
                                 UNTIL WSS-IDX > 4
             DISPLAY ' TBL-DATA-ALPHA [' WSS-IDX '] = '
                       TBL-DATA-ALPHA(WSS-IDX)
           END-PERFORM.

           DISPLAY ' '.

           STOP RUN.

       END PROGRAM COBOL120.
      ********************** FIM PROGRAMA   **************************** 

Como funciona.


Article content


  • SET WSS-PTR TO ADDRESS OF WORK-AREA.


O comando acima obtém o ponteiro de memória da WORK-AREA e aloca na variável WSS-PTR.


  • SET ADDRESS OF TBL-DATA TO WSS-PTR.


No segundo comando SET ADDRESS atribui o endereço do ponteiro na tabela TBL-DATA, que a partir de agora tem o mesmo conteúdo das variáveis.


Article content
 PERFORM VARYING WSS-IDX FROM 1 BY 1
                                 UNTIL WSS-IDX > 4
             DISPLAY ' TBL-DATA-ALPHA [' WSS-IDX '] = '
                       TBL-DATA-ALPHA(WSS-IDX)
           END-PERFORM.

Esse laço lista todas as ocorrencias da Tabela Interna na Sysout.

Espero ter ajudado.


terça-feira, 26 de janeiro de 2021

☕🔥 25 CODING PATTERNS — O “DNA INVISÍVEL” QUE TODO PROGRAMADOR DE MAINFRAME USA (MESMO SEM PERCEBER)

 

Bellacosa Mainframe apresenta 25 coding patterns

☕🔥 25 CODING PATTERNS — O “DNA INVISÍVEL” QUE TODO PROGRAMADOR DE MAINFRAME USA (MESMO SEM PERCEBER)

Existe uma verdade que separa programadores comuns de engenheiros realmente perigosos:

🔥 os melhores não decoram código…

eles reconhecem padrões.

E isso vale para:

  • Python

  • Java

  • C

  • COBOL

  • Assembler

  • PL/I

  • DB2 SQL

  • CICS

  • z/OS

Porque no fundo…

programação é:

resolver problemas repetitivos de maneiras inteligentes.

E quando analisamos esses Coding Patterns ao estilo Bellacosa Mainframe…

descobrimos algo fascinante:

🔥 o Mainframe já utilizava muitos desses conceitos MUITO antes deles virarem moda em entrevistas LeetCode.


☕🔥 O QUE SÃO CODING PATTERNS?

São modelos mentais reutilizáveis.


☕ Em vez de decorar solução…

você aprende:

COMO PENSAR

☕ Bellacosa Mainframe Analysis™

Coding Pattern é como:

🔥 um PROC JCL mental reutilizável.


☕ Porque problemas diferentes frequentemente compartilham:

  • estrutura

  • lógica

  • fluxo

  • comportamento


☕🔥 1. TWO POINTERS — O “MATCHING” CLÁSSICO DO MAINFRAME

Dois ponteiros percorrendo estruturas simultaneamente.


☕ Muito usado em:

  • merge

  • comparação

  • busca

  • matching


☕ Isso lembra MUITO:

🔥 SORT/MERGE no z/OS.


☕ Exemplo clássico Mainframe

Comparar:

ARQUIVO CLIENTE
VS
ARQUIVO PAGAMENTO

☕ Dois ponteiros avançam conforme chave.


☕ COBOL usa isso há décadas.


☕🔥 2. SLIDING WINDOW — O “BUFFER DINÂMICO”

Padrão extremamente poderoso.


☕ A ideia:

uma janela percorre dados continuamente.


☕ Exemplo moderno

  • stream

  • logs

  • monitoramento

  • analytics


☕ No Mainframe isso lembra:

  • leitura sequencial VSAM

  • análise SMF

  • monitoramento RMF


☕ Excelente para:

🔥 reduzir complexidade absurda.


☕🔥 3. PREFIX SUM — O “ACUMULADOR CORPORATIVO”

Muito usado em:

  • estatísticas

  • relatórios

  • batch processing


☕ Bellacosa Mainframe Analysis™

Isso é praticamente:

🔥 processamento batch financeiro clássico.


☕ Exemplo bancário

Saldo acumulado:

saldo_anterior + movimento

☕ Mainframe vive disso.


☕🔥 4. MERGE INTERVALS — O “CONSOLIDADOR DE JANELAS”

Combinar intervalos sobrepostos.


☕ Aplicações reais

  • agendas

  • reservas

  • processamento temporal

  • janelas batch


☕ Isso lembra muito:

🔥 scheduler corporativo.


☕ JES2/JES3 possuem conceitos semelhantes de coordenação temporal.


☕🔥 5. BINARY SEARCH — O “CATÁLOGO INDEXADO” DO DB2

Busca dividindo espaço pela metade.


☕ O ganho é brutal:

O(log n)

☕ Bellacosa Mainframe Analysis™

É praticamente:

🔥 acesso indexado DB2/VSAM KSDS.


☕ Índices existem exatamente para evitar:

table scan infernal

☕🔥 6. SORTING PATTERNS — O REINO ABSOLUTO DO MAINFRAME

Aqui o Mainframe reina historicamente.


☕ SORT sempre foi:

🔥 uma arte no z/OS.


☕ DFSORT e SyncSort são monstruosamente otimizados.


☕ Grandes bancos literalmente dependem disso.


☕ Exemplo:

  • fechamento bancário

  • consolidação

  • ranking

  • billing


☕🔥 7. FAST & SLOW POINTERS — DETECTANDO CICLOS E ANOMALIAS

Dois ponteiros em velocidades diferentes.


☕ Excelente para:

  • loops

  • listas

  • estruturas cíclicas

  • detecção de comportamento


☕ Isso lembra:

🔥 monitoramento operacional.


☕ Em sistemas críticos:

detectar loop cedo evita desastre.


☕🔥 8. BACKTRACKING — A “BUSCA EXAUSTIVA INTELIGENTE”

Testa possibilidades recursivamente.


☕ Parece caro?

E é.


☕ Mas resolve problemas extremamente complexos.


☕ Exemplo corporativo

  • otimização

  • roteamento

  • IA

  • scheduling


☕🔥 9. DIVIDE AND CONQUER — O “PARALEL SYSPLEX” MENTAL

Dividir problema gigante em partes menores.


☕ Mainframe faz isso há décadas.


☕ Exemplos:

  • Parallel Sysplex

  • workload balancing

  • batch parallelism


☕ Isso escalou o mundo corporativo.


☕🔥 10. LINKED LISTS — O “ENCADENAMENTO” CLÁSSICO

Estruturas ligadas dinamicamente.


☕ Mainframe conhece isso profundamente.

Especialmente em:

  • buffers

  • control blocks

  • cadeias de memória


☕ Assembler vive disso.


☕🔥 11. STACKS & QUEUES — O “CICS” DA LÓGICA

Agora entramos numa das estruturas mais importantes da computação.


☕ Queue

FIFO.


☕ Stack

LIFO.


☕ Isso aparece em TODO lugar.


☕ Bellacosa Mainframe Analysis™

CICS trabalha pesado com conceitos de filas e pilhas operacionais.


☕ MQ então?

🔥 literalmente vive disso.


☕🔥 12. MONOTONIC STACK — O “OTIMIZADOR SILENCIOSO”

Pattern avançado.


☕ Excelente para:

  • análise sequencial

  • máximos/mínimos

  • otimização temporal


☕ Muito útil em:

  • mercado financeiro

  • séries temporais

  • observabilidade


☕🔥 13. EXPRESSION EVALUATION — O “COMPILADOR INTERNO”

Avaliação de expressões.


☕ Compiladores COBOL fazem isso constantemente.


☕ Exemplo:

COMPUTE TOTAL = A + B * C

☕ Existe parsing por trás.


☕🔥 14. STRING MANIPULATION — O IMPÉRIO DO COBOL

Mainframe ama texto estruturado.


☕ Exemplos:

  • EBCDIC

  • layouts

  • copybooks

  • parsing bancário


☕ COBOL virou mestre nisso.


☕🔥 15. HASHMAPS — O “CATÁLOGO RACF” MODERNO

Busca rápida por chave.


☕ Isso lembra:

  • tabelas de controle

  • catálogos

  • cache

  • diretórios RACF


☕ Extremamente eficiente.


☕🔥 16. TREES & BST — A HIERARQUIA CORPORATIVA

Estruturas hierárquicas.


☕ Mainframe usa isso em:

  • catálogos

  • RACF

  • hierarquias de storage

  • índices


☕🔥 17. PATH SUM — O “FLUXO TRANSACIONAL”

Analisar caminhos possíveis.


☕ Isso aparece em:

  • antifraude

  • IA

  • workflows

  • análise financeira


☕🔥 18. HEAPS — O “TOP N” CORPORATIVO

Excelente para encontrar:

  • maiores

  • menores

  • prioridades


☕ Exemplo bancário

🔥 TOP clientes por volume.


☕🔥 19. TOP K FREQUENT — O “RMF ANALYTICS”

Análise estatística frequente.


☕ Muito usado em:

  • observabilidade

  • logs

  • IA

  • SIEM


☕🔥 20. MERGE K SORTED LISTS — O “INTEGRADOR CORPORATIVO”

Combinar múltiplas listas ordenadas.


☕ Isso é MUITO Mainframe.


☕ Exemplo:

  • consolidar filiais

  • processamento distribuído

  • múltiplos datasets


☕🔥 21. DYNAMIC PROGRAMMING — O “OTIMIZADOR MATEMÁTICO”

Agora entramos na elite.


☕ DP resolve problemas reutilizando resultados anteriores.


☕ Isso reduz explosão computacional.


☕ Bellacosa Mainframe Analysis™

DP lembra:

🔥 cache inteligente corporativo.


☕🔥 22. GREEDY — O “DECIDA AGORA”

Escolha local imediata.


☕ Funciona muito bem em:

  • scheduling

  • roteamento

  • alocação


☕🔥 23. BFS & DFS — O “NAVEGADOR” DAS ESTRUTURAS

Traversal em grafos.


☕ Muito usado em:

  • redes

  • IA

  • dependências

  • análise de infraestrutura


☕🔥 24. GRAPH ALGORITHMS — O “MAPA DO MUNDO DIGITAL”

A internet inteira é um grafo.


☕ Sistemas corporativos modernos também.


☕ Isso impacta:

  • redes

  • supply chain

  • fraudes

  • relacionamentos


☕🔥 25. DESIGN PROBLEMS — O VERDADEIRO NÍVEL SENIOR

Aqui termina o tutorial…

e começa engenharia real.


☕ Porque agora o problema deixa de ser:

como codar

e passa a ser:

como arquitetar

☕🔥 O MAINFRAME SEMPRE FOI “PATTERN-DRIVEN”

Essa talvez seja a maior conclusão.


☕ Mainframe nunca foi apenas linguagem.

Sempre foi:

  • arquitetura

  • repetibilidade

  • previsibilidade

  • padrões operacionais


☕ Por isso sistemas z/OS sobrevivem décadas.


☕🔥 CONCLUSÃO — PROGRAMAR NÃO É ESCREVER CÓDIGO… É RECONHECER PADRÕES

Os melhores engenheiros não decoram respostas.

Eles identificam:

  • estruturas

  • comportamentos

  • padrões invisíveis

E talvez essa seja a maior ironia da computação moderna:

enquanto muita gente acha que esses Coding Patterns nasceram com entrevistas FAANG…

🔥 o Mainframe já resolvia muitos desses problemas silenciosamente há mais de 40 anos.

sábado, 15 de fevereiro de 2014

🚀 Python Essencial em uma página: o “manual secreto” que transforma iniciantes em programadores perigosamente produtivos

Bellacosa Mainframe apresenta Python Essencial para Padawans


 🚀 Python Essencial em uma página: o “manual secreto” que transforma iniciantes em programadores perigosamente produtivos

Python é uma das linguagens de programação mais populares do mundo, amplamente utilizada em Inteligência Artificial, Data Science, automação e desenvolvimento de software. 

Seu sucesso se deve à sintaxe simples, legibilidade e poderosa coleção de bibliotecas que aceleram a criação de aplicações modernas. 

Um cheatsheet de Python essencial reúne os principais conceitos que todo iniciante ou profissional precisa dominar: variáveis, tipos de dados, listas, tuplas, dicionários, conjuntos, operadores, condicionais, loops, funções, tratamento de erros, orientação a objetos e manipulação de arquivos. 

Esses fundamentos permitem escrever código eficiente, reutilizável e fácil de manter. Python também é ideal para quem vem de linguagens tradicionais, pois reduz a complexidade e aumenta a produtividade. 

Presente em áreas como análise de dados, web, finanças, ciência e automação corporativa, aprender Python básico é o primeiro passo para construir soluções escaláveis e acompanhar as demandas do mercado tecnológico atual.

🐍 Python Essencial — Cheatsheet Visual

🧠 Variáveis e Tipos

x = 10 # int
y = 3.14 # float
nome = "Ana" # string
ativo = True # boolean

👉 Python é dinamicamente tipado (sem PIC, sem declaração).


📦 Estruturas de Dados

📚 List (mutável)

lista = [1, 2, 3]
lista.append(4)
lista[0] = 10

✔ Ordenada
✔ Permite duplicados
✔ Mutável


🔒 Tuple (imutável)

tupla = (1, 2, 3)
print(tupla[0])

✔ Ordenada
✔ Imutável
✔ Mais rápida que list


🗂️ Dictionary (chave → valor)

pessoa = {"nome": "Ana", "idade": 30}

print(pessoa["nome"])
pessoa["cidade"] = "SP"

✔ Similar a tabela indexada
✔ Chaves únicas


🎯 Set (valores únicos)

s = {1, 2, 2, 3}
print(s) # {1, 2, 3}

✔ Sem duplicatas
✔ Sem ordem


🔎 Indexação e Fatiamento

texto = "Python"

texto[0] # P
texto[-1] # n
texto[0:3] # Pyt

👉 Muito usado em Data Science.


⚖️ Operadores

Comparação

== != > < >= <=

Lógicos

and
or
not

🔀 Condições (Branching)

idade = 18

if idade >= 18:
print("Adulto")
elif idade >= 13:
print("Adolescente")
else:
print("Criança")

👉 Fluxo decisório do programa.


🔁 Loops

🔄 For

for i in range(3):
print(i)

Saída:

0
1
2

📦 For em coleção

for fruta in ["maçã", "banana"]:
print(fruta)

🔢 Enumerate (índice + valor)

for i, v in enumerate(["A", "B"]):
print(i, v)

⏳ While

x = 0

while x < 3:
print(x)
x += 1

🧩 Funções

def soma(a, b):
return a + b

print(soma(2, 3))

✔ Reutilização
✔ Modularidade


📏 Funções embutidas importantes

len([1,2,3]) # 3
sum([1,2,3]) # 6
sorted([3,1,2]) # [1,2,3]

⚠️ Tratamento de Erros

try:
x = int("abc")
except ValueError:
print("Erro de conversão")
else:
print("Tudo OK")
finally:
print("Fim")

👉 Evita crash do programa.


🧱 Classes e Objetos

class Pessoa:
def __init__(self, nome):
self.nome = nome

p = Pessoa("Ana")
print(p.nome)

✔ OOP
✔ Encapsulamento


🔧 Métodos

class Conta:
def __init__(self, saldo):
self.saldo = saldo

def depositar(self, valor):
self.saldo += valor

📂 Manipulação de Arquivos

with open("dados.txt", "r") as f:
conteudo = f.read()

🚀 Comandos extremamente úteis

Converter tipos

int("10")
float("3.5")
str(100)

Ver tipo

type(x)

Ajuda

help(len)

💻 Mentalidade Mainframe → Python

COBOL

DATA DIVISION + PROCEDURE DIVISION

Python

Dados + Lógica + Scripts + Objetos

👉 Muito mais direto.


🧠 Regra de Ouro

Python favorece legibilidade > complexidade

🔥 Frase lendária

👉 Python é a linguagem que transforma ideias em software antes do café esfriar. ☕