Entenda os fundamentos da lógica de programação e compreenda sua importância ao iniciar o desenvolvimento de seus códigos!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
A lógica de programação e os algoritmos são os dois pilares fundamentais no desenvolvimento de software, essenciais para a criação de soluções eficientes e funcionais.
Esses conceitos formam a base do pensamento computacional, permitindo que programadores construam sistemas capazes de executar tarefas desde as mais simples até as mais complexas.
Nesta postagem, vou apresentar uma introdução à lógica de programação, para que você compreenda de uma vez por todas o que é e por que é importante dominá-la para o desenvolvimento dos seus códigos.
A lógica de programação funciona basicamente como a “receita” do seu código. É nela que você planeja a sequência de ações que deseja executar, estabelecendo um passo a passo para atingir o resultado desejado.
Aqui, o foco não é o código em si, mas sim definir o que fazer em cada etapa. Depois de pensada e esquematizada, você usará essa lógica como base para escrever e construir seu código na linguagem que escolher.
Sempre que realizamos uma atividade no nosso dia a dia, seguimos, mesmo que sem perceber, uma sequência de passos lógicos até alcançar nosso objetivo.
Na maioria das vezes, isso é tão natural que nem nos damos conta, mas, se você prestar atenção, verá que esse passo a passo está presente em tudo o que você faz. Vamos começar com o exemplo mais clássico de todos: a receita de um bolo.
Para fazer um bolo, é preciso seguir uma receita que possui um passo a passo, com a ordem e a lógica em que cada etapa precisa ser realizada.
Quando trazemos isso para o mundo da programação, definir as etapas e a lógica de execução é fundamental.
Ao programar, estamos definindo uma série de comandos que devem ser executados pelo computador e a ordem em que devem ser executados para atingir o resultado esperado.
Essa sequência de passos definida para realizar uma tarefa é o que chamamos de algoritmo na programação.
Em resumo, um algoritmo é a sequência de passos necessária para realizar uma tarefa em programação. E, assim como em uma receita, as etapas são importantes porque um passo depende da execução correta do procedimento anterior.
Considere a tarefa de programar um computador para publicar automaticamente uma foto no Instagram sempre que uma nova imagem for enviada.
Para isso, o algoritmo necessário incluiria passos como abrir o navegador, acessar o Instagram, verificar se o login foi feito, fazer o upload da foto e clicar em publicar.
Cada uma dessas ações precisa ser minuciosamente instruída ao computador, garantindo que ele possa executá-las de maneira eficiente.
É comum vermos o termo lógica de programação ser usado quase como sinônimo de algoritmo, mas existe uma diferença entre eles.
A lógica de programação refere-se à coerência desse passo a passo em relação ao objetivo desejado. Ela consiste em uma série de regras e comandos que orientam a criação do algoritmo, garantindo que o computador entenda e execute os comandos corretamente.
Ou seja, o algoritmo é o passo a passo que o computador executa, enquanto a lógica de programação é a forma como esse algoritmo é escrito em uma linguagem compreensível pela máquina.
Você não precisa se preocupar tanto com a diferença entre algoritmo e lógica de programação, porque na prática eles andam sempre juntos. Construímos um algoritmo para o computador executar, criando assim uma lógica de programação.
Se um algoritmo contém passos ilógicos ou desnecessários, o programa resultante pode falhar ou produzir resultados indesejados.
A lógica de programação evita esses problemas, garantindo que cada instrução contribua diretamente para o objetivo final do software.
Portanto, a aplicação correta da lógica de programação é crucial para o sucesso de qualquer projeto de desenvolvimento de software.
Quando falamos sobre programação e lógica de programação, é muito comum usarmos o termo variável. Mas o que é uma variável?
De forma simples, pense na variável como sendo uma caixinha na qual podemos armazenar informações. Para nos ajudar a localizar posteriormente essa informação, colocamos uma “etiqueta” nela, atribuindo um nome.
Assim quando quisermos acessar novamente essa informação, basta buscar e chamar pelo nome da “etiqueta”.
Por exemplo:
nomeReceita = 'Bolo de Laranja'
Aqui, o nome da variável é nomeReceita, o símbolo de igual serve para atribuir uma informação, ou seja, nomeReceita receberá ‘Bolo de Laranja’, a informação que vem depois do símbolo de igual. ‘Bolo de Laranja’ está escrito entre aspas para indicar que é um texto.
Assim como temos diferentes ingredientes de diferentes origens, na programação, temos diferentes tipos de variáveis. Por enquanto, considere que textos serão colocados entre aspas e números serão passados normalmente.
Vamos pensar agora em outro exemplo. Imagine um professor que aplica 12 provas por semestre, e ao final, ele precisa calcular a média dessas 12 provas..
Ou seja, todo semestre, ele precisa somar as notas de todos os alunos, calcular a média, e caso a média seja maior ou igual a 6, o aluno estará aprovado.
Vamos pensar na lógica de programação que podemos desenvolver por trás desse exemplo.
O primeiro passo, a primeira instrução que vamos passar para o computador, são as informações que queremos armazenar e utilizar, e a quais caixinhas elas pertencem. Então teremos:
nomeAluno = 'Daniel Porto' notasLancadas = 0 pontosSomados = 0 media = 0
Aqui, salvaremos o nome ‘Daniel Porto’ (que é um texto) na caixinha nomeAluno (nossa variável). Além disso, considerando que estamos no início do semestre, atribuímos o valor 0 para as variáveis notasLancadas, pontosSomados e media, visto que nenhuma nota foi dada ainda.
Feito isso, o que desejamos fazer agora? Conforme forem sendo lançadas as notas, queremos contabilizá-las, somá-las aos pontos somados e, ao final, calcular a média. E com base nisso, queremos definir se o aluno foi aprovado ou reprovado.
A construção do nosso código deve nos levar para essa verificação:
se (media >= 6) então escreva('Aluno aprovado') caso contrário então escreva('Aluno reprovado')
Aqui já temos uma lógica de programação, pois queremos que nosso código faça esse processo de verificação ao final dele. Para isso, além de executar essa etapa, ele precisa executar processos anteriores que permitam essa verificação.
Mas a verificação em si já é um processo lógico que pode ser convertido em linguagem de programação. Pois temos uma condição sendo avaliada, e para cada cenário, essa condição receberá uma resposta diferente.
Antes de chegarmos nessa verificação, nesse código condicional, precisamos criar um código intermediário, que fornecerá as informações necessárias para essa verificação. Esse código trará consigo uma estrutura de repetição.
enquanto (notasLancadas <12) nota = insira a nova nota do Daniel pontosSomados = pontosSomados + nota notasLancadas = notasLancadas + 1 media = pontosSomados / notasLancadas
Essa é uma estrutura de repetição. A lógica dela diz que, enquanto uma determinada condição não for atendida, ela deve executar os comandos que estão contidos nela. Ou seja, ficar repetindo esse trecho de código.
Nesse caso, temos que enquanto a nota for menor que 12, o computador deve percorrer os seguintes passos:
1 – Inserir uma nova nota e armazená-la na variável nota.
2 – Somar o valor dessa nota com a variável pontosSomados e atribuir o resultado dessa soma à variável pontosSomados. Fazemos isso ao invés de atribuir o valor de nota diretamente à variável, porque se atribuíssemos diretamente o valor, na próxima execução esse valor seria substituído ao invés de somado.
3 – Faremos o mesmo procedimento para o número de notasLancadas. Como iniciou em 0, a cada execução vamos adicionar mais 1, sempre fazendo notasLancadas + 1, para somar o valor anterior obtido com 1.
Esse será o controle que nosso código terá, pois após a 12ª execução dessa lógica, o valor de notasLancadas será 12, e a estrutura de repetição poderá ser interrompida. Pois a cada execução somamos 1 ao valor anterior.
4 – Por fim, a última etapa dentro dessa estrutura será calcular a média, pegando os pontosSomados e dividindo pelo número de notasLancadas. Isso permitirá ter uma média parcial enquanto a estrutura se repete, e ao final das 12 iterações, ter a média final.
Ao final, teremos a lógica completa que queremos que nosso computador execute, seguindo os procedimentos determinados:
nomeAluno = 'Daniel Porto' notasLancadas = 0 pontosSomados = 0 media = 0 enquanto (notasLancadas <12) nota = insira a nova nota do Daniel pontosSomados = pontosSomados + nota notasLancadas = notasLancadas + 1 media = pontosSomados / notasLancadas se (media >= 6) então escreva('Aluno aprovado') caso contrário então escreva('Aluno reprovado')
Para ajudar a compreender e pensar nas estruturas de repetição sem se perder, vou ensinar um truque eficiente: o teste de mesa.
Você cria uma tabela em que a primeira coluna é o número de repetições realizadas, e as outras colunas são os valores referentes a cada uma das caixinhas (variáveis) que serão modificadas dentro da estrutura.
Vamos pegar o exemplo anterior, considerando um número menor de provas. Ao invés de 12, vamos considerar 4 notas.
enquanto (notasLancadas <4) nota = insira a nova nota do Daniel pontosSomados = pontosSomados + nota notasLancadas = notasLancadas + 1 media = pontosSomados / notasLancadas
Para conferir essa lógica e a aplicação dela no seu código posteriormente, você pode fazer esse teste de mesa. Vamos criar a tabela inicial:
A coluna # representa o número de repetições já realizadas, e as outras colunas são os valores que queremos calcular. Inicialmente, todos começam zerados, pois foi assim que os definimos no começo. Como não houve lançamento de notas ainda, não temos pontos nem média.
Quando a primeira nota for lançada, teremos o valor de 1 na # simbolizando que os códigos dentro da estrutura foram executados uma vez.
A notasLancadas terá seu valor anterior (0) acrescido de 1, pontosSomados terá seu valor anterior (0) acrescido do valor da nota dada, e a media será calculada com base nesses valores: pontosSomados / notasLancadas.
Perceba que a cada repetição, o notasLancadas precisa pegar o valor anterior e somar 1, o pontosSomados pega o valor anterior e soma a nota atual, e a média divide o pontosSomados atual pelo valor notasLancadas atual.
Após a repetição de número 4, nossa condição não será mais atendida. Ou seja, o valor de notasLancadas não será menor do que 4, e então não precisaremos mais percorrer essa estrutura de repetição.
No caso inicial, essa estrutura seria executada até a 12ª vez, parando ao final dela e partindo para o código condicional em que verificará se a média é maior ou igual a 6, exibindo a mensagem correspondente.
Vou te mostrar agora essa mesma lógica que construímos, aplicada com um código JavaScript.
const prompt = require("prompt-sync")(); const aluno = "Daniel Porto"; let pontosSomados = 0; let notasLancadas = 0; let mediaPontos = 0; while (notasLancadas < 12) { const nota = Number(prompt(`${notasLancadas + 1}a nota do ${aluno}: `)); console.log(`A nota inserida foi ${nota}`); pontosSomados = pontosSomados + nota; notasLancadas = notasLancadas + 1; mediaPontos = pontosSomados / notasLancadas; console.log(`Média até ${notasLancadas}a nota: ${mediaPontos}`); } console.log(`Média final do ${aluno}: ${mediaPontos}`); if (mediaPontos >= 6) { console.log("Aluno aprovado"); } else { console.log("Aluno reprovado"); }
Se você sabe ou conhece um pouco de inglês, irá reparar que os comandos em JavaScript são bem semelhantes com termos e palavras em português que usamos para construir a nossa lógica de programação.
Apesar de não ser necessário saber inglês para programar, conhecer o idioma pode te ajudar e facilitar sim seu processo de aprendizado, além de proporcionar mais oportunidades de carreira.
Mas vamos agora, analisar esse código passo a passo, para que você possa perceber as semelhanças dele com a lógica que construímos anteriormente.
Na primeira linha do código, estamos importando o módulo prompt-sync e armazenando-o na constante prompt:
const prompt = require("prompt-sync")();
Dessa forma, será possível receber entradas do usuário, ou seja, será possível para o usuário digitar no terminal. Nesse caso, o professor poderá digitar a nota.
Em seguida, estamos criando as variáveis, de forma bem semelhante à que vimos antes:
const aluno = "Daniel Porto"; let pontosSomados = 0; let notasLancadas = 0; let mediaPontos = 0;
A diferença é que no JavaScript podemos atribuir as palavras-chave const e let antes do nome da variável. Assim, definimos qual variável não pode ser modificada no momento de execução do código, definindo-a como const (constante), e as que podem ser modificadas com let.
Na sequência, temos a nossa estrutura de repetição while, que nada mais é do que “enquanto” em inglês, e delimita tudo que será repetido por esse par de chaves {}. Tudo que estiver dentro dele será repetido enquanto notasLancadas for menor (<) que 12.
while (notasLancadas < 12) { const nota = Number(prompt(`${notasLancadas + 1}a nota do ${aluno}: `)); console.log(`A nota inserida foi ${nota}`); pontosSomados = pontosSomados + nota; notasLancadas = notasLancadas + 1; mediaPontos = pontosSomados / notasLancadas; console.log(`Média até ${notasLancadas}a nota: ${mediaPontos}`); }
A primeira linha dessa repetição, const nota = Number(prompt(${notasLancadas + 1}a nota do ${aluno}: ));, será responsável por exibir a mensagem no terminal que informará ao professor qual a nota ele está inserindo e para qual aluno.
Depois, temos a sequência de atualização das variáveis, adicionando a nota atual à variável pontosSomados; incrementando mais 1 à variável notasLancadas; e, por fim, calculando a mediaPontos e exibindo com o console.log a média atual até a nota inserida.
Ao completar as 12 execuções, nossa estrutura de repetição será finalizada, e será exibido na tela a média final do aluno após todas as notas serem inseridas.
console.log(`Média final do ${aluno}: ${mediaPontos}`);
Com essa média calculada, iniciamos o bloco condicional que irá verificar se (if) a média é maior ou igual a 6 e exibirá a mensagem “Aluno aprovado”. Ou, caso contrário (else), caso a nota seja menor do que 6, exibirá a mensagem “Aluno Reprovado”.
if (mediaPontos >= 6) { console.log("Aluno aprovado"); } else { console.log("Aluno reprovado"); }
Executando o código completo, poderemos inserir as 12 notas, e ao final, teremos como resultado:
Desse modo, podemos compreender como nossa lógica construída poderia ser aplicada para a construção de um código JavaScript. Caso queira saber mais sobre JavaScript e compreender mais a fundo esse código, você pode começar por essa aula aqui.
Utilizando os conceitos aprendidos até aqui, vamos resolver juntos 3 exercícios práticos que te ajudarão a fixar e melhorar a compreensão sobre algoritmos e lógica de programação.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Nosso objetivo é traduzir um passo a passo lógico para uma linguagem de programação.
Embora o foco desta aula seja JavaScript, esse processo pode ser aplicado a outras linguagens, como Python, por exemplo.
Em cada exercício, o objetivo será transformar o enunciado do problema em um código, pensando na lógica e no algoritmo por trás dele.
Vale lembrar que um mesmo exercício pode ter diversas formas de resolução, o importante é que a lógica e o resultado façam sentido.
Crie uma função que identifica se o número fornecido é par ou ímpar.
Para esse exercício, precisamos definir uma função que receba um número como argumento e identifique se ele é par ou ímpar. Para isso, verificamos se o resto da divisão do número por 2 é igual a 0. Se for, o número é par; caso contrário, é ímpar.
No final, exibiremos a mensagem correspondente: “O número informado é par” ou “O número informado é ímpar”.
Essa é a lógica que precisamos seguir. Para transformá-la em um código JavaScript, utilizaremos algumas estruturas importantes:
Estruturas Condicionais: Elas permitem que o programa tome decisões baseadas em condições específicas. Em JavaScript, podemos usar if, else if e else para criar essas estruturas.
Operador de Módulo (%): Este operador retorna o resto da divisão de um número. Assim, para verificar o resto da divisão de um número por 2, usamos o operador %.
Com isso, podemos definir a função identificarParOuImpar, que recebe uma variável numero como argumento.
A função verifica se o resto da divisão de numero por 2 é igual a 0 e, se for, retorna a mensagem de que o número é par; caso contrário, indica que o número é ímpar.
function identificarParOuImpar(numero) { if (numero % 2 === 0) { console.log("O número informado é par."); } else { console.log("O número informado é ímpar."); } }
Podemos testar nossa função chamando-a com diferentes números.
identificarParOuImpar(10); identificarParOuImpar(5); identificarParOuImpar(4); identificarParOuImpar(7);
Imprima no console a tabuada de multiplicação completa de todos os números do 1 ao 10.
Neste exercício, teremos que definir uma função que recebe um número como argumento e gera todos os múltiplos desse número de 1 a 10.
Como queremos os resultados das tabuadas de cada número de 1 a 10, será necessário criar uma variável de controle e usar um loop de repetição que chamará a função 10 vezes. Em cada execução, será exibida a tabuada de um dos números.
As estruturas de repetição, ou loops, são usadas para executar um bloco de código repetidamente até que uma condição específica seja atendida. Em JavaScript, existem diferentes tipos de loops, como for e while.
Para esta solução, utilizaremos a estrutura while, mas também seria possível resolver com for.
Começaremos definindo a função gerarMultiplosDeUmNumero, que recebe um número como argumento e exibe os múltiplos desse número de 1 a 10.
Dentro dessa função, usaremos console.log formatado para exibir os múltiplos do número, utilizando crases para combinar variáveis e texto, mostrando o resultado das operações em sequência.
function gerarMultiplosDeUmNumero(numero) { console.log( `${numero * 1} - ${numero * 2} - ${numero * 3} - ${numero * 4} - ${ numero * 5 } - ${numero * 6} - ${numero * 7} - ${numero * 8} - ${numero * 9} - ${ numero * 10 }` ); }
Em seguida, declaramos a variável numeroInicial e atribuímos a ela o valor 1. Esta será a variável que usaremos para controlar o loop while.
Dentro do loop, enquanto numeroInicial for menor ou igual a 10, a função gerarMultiplosDeUmNumero será chamada com o valor atual de numeroInicial.
A cada repetição, esse valor será incrementado em 1 (numeroInicial += 1), fazendo com que o loop seja interrompido quando a variável for maior que 10.
function gerarMultiplosDeUmNumero(numero) { console.log( `${numero * 1} - ${numero * 2} - ${numero * 3} - ${numero * 4} - ${ numero * 5 } - ${numero * 6} - ${numero * 7} - ${numero * 8} - ${numero * 9} - ${ numero * 10 }` ); } let numeroInicial = 1; while (numeroInicial <= 10) { gerarMultiplosDeUmNumero(numeroInicial); numeroInicial+=1; }
Escreva um programa que identifique o maior e o menor número dentro de um array.
Neste exercício, precisaremos definir uma função que percorra uma lista de números e determine qual é o maior e o menor número presente nela.
A função deve receber uma lista, verificar se a lista está vazia, criar uma variável para armazenar o maior valor e outra para armazenar o menor valor. Ambas as variáveis serão inicializadas com o primeiro elemento da lista.
Em seguida, usaremos um laço de repetição para percorrer todos os elementos da lista, começando pelo segundo elemento até o final.
Para cada elemento da lista, iremos compará-lo com as variáveis de maior e menor valor. Se o novo elemento for maior ou menor do que o valor armazenado em uma dessas variáveis, atualizaremos a variável correspondente.
Por fim, exibiremos os valores ao final da execução.
Para implementar essa lógica em JavaScript, começaremos criando a função identificarMaiorEMenorNumArray. Essa função receberá uma lista e verificará se ela está vazia (if (lista.length === 0)).
Caso esteja, a função imprimirá uma mensagem indicando que a lista precisa ter elementos e interromperá a execução com um return.
Caso contrário, as variáveis maiorElemento e menorElemento serão inicializadas com o primeiro elemento da lista (lista[0]). Em seguida, utilizaremos um loop for para percorrer a lista, começando do segundo elemento (posicaoElemento = 1).
Para cada elemento da lista:
Esse loop for será executado enquanto posicaoElemento for menor que o tamanho da lista (lista.length). A cada iteração, o valor de posicaoElemento é incrementado em 1.
function identificarMaiorEMenorNumArray(lista) { if (lista.length === 0) { console.log("Informe uma lista não-vazia."); return; } let maiorElemento = lista[0]; let menorElemento = lista[0]; for (let posicaoElemento = 1; posicaoElemento < lista.length; posicaoElemento += 1) { //Encontrando o menor elemento if (lista[posicaoElemento] < menorElemento) { menorElemento = lista[posicaoElemento]; } //Encontrando o maior elemento if (lista[posicaoElemento] > maiorElemento) { maiorElemento = lista[posicaoElemento]; } } console.log(`O menor elemento é ${menorElemento}`); console.log(`O maior elemento é ${maiorElemento}`); }
Para testar, podemos chamar nossa função fornecendo diferentes listas. É importante testar com várias listas para garantir que a função esteja funcionando corretamente.
identificarMaiorEMenorNumArray([13, 2, 5, 8, 3, 33, 4, 42, 42.5]); identificarMaiorEMenorNumArray([10, 12, 53, 7, 20, 330, 45, 12, 7.5]);
Praticar é essencial para dominar e compreender bem os conceitos de algoritmos e lógica de programação.
Existem muitos recursos online, como plataformas de codificação e exercícios interativos, que podem ajudar a aprimorar suas habilidades nessa área.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
Resolver problemas do dia a dia com programação ajuda a exercitar tanto algoritmos quanto a lógica, te ajudando a compreender melhor e fixar os conhecimentos aprendidos aqui.
Para que você possa treinar e praticar os conceitos de lógica de programação, preparei mais 3 exercícios para você resolver sozinho.
No material disponível para download, você encontrará o gabarito com as respostas e a resolução feita utilizando JavaScript, com comentários que oferecem uma explicação detalhada sobre cada etapa.
Mas assim como os exercícios que resolvemos juntos, eles podem ser solucionados em qualquer linguagem de programação.
Crie um programa que conte quantas vezes cada caractere aparece em um texto fornecido.
Exemplo: Para o texto “JavaScript”, o resultado seria: {‘J’: 1, ‘a’: 2, ‘v’: 1, ‘S’: 1, ‘c’: 1, ‘r’: 1, ‘i’: 1, ‘p’: 1, ‘t’: 1}.
Escreva um programa que encontre o maior número em uma lista de números fornecida.
Suponha que seu amigo estadunidense veio te visitar na Bahia. Ao buscar um termômetro para descobrir a temperatura no momento, ele percebe que não sabe ler essa informação.
Ajude-o criando um programa que converta a temperatura como conhecemos (graus Celsius) para o que ele está acostumado (graus Fahrenheit).
Na aula de hoje, apresentei uma introdução à lógica de programação para que você compreenda o que é e como é importante entendê-la para desenvolver seus códigos, além de discutir maneiras de praticá-la.
Dominar a lógica de programação e os algoritmos é fundamental para quem deseja se tornar um programador competente. Esses conceitos são essenciais para a criação de softwares que funcionem corretamente e resolvam problemas de forma eficaz.
Como vimos, a lógica de programação é a receita, o passo a passo que você irá planejar e transmitir para que o computador execute. Com a lógica planejada e estruturada, você pode utilizá-la para criar seu código na linguagem de programação com a qual estiver trabalhando.
Recomendo que pratique mais utilizando exemplos como o que vimos na aula para aprimorar sua compreensão e habilidades tanto com a lógica de programação quanto com a programação em si.
Para acessar publicações de JavaScript, clique aqui!
Posts mais recentes de JavaScript
Posts mais recentes da Hashtag Treinamentos
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.