Skip to content

Latest commit

 

History

History
167 lines (96 loc) · 5.99 KB

01.md

File metadata and controls

167 lines (96 loc) · 5.99 KB

Algoritmos e programação estruturada

O foco dos problemas descritos abaixo está na capacidade de propor soluções baseadas em estruturas de decisão, servindo como uma introdução ao conceito de algoritmos e de programação estruturada.

Lembre-se das três etapas que devem ser seguidas para resolução de cada problema:

  1. Abstrair e modelar o problema
  2. Propor uma solução algorítmica
  3. Implementar e avaliar a solução proposta

Para desenvolver corretamente estas habilidades, utilizaremos o conceito de computação desplugada.

Isto significa que você deverá propor a solução sem o auxílio do computador, apenas com caneta e papel.

Só com a solução já proposta é que você deve implementá-la com blocos ou uma linguagem e testar sua solução 😏

Índice

  1. Jogo da adivinhação
  2. Adição de cores
  3. Jankenpon
  4. Histograma
  5. Choque de propagandas

Jogo da adivinhação

Crie um jogo onde o jogador tente advinhar um número entre 1 e 31. Este jogo terá dois modos:

Modo difícil

Nesta versão, o jogador tem apenas uma chance.

Modo fácil

Nesta versão, o jogador tem cinco chances.

A cada palpite errado, o jogo deverá informar se o número sorteado é menor ou maior do que o palpite informado.

Adição de cores

Apesar de haver um número infinito de cores, todas elas podem ser obtidas através de um processo de adição de três cores base:

  • R - red (vermelho, em inglês)
  • G - green (verde, em inglês)
  • B - blue (azul, em inglês)

Neste problema, vamos considerar de forma simplificada que existem apenas as possibilidades de usar uma determinada cor (representado pelo valor 1) ou não usar uma determinada cor (representado pelo valor 0).

Com essa modelagem, podemos obter 8 cores:

Vamos considerar que a cor formada pela adição é representada como uma tupla (R, G, B).

  • (0, 0, 0) Preto
  • (0, 0, 1) Azul
  • (0, 1, 0) Verde
  • (1, 0, 0) Vermelho
  • (0, 1, 1) Ciano
  • (1, 1, 0) Amarelo
  • (1, 0, 1) Magenta
  • (1, 1, 1) Branco

Crie um programa de adição de cores, que receba como entrada a presença ou ausência das cores vermelho, verde e azul (respectivamente) e informe a cor obtida.


Jankenpon

Em um jogo de jankenpon, cada jogador tem direito a três opções:

  • pedra, que quebra a tesoura
  • papel, que embrulha a pedra
  • tesoura, que corta o papel

Caso ambos os jogadores escolham a mesma opção, considera-se que houve um empate.

Crie um jogo de jankenpon onde o jogador deverá desafiar o computador. Este jogo poderá ser jogado em dois modos:

Rodada única

O jogador e o computador escolhem apenas uma opção. Os resultados possíveis são vitória, empate ou derrota.

Melhor de cinco

O vencedor será aquele que conseguir atingir primeiro vitórias em três rodadas.

Empates não devem ser levados em consideração na contabilização do número de rodadas.


Histograma

Um histograma é um gráfico que analisa a frequência de ocorrência de determinados valores em uma variável estatística.

Considere o exemplo de notas em uma turma e a divisão nos seguintes intervalos:

  • 0,0 a 2,5: incluindo 0,0 e excluindo 2,5
  • 2,5 a 5,0: incluindo 2,5 e excluindo 5,0
  • 5,0 a 7,5: incluindo 5,0 e excluindo 7,5
  • 7,5 a 10,0: incluindo 7,5 e 10,0

O histograma mostra quantas pessoas tiraram notas nos intervalos apresentados, sendo que esta frequência é geralmente ilustrada através de um gráfico de barras vertical.

Crie um módulo de um software para produção de histogramas. Seu módulo tem duas funcionalidades:

Funcionalidade 1

Receber uma nota e identificar a qual intervalo ela pertence.

Funcionalidade 2

Receber 30 notas de uma turma e calcular a frequência de notas em cada intervalo.

Choque de propagandas

O AdTube é um app de vídeos onde produtores ganham dinheiro permitindo que popups de propagandas sejam mostradas durante a exibição dos seus vídeos.

Para garantir a visibilidade das propagandas apresentadas, os desenvolvedores do AdTube precisam testar se um popup de propaganda não está aparecendo por cima de outro.

Por simplicidade, considere que:

  • há apenas dois popups sendo testados por vez
  • um popup é um retângulo, representado pelas coordenadas x e y do seu canto inferior esquerdo e do seu canto superior direito, respectivamente.

Insights

Se você ainda não resolveu os problemas acima, volte para esta seção mais tarde 👻

Os insights abaixo servem para enriquecer seu aprendizado com os problemas apresentados neste roteiro.

Alguns insights são dicas que te desafiam a resolver o problema novamente sob outra perspectiva ✅

Jogo da adivinhação

No modo fácil, um jogador inteligente nunca perderá. Essa estratégia é o algoritmo conhecido como busca binária 😎

Adição de cores [1]

Uma forma inteligente de resolver este problema garante que cada cor será testada apenas uma vez. Pesquise sobre testes aninhados.

Adição de cores [2]

Uma forma ainda mais inteligente de resolver este problema dispensa o uso de testes. Pesquise sobre listas e representação binária de números 😏

Jankenpon [1]

Este problema explora o uso do senão se e da contagem manual de iterações.

Jankenpon [2]

Uma forma inteligente de resolver este problema identifica a vitória de um jogador com um único teste. Pesquise sobre listas, divisão inteira e matemática discreta 😏

Histograma [1]

Este problema explora o uso do senão se e de expressões lógicas compostas.

Histograma [2]

Uma forma inteligente de resolver este problema dispensa o uso de testes. Pesquise sobre listas, divisão inteira e normalização 😏

Choque de propagandas [1]

Testar se não há sobreposição é mais fácil que testar se há sobreposição.

Choque de propagandas [2]

Dependendo da lógica usada, é possível usar a mesma solução para testar vários retângulos ao mesmo tempo.