{"id":6719,"date":"2026-02-09T14:05:12","date_gmt":"2026-02-09T14:05:12","guid":{"rendered":"https:\/\/futureschoolead.com.br\/2026\/?p=6719"},"modified":"2026-02-09T14:08:28","modified_gmt":"2026-02-09T14:08:28","slug":"exercicio-02-controle-de-fluxo-e-loops","status":"publish","type":"post","link":"https:\/\/futureschoolead.com.br\/2026\/2026\/02\/09\/exercicio-02-controle-de-fluxo-e-loops\/","title":{"rendered":"\u00a0EXERC\u00cdCIO 02: Controle de Fluxo e Loops"},"content":{"rendered":"<p class=\"ds-markdown-paragraph\" style=\"text-align: center;\"><strong>[N\u00cdVEL AVAN\u00c7ADO] Exerc\u00edcios Complexos de REXX<\/strong><br \/>\nDomine IF, SELECT e Loops com problemas do mundo real<\/p>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/uCwNK-CmYvY?si=S0tqcNnwJhZe-wGP\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p class=\"ds-markdown-paragraph\"><strong>&#x1f525; DESAFIO 1: Analisador de Logs de Job<\/strong><\/p>\n<div class=\"md-code-block md-code-block-light\">\n<div class=\"md-code-block-banner-wrap\">\n<div class=\"md-code-block-banner md-code-block-banner-lite\">\n<div class=\"_121d384\">\n<pre class=\"d2a24f03\"><span class=\"d813de27\">rexx<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<pre>\/*\r\nOBJETIVO: Analisar m\u00faltiplas linhas de log\r\nSIMULA\u00c7\u00c3O: Voc\u00ea recebe um array com status de jobs\r\nCADA LINHA: \"JOBNAME;STARTTIME;ENDTIME;RC\"\r\n\r\nEXEMPLO:\r\njobs.1 = \"JOB001;08:00;08:05;00\"\r\njobs.2 = \"JOB002;08:05;08:07;04\"\r\njobs.3 = \"JOB003;08:07;08:10;00\"\r\n\r\nTAREFAS:\r\n1. Calcular tempo de cada job\r\n2. Identificar jobs com RC \u2260 0\r\n3. Calcular tempo total de processamento\r\n4. Encontrar job mais longo\r\n\r\nDICA: Use PARSE para separar por \";\"\r\n*\/<\/pre>\n<\/div>\n<p class=\"ds-markdown-paragraph\"><strong>&#x1f525; DESAFIO 2: Sistema de Menu com Valida\u00e7\u00e3o<\/strong><\/p>\n<div class=\"md-code-block md-code-block-light\">\n<div class=\"md-code-block-banner-wrap\">\n<div class=\"md-code-block-banner md-code-block-banner-lite\">\n<div class=\"_121d384\">\n<pre class=\"d2a24f03\"><span class=\"d813de27\">rexx<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<pre>\/*\r\nOBJETIVO: Criar sistema de menu profissional\r\nREQUISITOS:\r\n1. Loop infinito com op\u00e7\u00e3o de sair\r\n2. Valida\u00e7\u00e3o de entrada\r\n3. Submenus\r\n4. Hist\u00f3rico de opera\u00e7\u00f5es\r\n5. Limpeza de tela entre menus\r\n\r\nESTRUTURA:\r\nMENU PRINCIPAL:\r\n1. Processamento\r\n2. Relat\u00f3rios\r\n3. Utilit\u00e1rios\r\n4. Sair\r\n\r\nSUBMENU Processamento:\r\n1.1 Validar dados\r\n1.2 Importar arquivos\r\n1.3 Voltar\r\n\r\nDICA: Use DO FOREVER, SELECT aninhados\r\n*\/<\/pre>\n<\/div>\n<p class=\"ds-markdown-paragraph\"><strong>&#x1f525; DESAFIO 3: Gerador de Scripts JCL<\/strong><\/p>\n<div class=\"md-code-block md-code-block-light\">\n<div class=\"md-code-block-banner-wrap\">\n<div class=\"md-code-block-banner md-code-block-banner-lite\">\n<div class=\"_121d384\">\n<pre class=\"d2a24f03\"><span class=\"d813de27\">rexx<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<pre>\/*\r\nOBJETIVO: Gerar JCL dinamicamente\r\nENTRADA: Par\u00e2metros do job\r\nSA\u00cdDA: Script JCL pronto para usar\r\n\r\nPAR\u00c2METROS:\r\n- Nome do job (1-8 chars)\r\n- Programa a executar\r\n- Dataset de entrada\r\n- Dataset de sa\u00edda\r\n- Regi\u00e3o de mem\u00f3ria\r\n- Classe\r\n\r\nEXEMPLO DE SA\u00cdDA:\r\n\/\/JOB001  JOB ,'DESC',CLASS=A\r\n\/\/STEP1   EXEC PGM=PROGRAM1\r\n\/\/INPUT   DD DSN=USER.DATA.IN\r\n\/\/OUTPUT  DD DSN=USER.DATA.OUT\r\n\r\nDICA: Use loops para m\u00faltiplos steps\r\n*\/<\/pre>\n<\/div>\n<p class=\"ds-markdown-paragraph\"><strong>&#x1f4a1; SOLU\u00c7\u00c3O do Desafio 1 (ap\u00f3s tentativa):<\/strong><\/p>\n<div class=\"md-code-block md-code-block-light\">\n<div class=\"md-code-block-banner-wrap\">\n<div class=\"md-code-block-banner md-code-block-banner-lite\">\n<div class=\"_121d384\">\n<pre class=\"d2a24f03\"><span class=\"d813de27\">rexx<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<pre>\/* SOLUCAO_LOGS.rex *\/\r\n\/* Array simulado de jobs *\/\r\njobs.1 = \"JOB001;08:00;08:05;00\"\r\njobs.2 = \"JOB002;08:05;08:07;04\"\r\njobs.3 = \"JOB003;08:07;08:10;00\"\r\ntotal_jobs = 3\r\n\r\n\/* Vari\u00e1veis de an\u00e1lise *\/\r\ntotal_tempo = 0\r\njobs_com_erro = 0\r\njob_mais_longo = \"\"\r\ntempo_mais_longo = 0\r\n\r\nSAY \"=== AN\u00c1LISE DE LOGS DE JOB ===\"\r\nSAY \"\"\r\n\r\nDO i = 1 TO total_jobs\r\n  \/* Parse para separar campos *\/\r\n  PARSE VAR jobs.i nome \";\" inicio \";\" fim \";\" rc\r\n  \r\n  \/* Calcular tempo (em minutos) *\/\r\n  PARSE VAR inicio hh_in \":\" mm_in\r\n  PARSE VAR fim hh_fim \":\" mm_fim\r\n  \r\n  inicio_min = (hh_in * 60) + mm_in\r\n  fim_min = (hh_fim * 60) + mm_fim\r\n  duracao = fim_min - inicio_min\r\n  \r\n  \/* Acumular totais *\/\r\n  total_tempo = total_tempo + duracao\r\n  \r\n  \/* Verificar RC *\/\r\n  IF rc &lt;&gt; \"00\" THEN DO\r\n    jobs_com_erro = jobs_com_erro + 1\r\n    SAY \"ALERTA: Job\" nome \"falhou com RC =\" rc\r\n  END\r\n  \r\n  \/* Verificar job mais longo *\/\r\n  IF duracao &gt; tempo_mais_longo THEN DO\r\n    tempo_mais_longo = duracao\r\n    job_mais_longo = nome\r\n  END\r\n  \r\n  SAY \"Job:\" nome \"- Dura\u00e7\u00e3o:\" duracao \"minutos - RC:\" rc\r\nEND\r\n\r\n\/* Relat\u00f3rio final *\/\r\nSAY \"\"\r\nSAY \"=== RELAT\u00d3RIO FINAL ===\"\r\nSAY \"Total de jobs:\" total_jobs\r\nSAY \"Jobs com erro:\" jobs_com_erro\r\nSAY \"Tempo total:\" total_tempo \"minutos\"\r\nSAY \"Job mais longo:\" job_mais_longo \"(\" tempo_mais_longo \"min)\"\r\nSAY \"Tempo m\u00e9dio:\" (total_tempo \/ total_jobs) \"minutos por job\"\r\n\r\nIF jobs_com_erro &gt; 0 THEN\r\n  SAY \"ATEN\u00c7\u00c3O: Existem jobs que precisam de an\u00e1lise!\"\r\nELSE\r\n  SAY \"SUCESSO: Todos os jobs executaram corretamente!\"<\/pre>\n<\/div>\n<p class=\"ds-markdown-paragraph\"><strong>&#x1f4da; RECURSOS ADICIONAIS:<\/strong><\/p>\n<ul>\n<li>\n<p class=\"ds-markdown-paragraph\">Playlist completa do curso: [link]<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">C\u00f3digos-fonte: [link para reposit\u00f3rio]<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">Comunidade no Discord: [link]<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">Cheat Sheet REXX: [download]<\/p>\n<\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><strong>&#x1f514; CHAMADA FINAL:<\/strong><br \/>\nInscreva-se no canal para n\u00e3o perder as pr\u00f3ximas aulas avan\u00e7adas sobre:<\/p>\n<ul>\n<li>\n<p class=\"ds-markdown-paragraph\">Intera\u00e7\u00e3o com TSO\/ISPF<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">Processamento de arquivos<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">Fun\u00e7\u00f5es personalizadas<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">Debugging profissional<\/p>\n<\/li>\n<li>\n<p class=\"ds-markdown-paragraph\">Integra\u00e7\u00e3o com COBOL e DB2<\/p>\n<\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><em>#REXX #Mainframe #zOS #Programa\u00e7\u00e3o #Automa\u00e7\u00e3o #TSO #ISPF #Exerc\u00edcios #L\u00f3gica #Developer<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[N\u00cdVEL AVAN\u00c7ADO] Exerc\u00edcios Complexos de REXX Domine IF, SELECT e Loops com problemas do mundo real &#x1f525; DESAFIO 1: Analisador de Logs de Job rexx \/* OBJETIVO: Analisar m\u00faltiplas linhas de log SIMULA\u00c7\u00c3O: Voc\u00ea recebe um array com status de jobs CADA LINHA: &#8220;JOBNAME;STARTTIME;ENDTIME;RC&#8221; EXEMPLO: jobs.1 = &#8220;JOB001;08:00;08:05;00&#8221; jobs.2 = &#8220;JOB002;08:05;08:07;04&#8221; jobs.3 = &#8220;JOB003;08:07;08:10;00&#8221; TAREFAS: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6726,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,42,43],"tags":[56,80,57,58],"class_list":["post-6719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-mainframe","category-rexx","tag-controle","tag-exercicio","tag-fluxo","tag-loops"],"_links":{"self":[{"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/posts\/6719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/comments?post=6719"}],"version-history":[{"count":1,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/posts\/6719\/revisions"}],"predecessor-version":[{"id":6725,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/posts\/6719\/revisions\/6725"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/media\/6726"}],"wp:attachment":[{"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/media?parent=6719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/categories?post=6719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/futureschoolead.com.br\/2026\/wp-json\/wp\/v2\/tags?post=6719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}