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:
- Abstrair e modelar o problema
- Propor uma solução algorítmica
- 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 😏
Crie um jogo onde o jogador tente advinhar um número entre 1 e 31. Este jogo terá dois modos:
Nesta versão, o jogador tem apenas uma chance.
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.
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.
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:
O jogador e o computador escolhem apenas uma opção. Os resultados possíveis são vitória, empate ou derrota.
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.
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:
Receber uma nota e identificar a qual intervalo ela pertence.
Receber 30 notas de uma turma e calcular a frequência de notas em cada intervalo.
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.
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 ✅
No modo fácil, um jogador inteligente nunca perderá. Essa estratégia é o algoritmo conhecido como busca binária 😎
Uma forma inteligente de resolver este problema garante que cada cor será testada apenas uma vez. Pesquise sobre testes aninhados.
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 😏
Este problema explora o uso do senão se e da contagem manual de iterações.
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 😏
Este problema explora o uso do senão se e de expressões lógicas compostas.
Uma forma inteligente de resolver este problema dispensa o uso de testes. Pesquise sobre listas, divisão inteira e normalização 😏
Testar se não há sobreposição é mais fácil que testar se há sobreposição.
Dependendo da lógica usada, é possível usar a mesma solução para testar vários retângulos ao mesmo tempo.