Olá, estudante! Anteriormente, aprendemos o que é um software e suas principais características. Nesta lição, abordamos, de forma introdutória, os conceitos que formam o alicerce do estudo de programação, lógica e algoritmo. Nosso objetivo é que, ao final desta lição, você entenda o que cada um desses termos significa, uma vez que toda a sua jornada em programação está diretamente ligada à real compreensão da lógica e do algoritmo.
Entender esses conceitos é essencial para sua formação, mas esse aprendizado vai além de assimilar apenas os aspectos técnicos. Ele também exige a habilidade de conectar tais conhecimentos a problemas do mundo real. Portanto, dedique-se com foco e curiosidade – essa é a chave para crescer como desenvolvedor e resolver problemas com criatividade e eficiência.
Pronto para começar?
Uma das principais características do ser humano é a sua racionalidade, ou seja, a capacidade de organizar pensamentos e ideias de forma lógica, criando conexões que façam sentido e possam ser compreendidas por outras pessoas. Essa característica possibilitou a evolução da espécie por meio da observação, da identificação de padrões, da criação de regras e da capacidade de prever resultados. Com o tempo, surgiu também a necessidade de descrever, de maneira clara e detalhada, as ações necessárias para atingir um objetivo. A essa habilidade, deu-se o nome de algoritmo.
Uma analogia clássica para explicar algoritmos é uma receita culinária, pois ilustra bem o conceito de um conjunto de instruções sequenciais e ordenadas para se alcançar um resultado. Imagine-se no papel de um confeiteiro que precisa preparar um bolo. Para tanto, você usará a lógica para criar um algoritmo que descreva cada etapa do processo até que o bolo fique pronto. O exemplo ficaria assim:
Prepare os ingredientes: separe e meça todos os ingredientes necessários.
Misture a massa: combine os ingredientes secos e úmidos até formar uma massa homogênea.
Pré-aqueça o forno: ligue o forno e ajuste-o para a temperatura indicada na receita.
Unte a forma: prepare a forma com manteiga e farinha ou papel manteiga.
Asse o bolo: despeje a massa na forma e coloque-a no forno até que fique cozida.
Deixe esfriar: retire o bolo do forno e aguarde que esfrie antes de desenformar.
Finalize: decore ou sirva o bolo conforme preferir.
Assim como em um algoritmo, cada etapa dessa receita é fundamental e deve ser executada na ordem correta para garantir que o resultado seja um bolo delicioso. Essa analogia deixa claro como algoritmos não são apenas uma ferramenta da programação, mas um conceito presente em diversas áreas do cotidiano, facilitando a organização e a solução de problemas de forma sistemática.
Vamos aprender mais sobre isso?
Para ilustrar a importância do conteúdo apresentado nesta lição, imagine que um professor de história da sua escola, responsável por várias turmas, tem um tempo bastante apertado para gerenciar suas atividades. Entre elaborar tarefas desafiadoras, corrigir provas e lançar as notas no fichário de cada aluno, ele encontrava pouco tempo disponível para outras demandas. Visando otimizar seu cronograma, o professor resolveu aplicar o conceito de algoritmo, que nada mais é do que aplicar uma solução baseada na lógica para um problema cotidiano. Para atingir seu objetivo, o professor precisou pensar de maneira lógica e estruturada, criando um conjunto de passos para que um algoritmo pudesse calcular a média com base nas notas fornecidas e aplicar esse algoritmo em um software de planilha, como o Excel ou o Google Planilhas.
O processo simplificou o trabalho do professor, economizando tempo e evitando erros humanos. A possibilidade de aplicar o algoritmo em praticamente toda e qualquer esfera da vida humana é o que torna o conhecimento desse fundamento essencial para garantir eficiência e simplicidade na hora de realizar tarefas complexas. Mais interessante é que esse exemplo é apenas uma das formas de usar a programação, a lógica e os algoritmos de maneira prática no dia a dia. Vamos explorar outro cenário para reforçar essa ideia.
Imagine que precisa tabular os resultados de uma pesquisa que você fez para um trabalho escolar da disciplina de história. Nesse trabalho, o professor solicitou que fizesse um questionário simples, em que as pessoas respondem apenas sim ou não e sua idade. Ademais, foi solicitado que esses dados fossem guardados em uma planilha simples, em que cada linha representasse uma pessoa e cada coluna as respostas, por exemplo, a Linha 1 é composta por SIM na primeira coluna e 25 na segunda coluna; a Linha 2 é composta por NÃO e 48; e assim sucessivamente. Sua tarefa é organizar essa massa de dados para obter sentido. Assim, você desenvolve o seguinte algoritmo para colocar ordem nos dados e extrair informações úteis:
Primeiramente, você agrupa por faixa etária, por exemplo, pessoas com idade entre dez e 20 anos, depois entre 21 e 30 anos e assim até chegar a um valor de corte, como 80 ou mais.
O passo seguinte consiste em separar as respostas em SIM ou NÃO e agrupá-las novamente.
Em seguida, passa para a contagem de cada cenário para chegar, então, na quantidade de pessoas entre 21 e 30 anos que responderam SIM para a pergunta, por exemplo.
Esse foi um exemplo simples do horizonte que conhecer algoritmos pode trazer para sua vida. Espero que perceba que esse conhecimento pode agregar na hora de realizar tarefas das mais simples às mais complexas, além de possibilitar que realize o mapeamento necessário para escrita do fluxo de desenvolvimento de softwares.
De acordo com Souza (2014), um algoritmo pode ser definido como uma sequência de passos necessários para atingir um objetivo específico. Independentemente da linguagem utilizada, o conceito de algoritmo é fundamental e se manifesta em diversas situações do cotidiano, sempre que precisamos seguir uma série de instruções para resolver um problema. De maneira semelhante a uma receita de cozinha, um algoritmo orienta a execução de ações em uma sequência lógica para alcançar um determinado resultado (solução de problema).
Para construir um algoritmo, Souza (2014) propõe alguns passos:
Entender o problema: identificar o problema a ser resolvido, destacando os pontos mais importantes e os objetos que o compõem.
Definir os dados de entrada: determinar quais dados serão fornecidos e quais objetos fazem parte do contexto do problema.
Definir o processamento: planejar quais operações serão efetuadas e quais as restrições para essas operações. De maneira geral, o processamento visa transformar os dados de entrada em dados de saída, além de verificar quais objetos são responsáveis pelas atividades.
Definir os dados de saída: especificar quais dados serão gerados depois do processo.
Construir o algoritmo: estruturar o algoritmo, utilizando um dos tipos – esses serão apresentados mais adiante.
Testar o algoritmo: realizar simulações para verificar se o algoritmo funciona corretamente e resolve o problema proposto.
Corrigir possíveis erros: corrigir os erros (caso sejam identificados durante os testes) e retornar à etapa de construção – Item 5 desta lista – ajustando o algoritmo conforme necessário.
Os tipos mais comuns de algoritmos são: descrição narrativa, fluxograma e pseudocódigo (também conhecido por portugol). Os algoritmos do tipo descrição narrativa, como o próprio nome sugere, consiste em analisar o problema e descrever os passos para sua solução, utilizando uma linguagem natural. A principal vantagem desse tipo de algoritmo é que ele não demanda nenhum conhecimento para sua implementação. Entretanto, em contrapartida, pode gerar interpretações múltiplas, o que, por sua vez, pode dificultar na hora de transcrever o algoritmo em um software.
Outro tipo de algoritmo é o fluxograma, que consiste, basicamente, em analisar e escrever a resolução do problema, usando símbolos gráficos predefinidos. Seu diferencial é a facilidade inerente à utilização de gráficos, já que tais recursos tendem a ser mais fáceis de interpretar do que descrições em texto. Sua desvantagem, no entanto, consiste na necessidade de aprender a simbologia e os detalhes específicos para utilizá-los de maneira eficiente. Na Figura 1, temos um exemplo de fluxograma:
Por último, mas não menos importante, temos o pseudocódigo – também conhecido como portugol. Esse tipo de algoritmo se baseia na análise, na escrita do problema e na resolução por meio de regras de sintaxe predefinidas. O grande diferencial desse tipo de fluxograma está na facilidade de portar o algoritmo para qualquer linguagem de programação posteriormente. Esse tipo de algoritmo demanda um conhecimento prévio de lógica de programação, o que pode tornar a curva de aprendizado um pouco mais desafiadora, principalmente, para iniciantes. Observe, a seguir, um exemplo de algoritmo com portugol:
Var
N1, N2, M: Numerico
Inicio
Escreva "Digite dois números"
leia (N1, N2)
M <- (N1 * N2)
Escreva (“Multiplicação = “ M)
fimalgoritmo
Agora que você conhece o conceito de algoritmo, que tal colocarmos a mão na massa? Vamos avançar para a próxima etapa?
Agora que compreendemos a importância da lógica e dos algoritmos na solução de problemas, que tal colocarmos esse conhecimento em prática? Vamos revisitar o case apresentado nesta lição e ajudar o professor hipotético a simplificar sua rotina? Sua tarefa será criar um algoritmo que calcule a média de cada aluno com base nas notas fornecidas.
Para tanto, aplicaremos os três tipos de algoritmos abordados até aqui: descrição narrativa, fluxograma e pseudocódigo (ou portugol). Esse exercício lhe permitirá consolidar os conceitos aprendidos e compreender como diferentes formas de representação lógica podem facilitar a resolução de problemas reais. Mãos à obra!
Descrição narrativa:
Eu, como professor hipotético desse exemplo, começo a tarefa de cálculo de média dos alunos, separando os trabalhos e provas de cada aluno. Em seguida, somo as notas dos trabalhos e provas daquele aluno da vez e, então, divido pela soma da quantidade de provas e trabalhos.
Observe como esse tipo de algoritmo é aberto e deixa margem para interpretações. Para evitar ou reduzir a ambiguidade, passemos para o próximo tipo de algoritmo.
Fluxograma:
Para nosso exemplo de fluxograma, usaremos o draw.io, também conhecido como Diagrams, uma ferramenta on-line poderosa e muito útil na hora de criar fluxogramas. Conheça a estrutura desse recurso por meio das Figuras 2 e 3.
Apesar de auxiliar a compreensão, a imagem requer uma breve explicação:
1. Início: o fluxograma começa com o símbolo oval, indicando o início do processo.
2. Entrada de dados (N1, N2): um losango (paralelogramo) representa a entrada de dados, em que são informadas as notas do aluno (N1 e N2).
3. Cálculo da média: um retângulo representa a operação de cálculo da média; a fórmula usada é:
4. Condição (Média >= 6,0): um losango indica a verificação de uma condição; aqui, verificamos se a média calculada é maior ou igual a 6,0:
a. Sim: se a média for maior ou igual a 6,0, o fluxo segue para o retângulo em que é exibida a mensagem Aprovado.
b. Não: se a média for menor que 6,0, o fluxo segue para o retângulo em que é exibida a mensagem Reprovado.
5. Fim: após exibir a mensagem, o processo é encerrado, indicado por um oval com a palavra FIM.
Pseudocódigo/portugol:
Analisemos, agora, um exemplo de aplicação da mesma lógica, com a aplicação do algoritmo pseudocódigo/portugol:
Algoritmo "CalculaMedia"
var
N1, N2, Media: real
inicio
// Entrada de dados
escreva("Digite a primeira nota (N1): ")
leia(N1)
escreva("Digite a segunda nota (N2): ")
leia(N2)
// Calcula a média
Media <- (N1 + N2)/2
// Verifica se está aprovado ou reprovado
se Media >= 6.0 entao
escreva("Aprovado")
senao
escreva("Reprovado")
fimse
fimalgoritmo
A estrutura lógica utilizada respeita o exemplo do professor que precisa calcular a média dos alunos, porém, é importante repassarmos o que o código em portugol faz em cada uma das etapas:
Declara as variáveis N1, N2 e Media como números reais.
Solicita e lê as duas notas do usuário.
Calcula a média aritmética das notas.
Verifica se a média é maior ou igual a 6.0.
Exibe Aprovado se a média for >= 6.0, ou Reprovado caso contrário.
Se está curioso sobre os algoritmos do tipo pseudocódigo e queira vê-los em ação, baixe o interpretador VisuAlg clicando aqui. A sua execução é simples, bastando baixar o arquivo compactado no link disponibilizado, descompactar no local da sua preferência e executar o programa visualg30.exe.
A visualização nos dá uma noção da dimensão e poder do VisuAlg, uma ferramenta extremamente útil e robusta, cujo objetivo é lhe ajudar na jornada do estudo de programação. A seguir, na Figura 4, temos uma captura de tela da ferramenta:
Chegamos ao final desta lição com uma base sólida dos fundamentos necessários para um bom início de jornada em programação. Espero que perceba o quão importante é estudar algoritmos e entenda que eles farão parte da sua jornada!
SOUZA, S. G. (org.). Lógica de programação algorítmica. São Paulo, SP: Pearson, 2014. E-book