Algoritmo é uma matéria fundamental que ensina a pensar como um programador.
Um algoritmo é uma sequência de passos para se alcançar um objetivo. É um conceito fácil, porque mesmo sem notar lidamos com algoritmos desde os primeiros anos de vida.
Por exemplo, no ensino fundamental aprendemos um algoritmo conhecido como Long Multiplication (Código 1) para multiplicar números com mais de uma casa decimal.
500
x 10
------
000 (500 x 0)
+ 500 (500 x 1)
------
5000
Utilizando long multiplication precisamos multiplicar o multiplicando (500) por cada multiplicador (0 e 1), deslocando cada resultado apropriadamente para depois somar cada um deles.
Algoritmos na computação
Nessa matéria, o nosso trabalho será aprender como identificar quais são os passos que compõem um algoritmo e se ele resolve o problema proposto da melhor forma.
Algoritmo e programa são coisas diferentes. Enquanto um algoritmo descreve uma sequência de passos e pode ser escrito de diferentes formas, tais como com uma narrativa textual, fluxogramas ou pseudocódigo, um programa é a implementação desses passos em uma linguagem de programação. Por isso a matéria de algoritmos é menos sobre programação e mais sobre aprender como pensar como um programador.
As ferramentas fundamentais para a criação de um algoritmo são variáveis, expressões e instruções.
Variável
Uma variável armazena um ou mais valores. Além disso, elas possuem um nome e um tipo. Usamos o nome de uma variável para definir e acessar o seu valor.
O tipo de uma variável informa quais valores ela pode armazenar e o quanto da memória do computador deverá ser reservado para ela.
Por exemplo, vamos declarar uma variável para armazenar a nota de um aluno. Nesse contexto chamamos “nota de um aluno” de dado, que pode conter valores como 0, 2, 7.5, 8.9, por exemplo. Dessa forma, o nome da variável pode ser “nota” e o seu tipo é Real, pois seus valores estão dentro do conjunto dos números reais.
Em pseudocódigo declaramos uma variável da seguinte forma:
Var nota: Real
Na Linha 1 usamos a palavra-chave Var para indicar que esse se trata do bloco de declaração de variáveis do algoritmo. Nessa matéria vamos sempre começar um algoritmo com esse bloco.
Após, nessa mesma linha declaramos a primeira variável chamada nota do tipo Real. Uma variável do tipo Real pode armazenar números inteiros e reais, tais como 0, 2, 7.5, 8.9.
No Código 2 temos outros exemplos de declaração de variáveis de outros tipos.
Var apartamento: Inteiro
preco: Real
nome: Literal[20]
ativo: Logico
Uma variável do tipo Inteiro pode armazenar somente números inteiros.
Uma variável do tipo Real pode armazenar números reais, incluindo os números inteiros, pois fazem parte desse conjunto.
Uma variável do tipo Literal pode armazenar um texto, como “Olá, mundo”, “Informe o seu nome: ”, entre outros. O número entre colchetes determina o número máximo de caracteres que o texto pode conter.
Uma variável do tipo Logico pode armazenar os valores VERDADEIRO, verdadeiro, ou FALSO, Falso. Veremos a utilidade desse tipo em um outro momento.
Expressões
Expressões produzem novos valores a partir de uma ou mais variáveis. Elas são construídas com operadores, tais como +, -, *, /, entre outros.
Por exemplo, nota_av + nota_avs é uma expressão que soma as variáveis nota_av e nota_avs. O valor produzido por essa expressão é um novo número.
As expressões se dividem em três conjuntos de acordo com o valor que os seus operadores produzem.
Expressões aritméticas
O primeiro conjunto é o das expressões aritméticas, que são aquelas que resultam em um número inteiro ou real. Nesse conjunto estão contidos os operadores aritméticos, como mostra a Tabela1.
Operador | Operação | Exemplo |
+ | Adição | 1 + 1, salario + bonus |
- | Subtração | 2 - 1, preco - desconto |
* | Multiplicação | 4 * 4, preco * juros |
/ | Divisão | 4 / 2, total / pagantes |
** | Exponenciação | 2 ** 2, m * c ** 2 (mc²) |
+ | Manutenção de sinal | + (-2) |
- | Inversão de sinal | - (-2) |
Uma expressão aritmética pode ser composta por um ou mais operadores aritméticos.
Expressões lógicas
As expressões lógicas resultam em um valor lógico como verdadeiro, simbolizado por VERDADEIRO, ou falso, simbolizado por FALSO.
Nesse primeiro contato com os operadores lógicos só o que precisamos aprender é que eles produzem valores lógicos e tudo a seguir vem apenas a título de conhecimento.
Fazem parte desse conjunto os operadores listados na Tabela 2.
Operador | Operação |
OU | Disjunção |
E | Conjunção |
NAO | Negação |
Dado que uma variável lógica pode armazenar apenas dois valores, VERDADEIRO e FALSO, os operadores lógicos realizam operações sobre esses valores considerando as quatro combinações possíveis entre eles. Cada operador retornará um valor dependendo da combinação utilizada.
Abaixo, na Tabela 3 vemos esses combinações e os valores que serão gerados ao aplicar cada um desses três operadores.
A | B | NAO A | NAO B | A OU B | A E B |
FALSO | FALSO | VERDADEIRO | VERDADEIRO | FALSO | FALSO |
FALSO | VERDADEIRO | VERDADEIRO | FALSO | VERDADEIRO | FALSO |
VERDADEIRO | FALSO | FALSO | VERDADEIRO | VERDADEIRO | FALSO |
VERDADEIRO | VERDADEIRO | FALSO | FALSO | VERDADEIRO | VERDADEIRO |
Esses operadores nos ajudam a expressão em pseudocódigo frases como “cliente ativo e com pagamento em dia”, “preco > 199.99 ou em promoção”, entre muitas outras para as quais a resposta deve ser verdadeira ou falsa.
Por exemplo, “cliente ativo e com pagamento em dia” pode ser escrito como:
cliente_ativo E pagamento_em_dia
Considerando que o valor de cliente_ativo seja VERDADEIRO e que o valor de pagamento_em_dia seja FALSO, no caso acima o valor produzido pela expressão será FALSO, uma vez que de acordo com a Tabela 3 a operação VERDADEIRO E FALSO e igual a FALSO.
Faz sentido aprender sobre isso, porque recebemos muitos pedidos para escrever códigos como esse durante nossa carreira e eles permitem ao programa ter inteligência, decidindo quando fazer algo ou não com base nos valores VERDADEIRO e FALSO.
Os operadores lógicos podem ser um assunto novo para a maioria das pessoas e eles têm a sua própria matéria, a lógica booleana. Por isso, não se preocupe se esse assunto parecer estranho num primeiro momento, porque voltaremos a falar dele mais tarde.
Instruções
As instruções são rotinas fundamentais que todo programa deve executar para conseguir gerenciar memória e se comunicar com o mundo exterior. Elas são três, atribuição de valor a uma variável, entrada e saída de dados.
Atribuição de valor
É com a instrução <- que uma variável passa a armazenar algum valor.
Por exemplo, no algoritmo do Código 3 declaramos três variáveis que recebem diferentes valores.
Algoritmo "Exemplo de atribuição de valor"
Var
cliente_ativo, pagamento_em_dia, resultado_da_expressao: Logico
Inicio
cliente_ativo <- VERDADEIRO
pagamento_em_dia <- FALSO
resultado_da_expressao <- cliente_ativo E pagamento_em_dia
Escreval(resultado_da_expressao)
FimAlgoritmo
Na Linha 6 a variável cliente_ativo recebe o valor VERDADEIRO.
Na Linha 7 a variável pagamento_em_dia recebe o valor FALSO.
Na Linha 8 a variável resultado_da_expressao recebe o valor resultante da expressão lógica cliente_ativo E pagamento_em_dia que nesse caso será FALSO, de acordo com a Tabela 3.
Aqui vemos pelo menos duas formas de atribuir valor a uma variável. Na primeira forma, Linhas 5 e 6, fazemos isso diretamente, utilizando os valores VERDADEIRO e FALSO. Na segunda forma, usamos uma expressão para gerar um novo valor a partir de duas variáveis o qual atribuímos a variável.
Saída de dados
Como vimos antes, as variáveis são um recurso poderoso para facilitar o gerenciamento da memória. Contudo, se o programa guarda todas as informações para si, ele tem pouca utilidade. As instruções de saída nos permitem compartilhar informações com o usuário, colocando-as em dispositivos de saída, tais como a tela do computador.
Há duas formas de escrever essa instrução:
Escreval(variavel1, variavel2)
Onde o valor das variáveis será impresso em linhas diferentes.
Escreval(“Olá, mundo!”)
Onde o texto Olá, mundo! é apenas um exemplo de literal que podemos escrever.
Por exemplo, escreva um algoritmo (Código 4) que calcule o valor total de uma venda considerando o preço unitário do produto e a quantidade comprada.
Algoritmo “Uso da instrução de saída Escreva”
Var preco_unidade, valor_total: Real
quantidade_comprada: Inteiro
Inicio
preco_unidade <- 2.99
quantidade_comprada <- 10
valor_total <- preco_unidade * quantidade_comprada
Escreval(valor_total)
FimAlgoritmo
No exemplo acima, usamos a instrução de saída Escreval na Linha 9 para apresentar para o usuário o valor da variável valor_total.
Entrada de dados
Perceba que até aqui atribuímos as variáveis valores literais, números ou textos inseridos diretamente no código, como 2.99 na Linha 6 do Código 4 ou 10 na Linha 5 do mesmo exemplo. Mas na maioria das vezes lidamos com valores desconhecidos, que devem ser informados por outra pessoa e não pelo programador.
Por exemplo, no problema do Código 4 uma outra solução possível seria criar um algoritmo que lesse do usuário os valores das variáveis preco_unidade e quantidade_comprada. Assim, o algoritmo passaria a poder ser utilizado para qualquer venda e se tornaria mais útil dessa forma.
A instrução de entrada de dados Leia é o que precisamos para que um valor seja fornecido pelo usuário. A sintaxe ou forma de escrever essa instrução é esta:
Leia([nome_da_variavel1], [nome_da_variavel2], [nome_da_variaveln])
Vamos reescrever o algoritmo no Código 4 adicionando essa instrução, conforme mostra o Código 5.
Algoritmo “Uso da instrução de entrada Leia”
Var preco_unidade, valor_total: Real
quantidade_comprada: Inteiro
Inicio
Leia(preco_unidade, quantidade_comprada)
valor_total <- preco_unidade * quantidade_comprada
Escreval(valor_total)
FimAlgoritmo
Agora, em lugar de lidar com valores literais no código estamos recebendo na Linha 6 um dado de um dispositivo de entrada, tal qual o teclado.
Como escrever um algoritmo
A descrição de um algoritmo passa por algumas etapas, que podemos resumir com as três perguntas abaixo:
- Qual problema
precisamos resolver?
A especificação do problema que será resolvido. Quanto mais precisa e detalhada melhor. - Como esse
problema pode ser resolvido?
Uma descrição do próprio algoritmo que demonstra como o problema será resolvido.
Existem outros passos, mas por hora trabalharemos com esses dois para manter as coisas simples de início.
Não importa se estamos controlando as luzes de um semáforo ou ajustando a órbita de um satélite, sempre podemos utilizar essas perguntas para organizar nosso trabalho.
Escrevendo algoritmos
Vamos praticar um pouco escrevendo algoritmos simples.
Exemplo 1
Qual problema precisamos resolver? Somar dois números e imprimir o resultado.
Como esse problema pode ser resolvido? Uma forma poderia ser esta do Código 6.
Algoritmo “Algoritmo para ler e somar dois números”
Var numero1, numero2, soma: Real
Início
Leia(numero1, numero2)
soma <- numero1 + numero2
Escreval(soma)
FimAlgoritmo
Na Linha 3 declaramos três variáveis chamadas numero1, numero2 e soma. As variáveis numero1 e numero2 armazenarão os valores que não conhecemos e que serão informados pelo usuário. Quanto a soma, será armazenado nela o resultado do cálculo entre numero1 e numero2.
Na Linha 6 usamos a instrução Leia para obter o valor do primeiro número, que armazenamos na variável numero1, e do segundo número, que armazenamos na variável numero2.
Na Linha 8 temos uma expressão, usada para somar os valores das variáveis numero1 e numero2. O resultado desse cálculo guardamos na variável soma.
Na Linha 10 usamos a instrução Escreval para imprimir o valor da variável soma na tela.
Exemplo 2
Qual problema precisamos resolver? Calcular a média entre dois números e imprimir o resultado.
Como esse problema pode ser resolvido? Esse problema é muito parecido com o anterior, portanto aqui também precisaremos de duas variáveis para os números que calcularemos e uma terceira para então podermos imprimir seu resultado na tela.
Vamos escrever o algoritmo conforme o Código 7.
Algoritmo “Algoritmo para calcular a média entre dois números”
Var numero1, numero2, media: Real
Inicio
numero1 <- 10.0
numero2 <- 5.0
media <- (numero1 + numero2) / 2
Escreval(media)
FimAlgoritmo
Na Linha 3 declaramos as variáveis numero1 e numero2 para armazenar o primeiro e o segundo número.
Na Linha 9 somamos o valor das duas variáveis numero1 e numero2 e depois dividimos esse resultado por 2 para calcular a média que armazenamos na variável media.
Nesse caso o valor impresso na Linha 11 deverá ser 7.5.
Exemplo 3
Agora vamos aumentar um pouco a dificuldade.
Qual problema precisamos resolver? Considerando que a velocidade de um humano adulto varia entre 5 e 6.5 km/h, calcule o tempo mínimo e máximo de uma caminhada considerando a distância que será percorrida em km.
Como esse problema pode ser resolvido? Vamos resolver esse problema um passo de cada vez.
Ele é de fácil resolução, porque podemos dividir a distância que será percorrida pelos valores 5 e 6.5 para encontrar os tempos mínimo e máximo de caminhada.
Para isso, primeiro vamos declarar variáveis para armazenar os valores conhecidos, 5 e 6.5
velocidade_media_minima <- 5
velocidade_media_máxima <- 6.5
Agora, devemos armazenar a distância percorrida em quilômetros. Vamos testar com um número qualquer.
distancia_em_quilometros <- 10
De posse desses valores podemos calcular o tempo mínimo e máximo multiplicando a distância que será percorrida pelas velocidades mínima e máxima de caminhada:
tempo_minimo_de_caminhada <- distancia_em_quilometros / velocidade_media_minima
tempo_maximo_de_caminhada <- distancia_em_quilometros / velocidade_media_maxima
Então, exibimos esses valores usando a função Escreval, assim como fizemos anteriormente:
Escreval(tempo_minimo_de_caminhada)
Escreval(tempo_maximo_de_caminhada)
Esse algoritmo funciona, resolvendo o problema proposto, por dois motivos principais:
- Seus comandos estão ordenados corretamente;
- O cálculo realizado está correto.
Outro ponto importante é o cálculo realizado pelo algoritmo. Essa é a inteligência por trás do código e o motivo pelo qual ele existe. Sendo assim, caso esse cálculo estivesse incorreto, o algoritmo apresentaria uma resposta incorreta.
Exemplo 4
Sempre que precisarmos armazenar valores usamos variáveis. Quanto mais complexo for um problema, de mais variáveis podemos precisar para resolvê-lo.
Qual problema precisamos resolver? Escreva um algoritmo que troca o valor de duas variáveis, a e b.
Como esse problema pode ser resolvido? O problema descreve duas variáveis, mas não fornece os seus valores, então vamos utilizar novamente Leia para pedir ao usuário que informe cada um deles.
O ponto mais importante aqui é a utilização da variável temporaria para resolver o problema, como mostra o Código 8.
Algoritmo "Troca o valor de duas variáveis"
Var numero1, numero2, temporaria: Real
Inicio
Leia(numero1, numero2)
temporaria <- numero1
numero1 <- numero2
numero2 <- temporaria
Escreval(numero1)
Escreval(numero2)
FimAlgoritmo
Vale apontar algo importante: toda vez que atribuímos um valor a uma variável o anterior atribuído a ela é perdido. Então, se tentarmos trocar os valores das variáveis dessa forma:
numero1 <- numero2
numero2 <- numero1
Quando a segunda instrução for executada, b = a, a já terá recebido o valor de b na linha anterior, o que fará com que a e b tenham o mesmo valor no final.
Portanto, precisamos de uma variável temporária para armazenar o valor de a, então atribuímos o valor de b a a e depois o valor da variável temporária a b.
Assim, esse algoritmo termina com a tendo o valor de b e b o valor de a.
Confira outros conteúdos:
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,00
Total: R$ 708,00
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 64,00 /mês
Total: R$ 768,00
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.