[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!
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!
/* 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?