Exercícios: Laços
Para cada exercício abaixo crie um repositório no GitHub contendo uma aplicação console com o nome indicado.
Revisão e Correção no YouTube (parte 1 e parte 2) e no GitHub.
Temporada 1
Enunciado | Correção | Extras |
---|---|---|
SequenciaCentena | YouTube • GitHub | |
SequenciaPares | YouTube • GitHub | |
SequenciaLimites | YouTube • GitHub | |
Tabuada | YouTube • GitHub | |
MediaDecimal | YouTube • GitHub | Prof. Neri |
Patinhos | YouTube • GitHub | Prof. Neri |
Elefante | YouTube • GitHub | |
RetPreenchido | YouTube • GitHub | |
RetContorno | YouTube • GitHub | |
ASCIITable | YouTube • GitHub | |
Fatorial | YouTube • GitHub | |
EstimaPi | YouTube • GitHub | |
EstimaEuler | YouTube • GitHub | |
Fibonacci | YouTube • GitHub | |
MDC | YouTube • GitHub | |
SomaDigitos | YouTube • GitHub |
Temporada 2
Atenção: Caso o exercício possua um desafio, faça-o somente após concluir o exercício principal. Caso seja um exercício marcado para entrega no curso presencial, não é necessário cumprir os desafios.
Exercício SequenciaCentena
Exiba os 100 primeiros números naturais não nulos.
Ex.:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Exercício SequenciaPares
Receba um número inteiro positivo. Exiba todos os números pares entre zero e o número digitado (inclusive).
Ex.:
Números pares entre 0 e ? 15
0 2 4 6 8 10 12 14
Exercício SequenciaLimites
Receba 2 números inteiros. Se o segundo for menor que o primeiro, exibir uma mensagem de erro. Caso contrário, exibir todos os números inteiros entre eles (inclusive).
Ex.:
Início: -3
Fim: 7
-3 -2 -1 0 1 2 3 4 5 6 7
Exercício Tabuada
Receba um número. Exiba sua tabuada.
Ex.:
Tabuada do número: 7
7 x 0 = 0
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
Exercício MediaDecimal
Receba a quantidade de números a serem digitados. Receba a quantidade indicada de números decimais. Exiba a soma e a média entre os valores digitados. Exiba também o maior e o menor número digitado.
Ex.:
Quantos números: 4
Número #01: 2,6
Número #02: 8,5
Número #03: 9,47
Número #04: 0,37
Soma...: 20,94
Média..: 5,24
Maior..: 9,47
Menor..: 0,37
Exercício Patinhos
Exiba a letra da música “Cinco Patinhos” (versão brasileira gravada pela Xuxa de “Five little ducks” - The Wiggles). Seu programa deve perguntar quantos patinhos o usuário deseja (pelo menos 2).
A canção começa assim:
(N) patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: Quá, quá, quá, quá
Mas só (N-1) patinhos voltaram de lá.
Esse bloco se repete até nenhum patinho voltar. Ao final, todos os patinhos voltam:
A mamãe patinha foi procurar
Além das montanhas
Na beira do mar
A mamãe gritou: Quá, quá, quá, quá
E os (N) patinhos voltaram de lá.
Ex.:
Quantos patinhos? 3
3 patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: Quá, quá, quá, quá
Mas só 2 patinhos voltaram de lá.
2 patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: Quá, quá, quá, quá
Mas só 1 patinho voltou de lá.
1 patinho foi passear
Além das montanhas
Para brincar
A mamãe gritou: Quá, quá, quá, quá
Mas nenhum patinho voltou de lá.
A mamãe patinha foi procurar
Além das montanhas
Na beira do mar
A mamãe gritou: Quá, quá, quá, quá
E os 3 patinhos voltaram de lá.
Exercício Elefante
Exiba a letra da música infantil “Um Elefante Incomoda Muita Gente”. Comece com 1 elefante e termine na quantidade digitada pelo usuário (um número par maior que 2).
1 elefante incomoda muita gente
2 elefantes incomodam incomodam muito mais
3 elefantes incomodam muita gente
4 elefantes incomodam incomodam incomodam incomodam muito mais
Ex.:
Quantos elefantes: 6
1 elefante incomoda muita gente
2 elefantes incomodam incomodam muito mais
3 elefantes incomodam muita gente
4 elefantes incomodam incomodam incomodam incomodam muito mais
5 elefantes incomodam muita gente
6 elefantes incomodam incomodam incomodam incomodam incomodam incomodam muito mais
Exercício RetPreenchido
Exiba um retângulo preenchido, com altura e largura digitados pelo usuário (entre 1 e 10).
Ex.:
Tamanho do retângulo:
Largura..: 10
Altura...: 4
**********
**********
**********
**********
Exercício RetContorno
Exiba o contorno de um retângulo, com altura e largura digitados pelo usuário (entre 1 e 10).
Ex.:
Tamanho do retângulo:
Largura..: 10
Altura...: 6
**********
* *
* *
* *
* *
**********
Exercício ASCIITable
Exiba os caracteres imprimíveis da tabela ASCII (com código ASCII entre 32 e 126).
Ex.:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Desafio: exiba conforme o exemplo:
Tabela ASCII - Caracteres Imprimíveis
Dec Char Oct Hex | Dec Char Oct Hex | Dec Char Oct Hex |
--- ---- --- --- | --- ---- --- --- | --- ---- --- --- |
32 40 20 | 33 ! 41 21 | 34 " 42 22 |
35 # 43 23 | 36 $ 44 24 | 37 % 45 25 |
38 & 46 26 | 39 ' 47 27 | 40 ( 50 28 |
41 ) 51 29 | 42 * 52 2a | 43 + 53 2b |
44 , 54 2c | 45 - 55 2d | 46 . 56 2e |
47 / 57 2f | 48 0 60 30 | 49 1 61 31 |
50 2 62 32 | 51 3 63 33 | 52 4 64 34 |
53 5 65 35 | 54 6 66 36 | 55 7 67 37 |
56 8 70 38 | 57 9 71 39 | 58 : 72 3a |
59 ; 73 3b | 60 < 74 3c | 61 = 75 3d |
62 > 76 3e | 63 ? 77 3f | 64 @ 100 40 |
65 A 101 41 | 66 B 102 42 | 67 C 103 43 |
68 D 104 44 | 69 E 105 45 | 70 F 106 46 |
71 G 107 47 | 72 H 110 48 | 73 I 111 49 |
74 J 112 4a | 75 K 113 4b | 76 L 114 4c |
77 M 115 4d | 78 N 116 4e | 79 O 117 4f |
80 P 120 50 | 81 Q 121 51 | 82 R 122 52 |
83 S 123 53 | 84 T 124 54 | 85 U 125 55 |
86 V 126 56 | 87 W 127 57 | 88 X 130 58 |
89 Y 131 59 | 90 Z 132 5a | 91 [ 133 5b |
92 \ 134 5c | 93 ] 135 5d | 94 ^ 136 5e |
95 _ 137 5f | 96 ` 140 60 | 97 a 141 61 |
98 b 142 62 | 99 c 143 63 | 100 d 144 64 |
101 e 145 65 | 102 f 146 66 | 103 g 147 67 |
104 h 150 68 | 105 i 151 69 | 106 j 152 6a |
107 k 153 6b | 108 l 154 6c | 109 m 155 6d |
110 n 156 6e | 111 o 157 6f | 112 p 160 70 |
113 q 161 71 | 114 r 162 72 | 115 s 163 73 |
116 t 164 74 | 117 u 165 75 | 118 v 166 76 |
119 w 167 77 | 120 x 170 78 | 121 y 171 79 |
122 z 172 7a | 123 { 173 7b | 124 | 174 7c |
125 } 175 7d | 126 ~ 176 7e |
Exercício Fatorial
Receba um número inteiro positivo. Exiba o seu fatorial.
O fatorial de um número é dado pelo produto entre o número e seus antecessores naturais positivos:
Além disso, há um caso especial:
Ex.:
Número: 5
5! = 120
Obs.: O método iterativo para cálculo de fatorial é altamente ineficiente. Outros algoritmos conhecidos são mais eficientes.
Exercício EstimaPi
Estime o valor de π utilizando o método de Leibniz:
Ex.:
-- Estimador do valor de pi pelo método de Leibniz --
Quantas iterações? 1000000
Estimativa: 3,141594
Desafio: Fixar o número de casas decimais de precisão da estimativa. Dica: verifique o erro entre a estimativa atual e a anterior de forma que a diferença esteja em dígitos menores que a precisão desejada.
Ex.:
-- Estimador do valor de pi pelo método de Leibniz --
Quantas casas de precisão (<=10)? 7
Estimativa após 199999997 iterações: 3,1415926486
Desafio 2: Utilizar outros métodos mais eficientes.
Exercício EstimaEuler
Estime o valor de e (número de Euler), com o número de iterações indicado pelo usuário.
Ex.:
-- Estimador de Euler --
Quantas iterações (<=33)? 33
Estimativa: 2,7182818320
Exercício Fibonacci
Receba um número inteiro N
. Exiba os N
primeiros números da sequência de Fibonacci.
Nesta sequência, os dois primeiros números são 0 e 1. Os próximos números são a soma dos dois números anteriores.
0
1
0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8
...
Ex.:
Sequência de Fibonacci
Quantos termos (>=2)? 21
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
Exercício MDC
Calcule o máximo divisor comum entre dois números utilizando o Algoritmo de Euclides (iterativo).
Método: Dados os números a
e b
, efetue a divisão e pegue o resto. Se o resto for zero, a
é o mdc. Senão, b
é o novo a
, e o resto é o novo b
. Repita o processo até que o resto seja zero.
Veja um exemplo de cálculo: https://pt.wikipedia.org/wiki/Algoritmo_de_Euclides#Exemplo
Ex.:
Máximo Divisor Comum (método iterativo)
Digite o 1º número (a): 348
Digite o 2º número (b): 156
MDC(a, b) = 12
Exercício SomaDigitos
Calcule a soma dos dígitos de um número inteiro positivo informado.
Ex.:
Digite um número inteiro positivo: 5410587
Dígitos: 7 8 5 0 1 4 5
Soma = 30
Dicas:
- O resto da divisão de um número por 10 retorna a quantidade de unidades. Ex:
483 % 10 == 3
. - A divisão inteira de um número por 10 tem o “efeito colateral” de excluir o último dígito. Ex:
483 / 10 == 48
.
Exercício UmDoisTresPim
O apresentador de auditório Silvio Santos em seus programas de domingo à tarde oferecia dinheiro para quem conseguisse citar os números inteiros entre 1 e 40 (inclusive) substituindo os múltiplos de 4 pela palavra pim.
Faça um programa que exiba a sequência correta.
Exemplo:
1 2 3 pim
5 6 7 pim
9 10 11 pim
...
33 34 35 pim
37 38 39 pim
Exercício EntradaValida
Solicite que o usuário entre com um valor inteiro entre 1
e 9
(inclusive). Informe que a entrada 0
sinaliza um cancelamento. Não finalize o programa enquanto não houver uma entrada válida ou um cancelamento.
Exemplos:
--- Entrada Válida ---
Digite um número entre 1 e 9 (ou 0 para cancelar)...: -5
Digite um número entre 1 e 9 (ou 0 para cancelar)...: 12
Digite um número entre 1 e 9 (ou 0 para cancelar)...: 10
Digite um número entre 1 e 9 (ou 0 para cancelar)...: 0
Operação cancelada.
Volte sempre!
--- Entrada Válida ---
Digite um número entre 1 e 9 (ou 0 para cancelar)...: 2
Número selecionado = 2
Volte sempre!
Exercício Potencia
Receba dois números inteiros positivos, base e expoente. Calcule e exiba o valor do primeiro número elevado ao segundo número. Não utilize Math.Pow
.
Lembre-se que, por definição, se o expoente for zero a potência será 1.
_Quando em uma iteração a potência se tornar zero ou negativa, foi estourado o limite do tipo inteiro e não será possível realizar a operação. _
Exercício QuatroOperacoes
Implemente uma calculadora com as quatro operações aritméticas básicas (soma, subtração, multiplicação e divisão).
O programa deverá conter um menu de opções selecionáveis pelo usuário, incluindo as quatro operações e uma opção para o usuário sair do programa.
Exercício EmailCorporativo
Peça que o usuário digite um nome completo. Sugira um e-mail corporativo para a instituição fictícia Projeto XYZ (@projeto.xyz).
Use as iniciais do nome indicado e o último sobrenome. Ignore palavras com três caracteres ou menos.
Exemplo:
--- E-mail Corporativo / Projeto XYZ ---
Digite o nome completo: Maria Aparecida dos Santos Gonzaga
Sugestão de e-mail corporativo: masgonzaga@projeto.xyz
Exercício TamanhoIntervalo
Pergunte quantos números o usuário deseja digitar. Receba a quantidade indicada de números inteiros. Exiba o tamanho do intervalo formado entre o maior número e o menor número digitados.
Exemplo:
--- Tamanho do Intervalo ---
Quantos números? 6
Digite o 1º número: 12
Digite o 2º número: 5
Digite o 3º número: 1
Digite o 4º número: 5
Digite o 5º número: -2
Digite o 6º número: 12
O tamanho do intervalo entre -2 e 12 é 14.
Exercício EuSouGroot
Groot é uma personagem árvore humanóide criada por Stan Lee, Jack Kirby e Dick Ayers em 1960 para histórias em quadrinhos da Marvel Comics.
Escreva um chatbot em que Groot responda perguntas digitadas pelo usuário.
Finalize quando o usuário disser Tchau.
Exemplo:
--- Groot Chatbot ---
Pergunta: Qual seu nome?
Resposta: Eu sou Groot.
Pergunta: Qual sua cor preferida?
Resposta: Eu sou Groot.
Pergunta: Que dia é hoje?
Resposta: Eu sou Groot.
Pergunta: Tchau
Resposta: Eu sou Groot!
Exercício AmortizacaoConstante
Simule um financiamento utilizando o sistema de amortização constante (Tabela SAC). Nessa modalidade, é pago um valor fixo a cada mês, acrescidos os juros sobre o saldo devedor anterior. Na prática, a prestação é menor a cada período.
Receba o valor total do financiamento (Principal
), a quantidade de meses (Períodos
) e a taxa de juros (Taxa
). Exiba uma tabela com período, amortização, juros, prestação, valor pago e saldo devedor.
Valor constante em todos os períodos:
Amortização
=Principal
/Períodos
Valores variáveis por período:
Juros
= (SaldoDevedor
do período anterior) *Taxa
Prestação
=Amortização
+Juros
ValorPago
= Soma dos valores de todas as prestações anterioresSaldoDevedor
= (SaldoDevedor
do período anterior) -Amortização
Exemplo:
--- Tabela SAC ---
Principal (em R$)..: 1000,00
Períodos...........: 4
Taxa (em %)........: 5
Período | Amortização | Juros | Prestação | Valor Pago | Saldo Devedor |
---|---|---|---|---|---|
0 | R$ 1.000,00 | ||||
1 | R$ 250,00 | R$ 50,00 | R$ 300,00 | R$ 300,00 | R$ 750,00 |
2 | R$ 250,00 | R$ 37,50 | R$ 287,50 | R$ 587,50 | R$ 500,00 |
3 | R$ 250,00 | R$ 25,00 | R$ 275,00 | R$ 862,50 | R$ 250,00 |
4 | R$ 250,00 | R$ 12,50 | R$ 262,50 | R$ 1.125,00 | R$ 0,00 |
Você pode simular valores para teste aqui.
Exercício AmortizacaoFrancesa
Simule um financiamento utilizando o sistema de amortização francês (Tabela PRICE). Nessa modalidade, é paga uma prestação fixa a cada mês. Os juros são rateados a cada período de forma que o valor da prestação se mantenha sempre igual.
Receba o valor total do financiamento (Principal
), a quantidade de meses (Períodos
) e a taxa de juros (Taxa
). Exiba uma tabela com período, prestação, juros, amortização, valor pago e saldo devedor.
Valor constante em todos os períodos:
Prestação
=Principal
x [(1 +Taxa
)Períodos
xTaxa
] / [(1 +Taxa
)Períodos
- 1]
Valores variáveis por período:
Juros
= (SaldoDevedor
do período anterior) *Taxa
Amortização
=Prestação
-Juros
ValorPago
= Soma dos valores de todas as prestações anterioresSaldoDevedor
= (SaldoDevedor
do período anterior) -Amortização
Exemplo:
--- Tabela PRICE ---
Principal (em R$)..: 1000,00
Períodos...........: 4
Taxa (em %)........: 5
Período | Amortização | Juros | Prestação | Valor Pago | Saldo Devedor |
---|---|---|---|---|---|
0 | R$ 1.000,00 | ||||
1 | R$ 232,01 | R$ 50,00 | R$ 282,01 | R$ 282,01 | R$ 767,99 |
2 | R$ 243,61 | R$ 38,40 | R$ 282,01 | R$ 564,02 | R$ 524,38 |
3 | R$ 255,79 | R$ 26,22 | R$ 282,01 | R$ 846,04 | R$ 268,58 |
4 | R$ 268,58 | R$ 13,43 | R$ 282,01 | R$ 1.128,05 | R$ 0,00 |
Você pode simular valores para teste aqui.
Exercício AnelDeCoracao
Na DLC The Delicious Last Course (2022) do premiado game Cuphead (Studio MDHR), o item Anel de Coração concede benefícios ao seu portador na primeira, terceira e sexta ocorrências de um evento.
A ideia é que a obtenção de cada novo benefício se torne mais difícil do que a anterior, aumentando em 1 a quantidade necessária de ocorrências do evento em relação ao benefício anterior.
Benefícios recebidos
+ “dificuldade” = Eventos a aguardar
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
Faça um programa que exiba os 10 primeiros elementos dessa sequência.
Exemplo:
1 3 6 10 15 21 28 36 45 55
Exercício QuenteFrio
Implemente um jogo de adivinha. No jogo o computador sorteará um número entre 1 e 100 para ser o número secreto que o jogador deverá adivinhar. O jogador dará palpites até que acerte o número secreto e ganhe o jogo, ou erre 7 vezes e perca o jogo.
A cada palpite errado dê uma dica:
- está quente caso tenha errado por 10 ou menos;
- está pelando caso tenha errado por três ou menos;
- está congelando caso tenha errado por 30 ou mais.
- está frio nos demais casos.
Nos palpites congelando e frio indique se o número secreto é maior ou menor do que o palpite.
Exercício EspertoContraSabido
Em um genial episódio¹ da animação Pica-Pau (Woody Woodpecker) a personagem Raposinha (Fink Fox) divide uma certa quantidade de comida “igualmente” com o protagonista.
1 para você. 1 para mim.
2 para você. 1, 2 para mim.
3 para você. 1, 2, 3 para mim.
...
Seguindo a lógica da Raposinha, faça um programa que receba a quantidade inicial de comida e exiba o passo-a-passo da contagem. Ao final, exiba a quantidade de itens entregues à Raposinha e ao Pica-Pau.
Exemplo:
--- Esperto Contra Sabido ---
Quantos alimentos serão distribuídos? 22
1 para você. 1 para mim.
2 para você. 1, 2 para mim.
3 para você. 1, 2, 3 para mim.
4 para você. 1, 2, 3, 4 para mim.
5 para você. 1, 2, 3, 4, 5 para mim.
6 para você. 1 para mim.
Pica-pau recebeu 6 alimento(s).
Raposinha recebeu 16 alimento(s).
¹ Walter Lantz, 1964. Pica-Pau: Esperto Contra Sabido (Dumb Like a Fox). Episódio 133. Universal. (Esquete, episódio completo).
Exercício TrintaESeis
Implemente uma versão modificada do jogo de dados 36
para um jogador contra a CPU.
Primeiro sorteia-se o jogador inicial. Os jogadores alternam suas rodadas. Em sua rodada o jogador pode rolar 1, 2 ou 3 dados. Ao rolar, o valor da soma dos dados é somado ao placar do jogador. Se ele atingir 36, vence. Se ele passar de 36, perde o jogo.
Uma possível IA para a CPU: A CPU joga 3 dados se tiver 0-20 pontos, 2 dados se tiver 21-27 pontos, e 1 dado caso 28-35 pontos.
Exemplo:
--- 36 vs. CPU ---
Sorteando o jogador inicial... CPU.
--- CPU ---
Pontos = 0
Dados: 3
1 6 4
Pontos = 11
--- HUMANO ---
Pontos = 0
Dados: 3
6 6 3
Pontos = 15
--- CPU ---
Pontos = 11
Dados: 3
5 5 2
Pontos = 23
--- HUMANO ---
Pontos = 15
Dados: 3
1 2 1
Pontos = 19
--- CPU ---
Pontos = 23
Dados: 3
6 1 3
Pontos = 33
--- HUMANO ---
Pontos = 15
Dados: 1
6
Pontos = 25
--- CPU ---
Pontos = 33
Dados: 1
4
Pontos = 37
HUMANO VENCEU!
Exercício Ursos
Faça um programa para análise de dados coletados de ursos selvagens.
Para cada urso, receba o peso (kg) e o sexo (M/F). Finalize a coleta ao receber um peso zero, negativo ou acima de 250kg.
Para cada sexo, classifique os ursos em 5 categorias de peso:
Categoria | Intervalo |
---|---|
Muito Leve | ]0, 50] |
Leve | ]50, 100] |
Médio | ]100, 150] |
Pesado | ]150, 200] |
Muito Pesado | ]200, 250] |
Exiba:
- o sexo e o peso do urso mais pesado;
- a média de peso por sexo;
- uma tabela de distribuição de frequência;
- histogramas para ambos os sexos.
Exemplo de tabela de distribuição de frequências:
Categoria | Ursos | Ursos (%) | Machos | Machos (%) | Fêmeas | Fêmeas (%) |
---|---|---|---|---|---|---|
ML | 1 | 10% | 0 | 0% | 1 | 20% |
L | 2 | 20% | 1 | 20% | 1 | 20% |
M | 3 | 30% | 1 | 20% | 2 | 40% |
P | 3 | 30% | 2 | 40% | 1 | 20% |
MP | 1 | 20% | 1 | 20% | 0 | 0% |
Total | 10 | 100% | 5 | 50% | 5 | 50% |
Exemplo de histogramas:
----- Ursos Machos -----
+...10...20...30...40...50...60...70...80...90..100
ML |
L |**********
M |**********
P |********************
MP |**********
----- Ursos Fêmeas -----
+...10...20...30...40...50...60...70...80...90..100
ML |**********
L |**********
M |********************
P |**********
MP |
----- Ursos (todos) -----
+...10...20...30...40...50...60...70...80...90..100
ML |*****
L |**********
M |***************
P |***************
MP |**********
Exercício BarraDeProgresso
Faça um programa que exiba uma barra de progresso para uma cópia de arquivo simulada, onde a quantidade de bytes copiados e o tempo gasto serão gerados aleatoriamente.
Receba o tamanho do arquivo em bytes.
Em um loop, gere a quantidade de bytes a ser copiada na iteração (algo entre 2% e 10% do tamanho total). Aguarde um tempo aleatório (entre 100ms e dois segundos) e considere a iteração finalizada, atualizando a barra de progresso. Continue fazendo novas iterações até que 100% do arquivo seja copiado.
Ao final, exiba o tempo gasto (soma dos tempos de espera simulados) e a taxa de transmissão em bytes por segundo.
Exemplo:
--- Cópia de Arquivo ---
Tamanho (em bytes)...: 1000000
...10...20...30...40...50...60...70...80...90..100
***********
(alguns segundos depois…)
--- Cópia de Arquivo ---
Tamanho (em bytes)...: 1000000
...10...20...30...40...50...60...70...80...90..100
*********************************
(alguns segundos depois…)
--- Cópia de Arquivo ---
Tamanho (em bytes)...: 1000000
...10...20...30...40...50...60...70...80...90..100
**************************************************
Taxa = 50.000,00bps
Tempo = 20s
Exercício NPC
Implemente a inteligência artificial de um NPC (Non-player character - Personagem não-jogador) para um jogo com combate.
Neste jogo um NPC pode estar em 4 estados diferentes:
Estado | Descrição |
---|---|
Procurando |
Se recupera de seus ferimentos e procura por inimigos |
Atacando |
Entra em combate aberto contra o inimigo |
Fugindo |
Desiste do combate e foge pela sobrevivência |
Morto |
Não sobreviveu ao combate e deve ser retirado do jogo |
O estado atual do NPC depende de 3 indicadores:
InimigoProximo
:True
se há um inimigo a vista do NPC;Ferido
:True
se o NPC está ferido gravemente.Eliminado
:True
se o NPC foi eliminado do jogo.
A máquina de estados abaixo indica as transições possíveis entre os estados.
Condições para transição:
De | Para | Condição |
---|---|---|
Procurando |
Procurando |
!Eliminado e (Ferido ou !InimigoProximo ) |
Procurando |
Atacando |
!Eliminado e !Ferido e InimigoProximo |
Atacando |
Atacando |
!Eliminado e !Ferido e InimigoProximo |
Atacando |
Procurando |
!Eliminado e !InimigoProximo |
Atacando |
Fugindo |
!Eliminado e Ferido |
Atacando |
Morto |
Eliminado |
Fugindo |
Fugindo |
!Eliminado e Ferido |
Fugindo |
Procurando |
!Eliminado e !Ferido |
Fugindo |
Morto |
Eliminado |
A cada transição, simule os acontecimentos:
Procurando
:- 50% de chances de curar-se (
Ferido = False
). - 50% de chances de encontrar o inimigo (
InimigoProximo = True
).
- 50% de chances de curar-se (
Atacando
:- 50% de chances se ferir (
Ferido = True
), e então 50% de chances de morrer com o ferimento (Eliminado = True
). - 50% de chances matar o inimigo ou o inimigo fugir (
InimigoProximo = False
).
- 50% de chances se ferir (
Fugindo
:- 25% de chances de morrer com o ferimento (
Eliminado = True
). - 25% de chances de curar-se (
Ferido = False
). - 50% de chances do inimigo desistir (
InimigoProximo = False
).
- 25% de chances de morrer com o ferimento (
Morto
:- Finalizar a simulação.
Simule transições partindo de Procurando
até que o NPC morra. Exiba a quantidade de transições pelas quais o NPC sobreviveu.
Exemplo:
--- Simulação de IA de NPC ---
-- # 1 Procurando: Ferido = N, InimigoProximo = S, Eliminado = N => Atacando
-- # 2 Atacando: Ferido = N, InimigoProximo = S, Eliminado = N => Atacando
-- # 3 Atacando: Ferido = N, InimigoProximo = S, Eliminado = N => Atacando
-- # 4 Atacando: Ferido = N, InimigoProximo = S, Eliminado = N => Atacando
-- # 5 Atacando: Ferido = S, InimigoProximo = N, Eliminado = S => Morto
O NPC sobreviveu por 4 transições.
Exercício UrnaPlebiscito
Faça uma urna eletrônica para um plebiscito organizado pelo grêmio estudantil de uma escola fictícia.
A pergunta a ser realizada é: Você é a favor da proibição do uso de boné em sala de aula?
As alternativas possíveis são:
S
- Sim, sou a favorN
- Não, sou contraA
- Me abstenho de responder
Mantenha o registro da quantidade de votos em cada alternativa.
Garanta que um eleitor não possa ver o voto do eleitor anterior.
Antes de cada voto, o mesário deverá liberar o voto para o eleitor. Peça que o mesário indique a ação subsequente. Aceite as seguintes opções (sem mostrar as opções na tela):
P
- Liberar votação do próximo eleitors234f$WR
- Código secreto para fechar a urna (finalizar votação)
Ao finalizar, exibir a contagem de votos em cada opção, o percentual de votos válidos (abstenção não conta como válido) e o resultado final:
- Deve haver maioria simples de votos válidos (o total de
SIM
+NÃO
deve ser maior do que a metade do total de votos). Caso não haja, o resultado éINDETERMINADO
. - O plebiscito então é
APROVADO
se possuir mais aprovações do que desaprovações. Caso contrário éREPROVADO
.
Exemplo:
(limpa a tela)
--- Urna Eletrônica ---
Plebiscito: Você é a favor da proibição do uso de boné em sala de aula?
Aguarde a intervenção do mesário... _
Mesário digita P
:
(limpa a tela)
--- Urna Eletrônica ---
Plebiscito: Você é a favor da proibição do uso de boné em sala de aula?
S - Sim, sou a favor
N - Não, sou contra
A - Me abstenho de responder
Digite a opção desejada e pressione [ENTER]: S
Você votou "Sim, sou a favor"
Pressione uma tecla para finalizar sua votação... _
(limpa a tela)
--- Urna Eletrônica ---
Aguarde a intervenção do mesário... _
Mesário digita s234f$WR
:
(limpa a tela)
--- Urna Eletrônica ---
Plebiscito: Você é a favor da proibição do uso de boné em sala de aula?
Finalizado com o total de 1 voto(s).
Contagem de votos:
S - Sim, sou a favor - 1 (100,0%)
N - Não, sou contra - 0 (0,0%)
A - Me abstenho de responder - 0 (0,0%)
Votos válidos: 1 (100,0%)
Resultado do plebiscito: APROVADO
🏁 Orientações para entrega (alunos do curso presencial)
Confira no Teams o link da tarefa equivalente. Lá você postará o link dos repositórios que você criou, um para cada exercício.
Repositório de exemplo:
Exercício EtecAB
(Saída em console)
Exemplo de link a ser postado: https://github.com/ermogenes/EtecAB