EXERCÍCIO 01: Praticando a Base

 [DESAFIO] Exercícios REXX: Sua Hora de Brilhar!
Consolidando aulas 01-03 com problemas reais do mainframe

🎯 DESAFIO 1: Calculadora de IMC

rexx
/* 
OBJETIVO: Criar calculadora de IMC
ENTRADA: Peso (kg) e Altura (m)
SAÍDA: IMC e classificação

Classificação:
- Abaixo de 18.5: Abaixo do peso
- 18.5 a 24.9: Normal
- 25 a 29.9: Sobrepeso
- Acima de 30: Obesidade

DICA: Use SAY, PULL e IF/ELSE
*/

🎯 DESAFIO 2: Validador de Dataset Name

rexx
/*
OBJETIVO: Validar nomes de dataset
REGRAS:
1. Máximo 44 caracteres
2. Deve começar com letra
3. Partes separadas por ponto
4. Cada parte: 1-8 caracteres
5. Caracteres válidos: A-Z, 0-9, @#$ (apenas no primeiro caractere da parte)

EXEMPLOS VÁLIDOS:
- USER.DATA01
- PROJ#.TEST.COBOL

DICA: Use LENGTH, SUBSTR, DATATYPE
*/

🎯 DESAFIO 3: Formatador de Data Mainframe

rexx
/*
OBJETIVO: Converter data do mainframe
ENTRADA: "DDMMYYYY" (ex: "15032024")
SAÍDA: "15/MAR/2024"

MESES: 01=JAN, 02=FEV, ..., 12=DEZ

EXTRA: Validar se data é válida
- Dia: 01-31
- Mês: 01-12
- Ano: 1900-2100

DICA: Use SUBSTR para separar partes
*/
💡 SOLUÇÃO do Desafio 1 (após tentativa):
rexx
/* SOLUCAO_IMC.rex */
SAY '=== CALCULADORA IMC ==='
SAY 'Digite seu peso (kg):'
PULL peso
SAY 'Digite sua altura (m):'
PULL altura

imc = peso / (altura * altura)
SAY 'Seu IMC é:' FORMAT(imc, , 2)  /* 2 casas decimais */

SELECT
  WHEN imc < 18.5 THEN classificacao = 'Abaixo do peso'
  WHEN imc <= 24.9 THEN classificacao = 'Peso normal'
  WHEN imc <= 29.9 THEN classificacao = 'Sobrepeso'
  OTHERWISE classificacao = 'Obesidade'
END

SAY 'Classificação:' classificacao
SAY '========================'

CTA: 💬 Poste sua solução nos comentários e ajude outros alunos!

Aula 04 – Controle de Fluxo

IF, SELECT e o Poder das Decisões no REXX
Faça seus scripts “pensarem” e adaptarem-se a qualquer situação

🔄 IF/THEN/ELSE – Decisões simples:

/* Formato básico */
IF condição THEN
instrução
ELSE
outra_instrução

/* Exemplo prático */
SAY 'Qual sua idade?'
PULL idade

IF idade < 0 THEN
SAY 'Idade inválida!'
ELSE IF idade < 18 THEN
SAY 'Você é menor de idade'
ELSE
SAY 'Você é maior de idade'

🎯 SELECT/WHEN – Múltiplas condições:

/* Estrutura SELECT - perfeita para menus */
SAY 'Escolha uma opção:'
SAY '1. Relatório de clientes'
SAY '2. Backup diário'
SAY '3. Limpeza de logs'
PULL opcao

SELECT
WHEN opcao = 1 THEN DO
SAY 'Gerando relatório...'
/* código do relatório */
END
WHEN opcao = 2 THEN
SAY 'Iniciando backup...'
WHEN opcao = 3 THEN
SAY 'Limpando logs...'
OTHERWISE
SAY 'Opção inválida!'
END

💼 Exemplo real – Validação de dados:

/* VALIDA.rex - Validação de entrada */
SAY 'Digite o código do produto (3 letras):'
PULL codigo

SELECT
WHEN LENGTH(codigo) <> 3 THEN
SAY 'ERRO: Código deve ter 3 caracteres'
WHEN DATATYPE(codigo) <> 'CHAR' THEN
SAY 'ERRO: Use apenas letras'
WHEN codigo = 'ABC' THEN
SAY 'Produto: Componente A'
WHEN codigo = 'XYZ' THEN
SAY 'Produto: Componente B'
OTHERWISE
SAY 'Produto desconhecido'
END

CTA: 👉 Na próxima: Aprenda a repetir tarefas com loops poderosos!

Aula 03 – Variáveis, Operadores e SAY/PULL

Variáveis REXX: A Flexibilidade que Você Sempre Quis!
SAY, PULL e operadores – sua base para scripts interativos

🧮 VARIÁVEIS no REXX:

  • Tipagem dinâmica: mesma variável pode ter número ou texto

  • Declaração implícita: basta usar!

  • Nomes: até 250 caracteres, case-sensitive

  • Valores: strings (até 65.535 caracteres)

📊 OPERADORES:

/* Aritméticos: + - * / % // */ resultado = 10 + 5 * 2 /* = 20 */ /* Comparação: = > < >= <= <> */ IF valor > 100 THEN SAY 'Alto' /* Lógicos: & | \ (AND, OR, NOT) */ IF (idade >= 18) & (status = 'A') THEN...

🗣️ INTERAÇÃO com SAY e PULL:

/* SAY - Mostra na tela */ SAY 'Qual seu nome?' PULL nome /* Aguarda entrada */ SAY 'Olá,' nome '! Bem-vindo ao mainframe.' /* PULL múltiplas variáveis */ SAY 'Digite nome e idade:' PULL nome idade SAY nome 'tem' idade 'anos'

Exemplo prático – Calculadora simples:

/* CALC.rex - Calculadora interativa */
SAY '--- Calculadora REXX ---'
SAY 'Digite primeiro número:'
PULL num1
SAY 'Digite segundo número:'
PULL num2
SAY 'Soma:' num1 + num2
SAY 'Subtração:' num1 - num2
SAY 'Multiplicação:' num1 * num2
IF num2 <> 0 THEN SAY 'Divisão:' num1 / num2

CTA: 👉 Agora sim! Prontos para programas que tomam decisões?

Aula 01 – Introdução ao REXX

REXX no Mainframe: Sua Ponte para a Automação Inteligente!
Descubra por que esta linguagem amigável é um superpoder no mundo z/OS.

📌 O QUE é REXX?

  • REXX (Restructured Extended Executor): linguagem de scripting poderosa e legível

  • Criada pela IBM nos anos 1970, mas incrivelmente moderna

  • Linguagem interpretada, perfeita para automação rápida

🎯 POR QUE REXX no Mainframe?

  • Nativa do ambiente z/OS (vem “de fábrica”)

  • Sintaxe simples e intuitiva – parecida com inglês do dia a dia

  • Acesso direto a comandos do TSO, ISPF e até do sistema operacional

  • Processamento de strings excepcionalmente poderoso

🚀 PRINCIPAIS USOS no z/OS:

  • Automação de tarefas administrativas

  • Processamento de arquivos (seqüenciais, PDS, VSAM)

  • Geração de relatórios customizados

  • Interface com outras linguagens (COBOL, PL/I)

  • Desenvolvimento de CLISTs mais sofisticados

Exemplo motivador:

/* Exemplo simples - já dá para sentir a simplicidade */
SAY "Olá, Mainframe! Vamos automatizar tudo?"

CTA: 👉 Próxima aula: Vamos colocar a mão na massa e escrever nosso primeiro programa!