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.


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. ☕