Pular para o conteúdo

Algoritmos

Um algoritmo é um conjunto de instruções que resolvem um problema de maneira lógica e eficiente.

Um algoritmo pode resolver um problema muito específico, mas é melhor que ele consiga resolver problemas parecidos também. Por isso, ao criar um algoritmo, consideramos que ele seja capaz de receber dados de entrada para que ele possa ser reutilizado.

Imagine que você precisa explicar para alguém como fazer um bolo. Você pode criar uma lista de passos, que seria algo como:

  1. Separe os ingredientes: farinha, açúcar, ovos, leite, fermento, etc.
  2. Misture os ingredientes em uma tigela.
  3. Coloque a mistura em uma forma.
  4. Asse a mistura no forno por uma hora e meia.

Esse algoritmo é uma sequência de instruções que, se seguidas corretamente, resultará em um bolo. Ele é lógico porque as instruções estão em uma ordem que faz sentido, e é eficiente porque não inclui passos desnecessários.

Uma outra forma de descrever esse mesmo algoritmo seria usando Linguagem Natural de uma forma mais fluida, que é a forma como falamos e escrevemos no dia a dia. Por exemplo:

Para fazer um bolo, coloque em uma tigela farinha, açúcar e ovos. Misture e adicione leite e o fermento. Coloque a mistura em uma forma e asse no forno por uma hora e meia.

Um algoritmo pode ser representado de diferentes formas. A forma como representamos depende do objetivo e do público-alvo que irá utilizar o algoritmo.

Dentre as principais formas que podemos representar um algoritmo, estão:

  • Linguagem Natural
  • Lista de Passos
  • Fluxograma
  • Pseudocódigo
  • Código de Programação
  • Código de Máquina

Cada uma dessas formas tem suas vantagens e desvantagens, e a escolha da forma de representação depende do contexto em que o algoritmo será utilizado. Por exemplo, um fluxograma pode ser mais fácil de entender para pessoas que não estão familiarizadas com a linguagem de programação, enquanto um código de programação pode ser mais eficiente para programadores e para converter o algoritmo em instruções que serão usadas pelo computador.

A linguagem natural é a forma como falamos e escrevemos no dia a dia. Ela é fácil de entender para a maioria das pessoas, mas pode ser ambígua e difícil de seguir se o algoritmo for complexo. Observe o seguinte exemplo:

Tirinha

O menino estava certo? Ele seguiu as instruções corretamente, mas o resultado não foi o esperado.

O problema da linguagem natural é que ela pode ser interpretada de diferentes formas, dependendo do contexto e da experiência de cada pessoa. É importante ser muito específico e claro ao criar um algoritmo, exatamente por isso existem outras formas de representação que permitem menos ambiguidade.

A lista de passos é uma forma de representar um algoritmo de maneira mais estruturada e organizada. Ela é fácil de seguir e entender, mas pode ser difícil de ler se o algoritmo for muito longo ou complexo. Por exemplo:

  1. Separe os ingredientes: farinha, açúcar, ovos, leite, fermento, etc.
  2. Misture os ingredientes em uma tigela.
  3. Coloque a mistura em uma forma.
  4. Asse a mistura no forno por uma hora e meia.

A grande vantagem da lista de passos é que ela é mais fácil de seguir e estabelecer uma ordem clara para executar as instruções. No entanto, se o algoritmo for muito longo ou complexo, a lista de passos pode se tornar difícil de ler e entender.

O fluxograma é uma representação visual de um algoritmo, usando símbolos para representar as diferentes etapas e decisões. Ele é visualmente intuitivo e fácil de entender, mas pode ser mais difícil de construir e de ser interpretada pelo computador. Por exemplo:

Fluxograma

O fluxograma é uma ótima forma de representar algoritmos que envolvem decisões e fluxos de controle, pois permite visualizar claramente as diferentes possibilidades e caminhos que o algoritmo pode seguir. No entanto, ele pode ser mais difícil de construir e interpretar, especialmente para algoritmos mais complexos.

O pseudocódigo é uma forma de representar um algoritmo usando uma linguagem de programação simplificada. Ele é mais próximo da linguagem de programação, facilitando a transição para o código real, mas pode ser difícil de entender para pessoas que não estão familiarizadas com a sintaxe do pseudocódigo. Por exemplo:

Algoritmo CalcularMedia
Entrada: notas[1..n]
Saída: media
soma <- 0
para i de 1 até n faça
soma <- soma + notas[i]
fim para
media <- soma / n
retorne media

O pseudocódigo é uma ótima forma de representar algoritmos de maneira clara e estruturada, especialmente para programadores que estão familiarizados com a sintaxe do pseudocódigo. Ele permite uma representação mais precisa e detalhada do algoritmo, mas pode ser difícil de entender para pessoas que não estão familiarizadas com a sintaxe do pseudocódigo.

O código de programação é a forma mais precisa e detalhada de representar um algoritmo, pois pode ser interpretado diretamente pelo computador. Ele é eficiente para programadores e para converter o algoritmo em instruções que serão usadas pelo computador, mas requer conhecimento de uma linguagem de programação específica e pode ser difícil de entender para pessoas que não estão familiarizadas com a linguagem. Por exemplo:

def calcular_media(notas):
soma = 0
for nota in notas:
soma += nota
media = soma / len(notas)
return media

O código de programação é a forma mais precisa e detalhada de representar um algoritmo, pois pode ser interpretado diretamente pelo computador. Ele é eficiente para programadores e para converter o algoritmo em instruções que serão usadas pelo computador, mas requer conhecimento de uma linguagem de programação específica e pode ser difícil de entender para pessoas que não estão familiarizadas com a linguagem.

O código de máquina é a forma mais baixa de representação de um algoritmo, pois é composto por instruções que podem ser interpretadas diretamente pelo computador, no formato binário. Ele é eficiente para o computador, mas é impraticável de entender para humanos e requer conhecimento avançado de arquitetura de computadores para converter. Por exemplo, o código de máquina para a instrução “calcular a média de um conjunto de notas” seria algo como:

10101000 00000001
10101000 00000010
10101000 00000011
10101000 00000100
0101000 00000101
0101000 00000110

Apenas um exemplo e não representa o algoritmo real

Por fim, podemos comparar as diferentes formas de representação de algoritmos em uma tabela:

Forma de RepresentaçãoVantagensDesvantagens
Linguagem NaturalFácil de entender para a maioria das pessoas. Pode ser usada para descrever algoritmos de forma informal e intuitiva. Pode expressar mais detalhes.Pode ser ambígua e difícil de seguir se o algoritmo for complexo
Lista de PassosFácil de seguir e entender. Permite uma estrutura clara e organizada.Pode ser difícil de ler se o algoritmo for muito longo ou complexo.
FluxogramaVisualmente intuitivo e fácil de entender. Permite uma representação clara das decisões e fluxos de controle.Mais difícil de construir e de ser interpretada pelo computador
PseudocódigoMais próximo da linguagem de programação, facilitando a transição para o código real. Permite uma representação clara e estruturada do algoritmo.Pode ser difícil de entender para pessoas que não estão familiarizadas com a sintaxe do pseudocódigo.
Código de ProgramaçãoPode ser interpretado diretamente pelo computador. Permite uma representação precisa e detalhada do algoritmo.Requer conhecimento de uma linguagem de programação específica. Pode ser difícil de entender para pessoas que não estão familiarizadas com a linguagem.
Código de MáquinaPode ser interpretado diretamente pelo computador. Permite uma representação precisa e detalhada do algoritmo.Difícil de entender para humanos. Requer conhecimento avançado de arquitetura de computadores.