aula 2

O que é um ALGORITMO?

Olá. Seja muito bem-vindo à aula 2 do Curso gratuito de Algoritmos e Lógica de Programação.

Muitos pensam erroneamente que programar computadores se resume a sentar na frente do teclado e começar a escrever códigos.

Na verdade, a etapa mais importante nesse processo ocorre antes da escrita da primeira linha de código. Eu estou falando da elaboração do algoritmo.

Você sabe o que é um algoritmo?

Na Wikipédia brasileira encontramos a seguinte definição:

Em ciência da computação, um algoritmo é uma sequência finita de ações executáveis que visam obter uma solução para um determinado tipo de problema.

Esta definição já trás alguns conceitos interessantes pra nos fazer pensar quando diz “sequência finita de ações“. Quando a Tia Nastácia está na cozinha preparando aquela broa de fubá deliciosa, ela está executando uma sequência finita de ações, ou passos, e que bom que é uma sequência finita (e não infinita), senão nunca teríamos uma broa para o café da tarde.

Então uma receita é um algoritmo?

Sim! Uma receita é um algoritmo. Em sua essência, toda receita precisa de ingredientes (elementos de entradas) que serão preparados e misturados de acordo com a receita (passo-a-passo) para produzir um prato, como uma deliciosa broa de fubá (resultado final, saída).

No mesmo parágrafo há ainda outra definição para algoritmo lá na página da Wikipédia brasileira:

… algoritmos são procedimentos precisos, não ambíguos, mecânicos, eficientes e corretos.

Esta definição agora foca na utilização do termo algoritmo na computação, por isso “mecânicos”. Vamos entender melhor o que significa cada parte desta definição:
– procedimentos precisos – faz o que precisa ser feito, sem enrolação, nem mais, nem menos.
– não ambíguos – na computação ambiguidade é sinônimo de problema. É desejado e esperado que um algoritmo não possua ambiguidade (mais de uma interpretação). Ao traduzir um algoritmo para alguma linguagem de programação, passos ambíguos podem gerar muitos problemas. Em uma receita, um clássico exemplo de ambiguidade é “sal a gosto” ou ainda “uma pitada de sal“. Nós humanos sabemos o que isso significa, mas e se fosse uma máquina preparando a receita? Quanto sal deveria ser adicionado? Um grama? Três gramas? Dez gramas?
– mecânicos – porque, na computação, todo algoritmo, em algum momento, será traduzido para alguma linguagem de programação e fará uma máquina trabalhar.
– eficientes e corretos – afinal se estamos seguindo uma receita de broa de fubá da Tia Nastácia, é desejado que em poucas horas tenhamos uma broa de fubá pronta e não uma polenta. Um algoritmo só tem utilidade se, ao final, ele produzir uma saída (resultado) correta em tempo hábil (antes do programador que o escreveu morrer pelo menos rsrsrs).

Pra ajudar na compreensão desse conceito, trago agora outra definição de algoritmos, agora do clássico livro Algoritmos: Teoria e Prática. Neste, os autores definem algoritmos assim:

… um algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída. Portanto, um algoritmo é uma sequência de passos computacionais que transformam a entrada na saída.

Novamente esta definição está diretamente relacionada à computação ao dizer “procedimentos computacionais” e “passos computacionais“, mas também reforça a ideia de que um algoritmo é uma sequência de passos que transforma uma entrada em uma saída.

Eu prefiro uma definição mais abrangente e que possa ser aplicada à realidade da computação sem perda de significado, como:

Algoritmo é uma sequência finita de passos organizados de forma lógica que visam resolver um problema.

Finita porque em algum momento o algoritmo precisa finalizar e apresentar uma resposta (saída). Um algoritmo infinito é inútil.

Passos organizados porque, por mais que existam variações, há uma sequência lógica para executar cada passo.

Resolver um problema, porque esta é a finalidade de todo algoritmo.

Depois de tantas definições, agora você deve estar imaginando na quantidade de algoritmos que fazem parte do seu dia-a-dia e você não se dava conta. E você está certo:
– fazer um bolo.
– atravessar a rua.
– fazer uma ligação.
– trocar uma lâmpada.

Agora, vamos avaliar este último em mais detalhes.

Um possível algoritmo para realizar a troca de uma lâmpada pode ser:
1 – Início
2 – Pegar uma escada;
3 – Posicionar a escada embaixo da lâmpada;
4 – Buscar uma lâmpada nova;
5 – Subir na escada;
6 – Retirar a lâmpada velha do bocal;
7 – Colocar a lâmpada nova no bocal;
8 – Jogar a lâmpada velha fora.
9 – Fim

Perceba que alguns passos podem ser trocados de ordem sem prejudicar o resultado final. Eu posso, por exemplo, pegar o passo 4 e colocar antes do passo 2 e ainda teremos o mesmo resultado, mas eu não posso, por exemplo, colocar o passo 6 antes dos passos 3 e 5.

Será que é possível melhorar este algoritmo?

A primeira pergunta que podemos nos fazer é: quem disse que a lâmpada está queimada? Ou ainda, onde testamos se a lâmpada está realmente queimada?

Então, inserindo este teste em nosso algoritmo temos esta versão melhorada:
(vídeo versão 2)

Início
Pegar uma escada;
Posicionar a escada embaixo da lâmpada;
Buscar uma lâmpada nova;
Ligar o interruptor;
SE a lâmpada não acender, ENTÃO:
    Subir na escada;
    Retirar a lâmpada velha do bocal;
    Colocar a lâmpada nova no bocal;
    Jogar a lâmpada velha fora.
Fim

Esse recuo nas linhas de 7 a 10 se chama endentação. É apenas um recurso visual para indicar que estas linhas apenas serão executadas se o teste na linha 6 for verdadeiro.

Agora temos uma versão mais eficiente. Será que ainda pode melhorar?

Sim pode. Para que pegarei uma escada e uma lâmpada nova se a lâmpada não estiver queimada? Então podemos iniciar nosso algoritmo fazendo este teste.


(vídeo versão 3)

Início
Ligar o interruptor;
SE a lâmpada não acender, ENTÃO:
     Pegar uma escada;
     Posicionar a escada embaixo da lâmpada;
     Buscar uma lâmpada nova;
     Subir na escada;
     Retirar a lâmpada velha do bocal;
     Colocar a lâmpada nova no bocal;
     Jogar a lâmpada velha fora.
Fim

Agora sim nosso algoritmo está eficiente. Será que ele vai funcionar 100% das vezes? O que acontecerá se a lâmpada nova também estiver queimada? Então, se queremos que nosso algoritmo seja realmente eficiente precisamos também testar essa possibilidade, e aí chagamos à nossa quarta versão:


(vídeo versão 4)

Início
Ligar o interruptor;
SE a lâmpada não acender, ENTÃO:
     Pegar uma escada;
     Posicionar a escada embaixo da lâmpada;
     ENQUANTO a lâmpada não acender, FAÇA:
          Buscar uma lâmpada nova;
          Subir na escada;
          Retirar a lâmpada velha do bocal;
          Colocar a lâmpada nova no bocal;
          Jogar a lâmpada velha fora.
Fim

Perceba que agora, além de uma decisão na linha 3, temos também uma repetição na linha 6, o que nos garante que a lâmpada será trocada até que uma lâmpada acenda. Agora temos um algoritmo eficiente.

Para o bom andamento de nosso curso, tenha sempre em mente a partir de agora esta definição:

Algoritmo é uma sequência finita de passos organizados de forma lógica que visam resolver um problema.

Só há uma forma de aprender a construir algoritmos, construindo. Aqui eu deixo uma tarefa de casa. Você que está finalizando esta aula, não importa a data, eu quero que você observe no seu dia a dia exemplos de algoritmos que você faz com frequência e não tinha consciência que poderiam ser chamados de algoritmos. Quero que você os escreva aqui nos comentários, não importa se já escreveram, registre os seus, isso faz parte do seu aprendizado. Ok?

Programar é bem mais divertido quando você está em grupo, quando tem alguém estudando e praticando junto com você, para compartilhar ideias, dúvidas e teorias. É como ler um livro, é bem mais gostoso quando seus amigos estão lendo o mesmo livro que você.

Compartilhe esta aula com seus amigos em suas redes sociais, convide-os para fazer este curso junto com você. Ajude o canal a crescer, só você tem esse poder. Se você ainda não é inscrito no canal, se inscreve a pressione o sininho para ser notificado sempre que uma nova aula for postada. Do mais, bons estudos e até a próxima aula.

Este post tem 2 comentários

  1. Julio Cesar

    Parabéns, muito boa sua didática

  2. Julio Cesar

    Acordar cedo
    levantar da cama
    pegar a toalha
    ir ao banheiro
    ligar o chuveiro
    pega o sabonete
    se ensaboar
    tira o excesso
    desligar o chuveiro
    pegar a toalha
    se enxugar
    ir ao quarto
    abrir o guarda roupa
    pegar roupa
    vestir a roupa
    pegar o sapato
    calçar o sapato
    tomar um cafe
    ir ao banheiro
    pegar escova de dente
    pegar a pasta
    colocar a pasta na escova
    abrir a torneira
    e por ai vai……..

Deixe um comentário

4 × 1 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.