{"id":2595,"date":"2026-09-29T12:50:04","date_gmt":"2026-09-29T15:50:04","guid":{"rendered":"https:\/\/desvendandoocodigo.com.br\/?p=2595"},"modified":"2026-09-29T12:54:59","modified_gmt":"2026-09-29T15:54:59","slug":"logica-de-programacao-basica-5-exercicios-para-aprender-a-pensar-antes-de-codar","status":"publish","type":"post","link":"https:\/\/desvendandoocodigo.com.br\/?p=2595","title":{"rendered":"L\u00f3gica de programa\u00e7\u00e3o b\u00e1sica: 5 exerc\u00edcios para aprender a pensar antes de codar"},"content":{"rendered":"\n<!-- Slug sugerido: logica-programacao-basica-5-exercicios-javascript -->\n<!-- Meta descri\u00e7\u00e3o: Aprenda l\u00f3gica de programa\u00e7\u00e3o b\u00e1sica com cinco exerc\u00edcios em JavaScript. Entenda condi\u00e7\u00f5es, arrays, repeti\u00e7\u00e3o, acumuladores e objetos antes de avan\u00e7ar. -->\n\n\n\n<p>Quando algu\u00e9m come\u00e7a a estudar programa\u00e7\u00e3o, costuma perguntar: \u201cQual c\u00f3digo eu preciso usar?\u201d. Mas existe uma pergunta anterior: <strong>qual problema eu preciso resolver?<\/strong> Foi com esse racioc\u00ednio que trabalhei em uma aula com cinco exerc\u00edcios de l\u00f3gica de programa\u00e7\u00e3o em JavaScript.<\/p>\n\n<p>Os exemplos usam JavaScript, mas a forma de pensar serve para outras linguagens. Antes de escrever uma condi\u00e7\u00e3o, um la\u00e7o ou uma fun\u00e7\u00e3o, precisamos entender os dados de entrada, o resultado esperado e os passos que ligam uma coisa \u00e0 outra.<\/p>\n\n<h2>O b\u00e1sico \u00e9 a estrutura que sustenta o restante<\/h2>\n\n<p>Na aula, comentei uma diferen\u00e7a importante: <strong>b\u00e1sico n\u00e3o \u00e9 sin\u00f4nimo de simples<\/strong>. \u00c9 a estrutura necess\u00e1ria para avan\u00e7ar. Saber escrever <code>if<\/code> e <code>for<\/code> ajuda, mas a l\u00f3gica aparece quando escolhemos onde us\u00e1-los e conseguimos explicar por que o resultado saiu daquele jeito.<\/p>\n\n<p>Quem pula essa etapa pode at\u00e9 fazer um c\u00f3digo funcionar, mas ter\u00e1 mais dificuldade para investigar um erro ou adaptar a solu\u00e7\u00e3o a outro problema. Por isso, em cada exerc\u00edcio, a sequ\u00eancia foi: entender a situa\u00e7\u00e3o, escolher os recursos, escrever, executar, comparar o resultado e corrigir quando necess\u00e1rio.<\/p>\n\n<h2>1. Entrada permitida: quando usar if e else?<\/h2>\n\n<p>O primeiro problema pergunta se uma pessoa pode entrar em um local reservado para maiores de idade. A regra \u00e9 \u201c18 anos ou mais\u201d. O detalhe est\u00e1 no <strong>ou mais<\/strong>: algu\u00e9m com exatamente 18 anos tamb\u00e9m pode entrar. Em JavaScript, a condi\u00e7\u00e3o precisa contemplar esse limite:<\/p>\n\n<pre><code>const idade = 18;\n\nif (idade &gt;= 18) {\n  console.log(\"Entrada permitida\");\n} else {\n  console.log(\"Entrada n\u00e3o permitida\");\n}<\/code><\/pre>\n\n<p>O teste mais \u00fatil aqui n\u00e3o \u00e9 s\u00f3 executar com 18. Experimente tamb\u00e9m 17 e 19. Assim voc\u00ea confere o limite, o caso abaixo dele e o caso acima. Durante a aula, mostrei ainda que nem toda condi\u00e7\u00e3o exige um <code>else<\/code>: isso depende do que deve acontecer quando a condi\u00e7\u00e3o \u00e9 falsa.<\/p>\n\n<h2>2. Situa\u00e7\u00e3o do aluno: a ordem das condi\u00e7\u00f5es importa<\/h2>\n\n<p>No segundo exerc\u00edcio, o resultado pode ser aprovado, recupera\u00e7\u00e3o ou reprovado. H\u00e1 mais caminhos poss\u00edveis, ent\u00e3o precisamos organizar os testes. Se a aprova\u00e7\u00e3o come\u00e7a em 7, podemos verificar primeiro essa faixa e depois a recupera\u00e7\u00e3o:<\/p>\n\n<pre><code>const nota = 6;\n\nif (nota &gt;= 7) {\n  console.log(\"Aprovado\");\n} else if (nota &gt;= 5) {\n  console.log(\"Recupera\u00e7\u00e3o\");\n} else {\n  console.log(\"Reprovado\");\n}<\/code><\/pre>\n\n<p>Por que uma nota 8 n\u00e3o cai tamb\u00e9m na condi\u00e7\u00e3o <code>nota &gt;= 5<\/code>? Porque a primeira condi\u00e7\u00e3o verdadeira j\u00e1 determina o caminho desse encadeamento. Essa \u00e9 uma das partes em que vale <strong>prever o resultado no papel antes de executar<\/strong>. Teste notas como 4, 5, 6, 7 e 8 e compare sua previs\u00e3o com a sa\u00edda do programa.<\/p>\n\n<h2>3. Lista de produtos: array, \u00edndice e repeti\u00e7\u00e3o<\/h2>\n\n<p>Se precisamos guardar v\u00e1rios produtos, uma vari\u00e1vel para cada nome logo se torna inconveniente. Um <em>array<\/em> re\u00fane os itens em uma lista. A primeira posi\u00e7\u00e3o tem \u00edndice zero, e o la\u00e7o pode percorrer a lista sem que precisemos escrever um <code>console.log<\/code> para cada produto.<\/p>\n\n<pre><code>const produtos = [\"Teclado\", \"Mouse\", \"Monitor\", \"Headset\"];\n\nfor (let i = 0; i &lt; produtos.length; i++) {\n  console.log(produtos[i]);\n}<\/code><\/pre>\n\n<p>Na aula, testei o que acontece ao come\u00e7ar o contador em 1: o primeiro produto fica de fora. Esse pequeno erro ajuda a entender a rela\u00e7\u00e3o entre \u00edndice, <code>length<\/code> e condi\u00e7\u00e3o de parada. Depois mostrei o <code>for...of<\/code>, que percorre diretamente os valores quando n\u00e3o precisamos trabalhar com o \u00edndice.<\/p>\n\n<h2>4. Total da compra: para que serve um acumulador?<\/h2>\n\n<p>Agora a lista cont\u00e9m pre\u00e7os. Queremos somar cada valor e apresentar o total somente depois que o la\u00e7o terminar. Para isso, criamos um acumulador que come\u00e7a em zero e recebe cada pre\u00e7o:<\/p>\n\n<pre><code>const precos = [120, 80, 250, 320, 530];\nlet total = 0;\n\nfor (const preco of precos) {\n  total += preco;\n}\n\nconsole.log(total); \/\/ 1300<\/code><\/pre>\n\n<p>Esse exerc\u00edcio trouxe o momento mais interessante da aula. Depois de somar os mesmos pre\u00e7os de outra forma, o resultado apareceu como <strong>2600 em vez de 1300<\/strong>. O problema n\u00e3o estava nos produtos: o acumulador j\u00e1 continha o total da primeira passagem e foi usado de novo sem voltar a zero.<\/p>\n\n<p>\u00c9 uma boa demonstra\u00e7\u00e3o do trabalho real de programa\u00e7\u00e3o. Encontrar um n\u00famero inesperado, perguntar de onde ele veio, observar o estado da vari\u00e1vel e testar a corre\u00e7\u00e3o ensina mais do que apenas mostrar o c\u00f3digo final funcionando.<\/p>\n\n<h2>5. Carrinho de compras: por que criar objetos?<\/h2>\n\n<p>No \u00faltimo exerc\u00edcio, cada produto tem pelo menos duas informa\u00e7\u00f5es relacionadas: nome e pre\u00e7o. Um objeto permite manter essas propriedades juntas; o array representa o carrinho que recebe v\u00e1rios produtos. A fun\u00e7\u00e3o organiza a a\u00e7\u00e3o de adicionar um item:<\/p>\n\n<pre><code>const carrinho = [];\n\nfunction adicionarProduto(nome, preco) {\n  const produto = { nome, preco };\n  carrinho.push(produto);\n}\n\nadicionarProduto(\"Teclado\", 120);\nadicionarProduto(\"Mouse\", 80);\n\nconsole.log(carrinho);<\/code><\/pre>\n\n<p>Perceba a progress\u00e3o: come\u00e7amos com uma condi\u00e7\u00e3o, passamos por listas e repeti\u00e7\u00e3o, calculamos um total e terminamos reunindo array, fun\u00e7\u00e3o e objeto em um problema pr\u00f3ximo de uma aplica\u00e7\u00e3o real. N\u00e3o \u00e9 necess\u00e1rio decorar tudo de uma vez. O importante \u00e9 entender o papel de cada parte.<\/p>\n\n<h2>Como praticar depois da aula<\/h2>\n\n<p>Assista a cada problema e pause antes da solu\u00e7\u00e3o. Anote quais dados voc\u00ea precisa, qual resultado espera e que estrutura parece adequada. Escreva sua vers\u00e3o, execute com valores diferentes e explique o que aconteceu. Se o resultado estiver errado, investigue antes de procurar uma resposta pronta.<\/p>\n\n<p>Essa pr\u00e1tica desenvolve o racioc\u00ednio que ser\u00e1 necess\u00e1rio quando os exerc\u00edcios crescerem e se transformarem em projetos. <strong>Programar \u00e9 seguir um processo, testar hip\u00f3teses e compreender a solu\u00e7\u00e3o.<\/strong><\/p>\n\n\n\n<h2>Quer seguir uma sequ\u00eancia completa?<\/h2>\n\n<p>Se voc\u00ea quer continuar depois desses exerc\u00edcios, o <strong>curso JavaScript do Zero \u2014 L\u00f3gica, HTML, CSS e Projeto Pr\u00e1tico<\/strong> organiza o aprendizado passo a passo, dos fundamentos at\u00e9 a constru\u00e7\u00e3o da Dev Store. O livro digital <em>L\u00f3gica com JavaScript do Zero<\/em> est\u00e1 inclu\u00eddo no curso.<\/p>\n\n<p><a href=\"https:\/\/desvendandoocodigo.com.br\/?page_id=2555\">Conhe\u00e7a o curso JavaScript do Zero com livro digital inclu\u00eddo<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Assista \u00e0 aula completa<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"JavaScript do Zero na Pr\u00e1tica: 5 Problemas que Todo Iniciante Precisa Saber Resolver\" width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/JX-ox6-q__k?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Quando algu\u00e9m come\u00e7a a estudar programa\u00e7\u00e3o, costuma perguntar: \u201cQual c\u00f3digo eu preciso usar?\u201d. Mas existe uma pergunta anterior: qual problema eu preciso resolver? Foi com esse racioc\u00ednio que trabalhei em uma aula com cinco exerc\u00edcios de l\u00f3gica de programa\u00e7\u00e3o em JavaScript. Os exemplos usam JavaScript, mas a forma de pensar serve para outras linguagens. Antes de escrever uma condi\u00e7\u00e3o, um la\u00e7o ou uma fun\u00e7\u00e3o, precisamos entender os dados de entrada, o resultado esperado e os passos que ligam uma coisa \u00e0 outra. O b\u00e1sico \u00e9 a estrutura que sustenta o restante Na aula, comentei uma diferen\u00e7a importante: b\u00e1sico n\u00e3o \u00e9 sin\u00f4nimo de simples. \u00c9 a estrutura necess\u00e1ria para avan\u00e7ar. Saber escrever if e for ajuda, mas a l\u00f3gica aparece quando escolhemos onde us\u00e1-los e conseguimos explicar por que o resultado saiu daquele jeito. Quem pula essa etapa pode at\u00e9 fazer um c\u00f3digo funcionar, mas ter\u00e1 mais dificuldade para investigar um erro ou adaptar a solu\u00e7\u00e3o a outro problema. Por isso, em cada exerc\u00edcio, a sequ\u00eancia foi: entender a situa\u00e7\u00e3o, escolher os recursos, escrever, executar, comparar o resultado e corrigir quando necess\u00e1rio. 1. Entrada permitida: quando usar if e else? O primeiro problema pergunta se uma pessoa pode entrar em um local reservado para maiores de idade. A regra \u00e9 \u201c18 anos ou mais\u201d. O detalhe est\u00e1 no ou mais: algu\u00e9m com exatamente 18 anos tamb\u00e9m pode entrar. Em JavaScript, a condi\u00e7\u00e3o precisa contemplar esse limite: const idade = 18; if (idade &gt;= 18) { console.log(&#8220;Entrada permitida&#8221;); } else { console.log(&#8220;Entrada n\u00e3o permitida&#8221;); } O teste mais \u00fatil aqui n\u00e3o \u00e9 s\u00f3 executar com 18. Experimente tamb\u00e9m 17 e 19. Assim voc\u00ea confere o limite, o caso abaixo dele e o caso acima. Durante a aula, mostrei ainda que nem toda condi\u00e7\u00e3o exige um else: isso depende do que deve acontecer quando a condi\u00e7\u00e3o \u00e9 falsa. 2. Situa\u00e7\u00e3o do aluno: a ordem das condi\u00e7\u00f5es importa No segundo exerc\u00edcio, o resultado pode ser aprovado, recupera\u00e7\u00e3o ou reprovado. H\u00e1 mais caminhos poss\u00edveis, ent\u00e3o precisamos organizar os testes. Se a aprova\u00e7\u00e3o come\u00e7a em 7, podemos verificar primeiro essa faixa e depois a recupera\u00e7\u00e3o: const nota = 6; if (nota &gt;= 7) { console.log(&#8220;Aprovado&#8221;); } else if (nota &gt;= 5) { console.log(&#8220;Recupera\u00e7\u00e3o&#8221;); } else { console.log(&#8220;Reprovado&#8221;); } Por que uma nota 8 n\u00e3o cai tamb\u00e9m na condi\u00e7\u00e3o nota &gt;= 5? Porque a primeira condi\u00e7\u00e3o verdadeira j\u00e1 determina o caminho desse encadeamento. Essa \u00e9 uma das partes em que vale prever o resultado no papel antes de executar. Teste notas como 4, 5, 6, 7 e 8 e compare sua previs\u00e3o com a sa\u00edda do programa. 3. Lista de produtos: array, \u00edndice e repeti\u00e7\u00e3o Se precisamos guardar v\u00e1rios produtos, uma vari\u00e1vel para cada nome logo se torna inconveniente. Um array re\u00fane os itens em uma lista. A primeira posi\u00e7\u00e3o tem \u00edndice zero, e o la\u00e7o pode percorrer a lista sem que precisemos escrever um console.log para cada produto. const produtos = [&#8220;Teclado&#8221;, &#8220;Mouse&#8221;, &#8220;Monitor&#8221;, &#8220;Headset&#8221;]; for (let i = 0; i &lt; produtos.length; i++) { console.log(produtos[i]); } Na aula, testei o que acontece ao come\u00e7ar o contador em 1: o primeiro produto fica de fora. Esse pequeno erro ajuda a entender a rela\u00e7\u00e3o entre \u00edndice, length e condi\u00e7\u00e3o de parada. Depois mostrei o for&#8230;of, que percorre diretamente os valores quando n\u00e3o precisamos trabalhar com o \u00edndice. 4. Total da compra: para que serve um acumulador? Agora a lista cont\u00e9m pre\u00e7os. Queremos somar cada valor e apresentar o total somente depois que o la\u00e7o terminar. Para isso, criamos um acumulador que come\u00e7a em zero e recebe cada pre\u00e7o: const precos = [120, 80, 250, 320, 530]; let total = 0; for (const preco of precos) { total += preco; } console.log(total); \/\/ 1300 Esse exerc\u00edcio trouxe o momento mais interessante da aula. Depois de somar os mesmos pre\u00e7os de outra forma, o resultado apareceu como 2600 em vez de 1300. O problema n\u00e3o estava nos produtos: o acumulador j\u00e1 continha o total da primeira passagem e foi usado de novo sem voltar a zero. \u00c9 uma boa demonstra\u00e7\u00e3o do trabalho real de programa\u00e7\u00e3o. Encontrar um n\u00famero inesperado, perguntar de onde ele veio, observar o estado da vari\u00e1vel e testar a corre\u00e7\u00e3o ensina mais do que apenas mostrar o c\u00f3digo final funcionando. 5. Carrinho de compras: por que criar objetos? No \u00faltimo exerc\u00edcio, cada produto tem pelo menos duas informa\u00e7\u00f5es relacionadas: nome e pre\u00e7o. Um objeto permite manter essas propriedades juntas; o array representa o carrinho que recebe v\u00e1rios produtos. A fun\u00e7\u00e3o organiza a a\u00e7\u00e3o de adicionar um item: const carrinho = []; function adicionarProduto(nome, preco) { const produto = { nome, preco }; carrinho.push(produto); } adicionarProduto(&#8220;Teclado&#8221;, 120); adicionarProduto(&#8220;Mouse&#8221;, 80); console.log(carrinho); Perceba a progress\u00e3o: come\u00e7amos com uma condi\u00e7\u00e3o, passamos por listas e repeti\u00e7\u00e3o, calculamos um total e terminamos reunindo array, fun\u00e7\u00e3o e objeto em um problema pr\u00f3ximo de uma aplica\u00e7\u00e3o real. N\u00e3o \u00e9 necess\u00e1rio decorar tudo de uma vez. O importante \u00e9 entender o papel de cada parte. Como praticar depois da aula Assista a cada problema e pause antes da solu\u00e7\u00e3o. Anote quais dados voc\u00ea precisa, qual resultado espera e que estrutura parece adequada. Escreva sua vers\u00e3o, execute com valores diferentes e explique o que aconteceu. Se o resultado estiver errado, investigue antes de procurar uma resposta pronta. Essa pr\u00e1tica desenvolve o racioc\u00ednio que ser\u00e1 necess\u00e1rio quando os exerc\u00edcios crescerem e se transformarem em projetos. Programar \u00e9 seguir um processo, testar hip\u00f3teses e compreender a solu\u00e7\u00e3o. Quer seguir uma sequ\u00eancia completa? Se voc\u00ea quer continuar depois desses exerc\u00edcios, o curso JavaScript do Zero \u2014 L\u00f3gica, HTML, CSS e Projeto Pr\u00e1tico organiza o aprendizado passo a passo, dos fundamentos at\u00e9 a constru\u00e7\u00e3o da Dev Store. O livro digital L\u00f3gica com JavaScript do Zero est\u00e1 inclu\u00eddo no curso. Conhe\u00e7a o curso JavaScript do Zero com livro digital inclu\u00eddo. Assista \u00e0 aula completa<\/p>\n","protected":false},"author":1,"featured_media":2596,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[21],"tags":[],"class_list":["post-2595","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript"],"_links":{"self":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2595"}],"version-history":[{"count":4,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2595\/revisions"}],"predecessor-version":[{"id":2601,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2595\/revisions\/2601"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/media\/2596"}],"wp:attachment":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}