Olá e bem-vindo.
Eu gostaria de fornecer uma demonstração solução para o nosso
desafio anterior, que era implementar um jogo de adivinhação e tipo de número.
Então, vamos trazer o código blocos,
feche meu projeto atual e crie um novo.
Este novo projeto que estou começando para chamar o jogo de adivinhação.
Vai ser um Aplicação de console.
Então, eu só vou chamá-lo de adivinhar o número.
E o que vou fazer em isso para iniciar este projeto vou declarar
minhas variáveis.
Eu sempre gosto de declarar e são minhas variáveis no topo.
Mas também vou usar o gerador de números aleatórios.
Então, eu quero ter certeza de que Eu tenho um casal inclui.
Stdlib já está lá por padrão.
Então, tudo que eu preciso fazer é adicionar meu Tempo. h porque, novamente, isso é para um gerador
de números aleatórios.
Isso é basicamente para o assento do gerador de número aleatório.
As outras variáveis que sou vou precisar neste programa é que
eu quero armazenar meus números aleatórios.
Então, vou apenas dizer número aleatório, vou inicializá-lo com 0
até que obtê-lo da biblioteca real.
Portanto, declare inicializar.
Vou criar uma variável para armazene a estimativa do usuário
e vou inicializá-la com 0.
Vou criar outra variável que será o número de
palpites, o número atual de suposições ou, na verdade,
devo dizer o número máximo de suposições, máximo número de suposições, e vou inicializar isso para 5
porque eles só podem adivinhar 5 vezes.
Eu também tenho que criar um tempo variável para que eu possa usá-lo para
meu gerador de números aleatórios.
Então, vou apenas dizer que é hora t t.
Primeira coisa que eu quero fazer antes de peça ao usuário a entrada se
desejo gerar o número aleatório.
Eu acho que poderia fazer isso depois de perguntar o usuário para entrada, mas é fácil fazer
a primeira coisa que você faz.
Vou inicializar meu gerador de números aleatórios, vou colocar um
pequeno comentário lá.
Certifique-se de usar um bom sentido nomes e certifique-se de recuar.
Vai usar essa função srand sobre o qual falei na palestra.
Você pode apenas passar em uma semente essencialmente.
Então, vou dizer não assinado, e estou vou apenas passar minha variável t.
Isso vai levar tempo é um função que obtém a hora atual.
Vou passar no t para que semeia e então eu vou acabar com isso.
Agora eu realmente preciso pegar meu gerador de número aleatório, então vou dizer
para obter o número aleatório.
E tudo isso vai fazer é atribuir uma variável ao que
é retornado da função rand.
Então, digamos um número aleatório que é minha variável local igual
a e usar o operador de atribuição dizer rand que está chamando uma função.
Você não precisa saber de nada disso, mas vou semear com 21.
Isso irá garantir que meu o número está apenas entre 0 e 20.
Agora vou apenas produzir um acoplar mensagens na tela para que o usuário saiba
o que está fazendo.
Vou fazer um aplicativo de impressão e vou vai dizer que este é um jogo de adivinhação.
E então eu também vou diga a eles
que escolhi um número entre 0 e 20 novamente, apenas para que eles sejam informados.
E então 0 e 20 que você deve adivinhe e termine com o avanço de linha.
Agora que eu disse a eles o que eu quero no jogo, vou realmente começar a
fazer um loop.
E vou fazer um loop até o meu o número de suposições é igual a 5.
Então, o que eu realmente preferiria eu queria limpar meu número
de suposições aqui, mas Eu não quero inicializar.
Eu quero inicializar no meu loop só para mostrar que posso fazer isso.
Se eu inicializei lá, antes do primeiro ponto e vírgula no loop for, eu
poderia mantê-lo vazio.
Por exemplo, eu poderia fazer algo assim, inicialize aqui.
E então no meu loop for, eu basta colocar um ponto e vírgula porque
não preciso fazer uma inicialização.
Porque lembre-se, em nosso loop for, a primeira
coisa que você tem antes do ponto-e-vírgula é a inicialização da variável de controle do loop.
Eu já inicializei então não preciso fazer isso,
mas não quero fazer isso.
Vou apenas declarar aqui, e vou
inicializá-lo aqui.
Vou dizer máximo número de suposições é igual a 5.
Essa é a minha variável de controle de loop, Vou inicializá-lo.
Eu vou pular fora do loop se meu número máximo de
suposições for alcançado.
Então aqui eu diria que estou vou escrever de uma maneira diferente.
Vou escrever para que o loop vai de 5 a 0.
Portanto, meu número máximo é 5.
Seria melhor renomeie essa variável.
Vamos renomear e diga o número de suposições.
E o número de palpites vai começar como 5.
E eu vou fazer isso vai para trás.
E quando o número de palpites é 0, eu quero pular fora do loop.
Então, minha condição de saída de loop, Vou dizer que o número de
suposições é maior que 0.
Veja o que estou fazendo aqui.
Eu só vou pular fora do loop se eu não tiver mais suposições.
Então, se eu for maior que 0, eu sou vai ficar dentro do loop.
E então a última coisa que eu quero fornecer no loop for após o
segundo cólon climático é a modificação dessa variável de controle de loop.
Então, vou apenas fazer um menos menos número de suposições.
E o que você deve notar neste for loop é
que estou começando ... Estou quase retrocedendo.
Estou começando com 5 e vou para 0.
Para todos os exemplos que fornecemos no aula, começamos em 0 e subimos.
Mas você pode fazer ambos, Não importa.
Você ainda está iterando aqui 5 vezes.
Agora eu quero mostrar um mensagem informando
quantas tentativas ainda faltam.
Então, vou dizer printf, e, na verdade, vou incorporar o operador ternário
aqui, uma vez que não o usamos.
Não precisa fazer dessa maneira, mas vou fazer dessa maneira
só para mostrar como pode usar o operador ternário.
Então aqui vou imprimir para você tem por cento d tentativas por cento s restantes.
Por cento d vai ser número igual de suposições e tr por
cento s, ele vai mudar.
Vai ser uma tentativa ou vai ser tentar.
E então vou mudar o que é exibido com base em
quantas suposições eu ainda tenho.
Se o número de suposições é igual a 1.
Eu não quero planejar tentativas, uma resta tentar, isso não faz sentido.
Quero imprimir uma tentativa.
Então, aqui vou usar o operador termitário ou, mais precisamente,
o operador condicional.
Eu vou dizer se o número de suposições igual a 1, então defina o número de estimativas igual
a y, caso contrário, defina-o como IES.
E vou imprimi-lo que é o que a porcentagem s está fazendo, o que quer
que seja retornado aqui.
Então, isso vai voltar seja um IES e exiba as informações
corretas.
Então eu só fiz isso para ser um pouco
sofisticado para mostrar como você pode usar o terminal, imprimir as informações corretas.
Depois de imprimir o número das últimas tentativas, então quero dizer a eles
para inserir um palpite.
Então, vou tolerar algumas informações
e apenas diga printf, digite um palpite e isso terá um feed de linha.
Então digite um palpite, e então eu vou para ler esse palpite usando o scanf, sabemos como ler
no teclado.
Vai ser um número inteiro, então estou vou fazer por cento d e vou
colocá-lo na variável de estimativa.
Portanto, preciso usar o E comercial.
Agora tenho que fazer minha verificação.
Tenho que verificar se acho que Eu sou o que me preocupa.
Então aqui temos outra condição de saída.
Vou usar uma declaração if.
Eu vou dizer se meu acho que é igual ao meu número aleatório, o que eu
quero fazer?
Bem, primeiro eu quero imprimir e diga a
eles que foram adivinhados
Vou imprimir, parabéns, você adivinhou.
O que mais eu quero fazer se eles adivinharem corretamente?
Eu quero sair do loop.
Então, como posso sair do loop?
Eu poderia colocar uma pausa.
Eu poderia fazer uma pausa, que vai pular do meu loop.
Agora, se não fosse igual, então Quero adicionar outro if.
Se não for igual, quero verificar certifique-se de que eles validaram o número.
Então, antes de eu dizer, você poderia ter um loop aninhado para validação para que
eles entrem novamente, você não precisa fazer isso, você pode apenas
ter uma instrução f.
Então, aqui eu quero validar o número.
Se não for igual ao número aleatório, quero
ter certeza de que está entre 0 e 20.
Portanto, se a estimativa for menor que 0 ou estamos usando
um operador lógico ou 2 barras paralelas ou o palpite é maior que 20, o que
basicamente verifica se há uma estimativa inválida.
Se for esse o caso e eu não estou vou usar um colchete porque
só tenho uma declaração aqui, os colchetes são opcionais se você tiver
apenas uma instrução.
Então, se eles inseriram uma estimativa inválida, tudo que vou fazer é printf.
Vou imprimir eu disse o número está entre 0 e 20.
E o que vai acontecer aqui não é nada.
Só vai imprimir isso e irá
para a próxima iteração.
Isso vai dizer a eles como muitas tentativas eles deixaram e isso
vai entrar em um palpite.
Agora, se você não quisesse números se eles inseriram números
válidos para não contar como uma estimativa, então você pode ter um loop aninhado.
Mas se eles entrarem em algo 25, ainda vai contar como um palpite.
Então eu apenas digo que defini número entre 0 e 20.
Se eles inseriram um número válido mas não estava correto, seria
a cláusula else.
Aqui, vou apenas dizer, desculpe, número errado, e vou dizer a
eles se é maior ou menor que.
E eu poderia usar o ternário operadora aqui, mas eu não vou.
Então, vamos adicionar um if aqui também.
Caso contrário, se aleatório for maior que adivinhe, então o que eu quero imprimir?
Eu quero imprimir o percentual d lamentável é errado, por cento d será o seu palpite.
Meu número é por cento s é a primeira palavra.
Se o aleatório for maior, meu número é maior.
Meu número é maior do que isso, e eu
não uso nenhum percentil e só tenho um feed de linha.
Caso contrário, se o número aleatório é menos do que adivinhar, então quero dizer a eles que é
mais baixo.
Então posso fazer a cópia e cole a mesma coisa.
Eu poderia pedir desculpas, o número está errado, meu número é menor que isso.
E, novamente, você poderia realmente coloque esses 2 outros ifs.
Você poderia ter outro se
e você pode realmente fazer uma declaração condicional aqui.
Você poderia ter o operador ternário, mas vou usar 2 outros ifs e dizer que é
menos do que isso.
E então vai ser isso, isso vai encerrar o ciclo.
E se sairmos do circuito e não acertamos e excedemos nosso
número de tentativas, então eu vou apenas dizer a eles que
eles tiveram 5 tentativas e eles não adivinhou o número e vou
dizer-lhes o número.
Portanto, uma última saída para o usuário informar eles que não ganharam o jogo e lhes disseram
qual era o número.
Então você teve 5 tentativas e falhou, o número era um número aleatório.
Ok, isso faz sentido?
Estamos fazendo muitas coisas aqui.
Estamos usando instruções if, else declarações em um loop e estamos implementando o
jogo dos números.
E então a última coisa é nós retornar da função principal.
Então, vamos compilar e o que você deveria ter feito ao
longo de todo este exercício?
Você deveria estar testando e trabalhando em pequenos pedaços.
Você provavelmente deveria ter começou a trabalhar primeiro, basta
fazer com que o número aleatório funcione, então testar e compilar e testar.
Em seguida, inicie o seu ciclo.
Certifique-se de que o seu loop funcione apenas por o número de suposições, 5 vezes no máximo e, em seguida,
faça com que funcione e teste.
Em seguida, pergunte ao usuário a resposta algumas informações, faça
funcionar e teste.
Em seguida, compare a quando sair se eles acertam, testam e depois escrevem suas
declarações if teste, é assim que eu implementaria.
Então vamos construir isso e veja se ele compila.
Felizmente, não cometi nenhum erro.
Eu vou dizer construir.
Eu tenho um erro, eu tem número inválido.
Tem que ser um número aleatório, não aleatório porque esse é o
nome da minha variável.
E desta vez eu tenho 0 erros 2 avisos.
Eu tenho um por cento d espere algum int correspondente.
Eu esqueci de colocar o número aleatório ou o palpite.
O palpite aqui e o acho que e o outro.
Eu quero dizer a eles que seu palpite desculpe, acho que estava errado, não tenho que
fazer isso, mas apenas uma coisinha agradável.
Agora vamos construir porque você sempre deseja corrigir seus avisos.
Você deseja ter 0 aviso 0 erros.
Agora, quando executamos isso, temos que testar.
E há muitos testes diferentes casos que você deseja executar aqui.
Você vai querer executar vários testes casos porque lembre-se que nunca é bom
apenas testar uma coisa.
Então aqui diz que é uma suposição jogo, eu escolhi
um número entre 0 e 20, que você deve acho que você tem 5 tentativas restantes.
Então, vou colocar 16.
Desculpe, 16 está errado, o número é menor do que isso.
Vou tentar 8.
8 está errado, menos do que isso.
Eu vou fazer 4.
4 está errado, meu número é maior do que isso.
Oh eu cometi um erro, eu não li isso primeiro.
Portanto, é maior que 8.
Vamos tentar 12.
Eu só tenho 2 tentativas restantes.
Acho que é o certo com 12.
Então diz parabéns.
Mas você também deseja testar uma falha.
Você quer testar algumas coisas aqui, mas deixe-me testar e vou
dizer meu palpite e Vou apenas colocar 0.
0 está errado.
Vou continuar colocando em 0, e lá eu acho que 5 vezes eu estava errado.
Diz que você teve 5 tentativas e falharam.
O numero que voce queria adivinhar era 3.
Então isso funciona.
Agora vamos testar para ter certeza de que acontece se inserirmos números inválidos.
se eu inserir 45.
Eu disse que o número é 0 e 20.
Então esse é outro caso de teste e contou como uma tentativa.
Se eu não quisesse essa conta como um tente, ele pode ter um loop aninhado.
Eu acho que é isso.
Testamos todos os casos.
Testamos os casos onde você adivinhou com sucesso.
Testamos o caso em que você não adivinhou com sucesso.
E testamos o caso em que você inseriu um número inválido.
Talvez o único outro teste fosse certifique-se de que estava dizendo maior que e menor que, que eu acho
que testamos no primeiro, realmente nos disse
para inserir menor ou maior que.
Então, vamos tentar isso.
Então, desta vez, quando eu inserir 20, diz menos do que o que é bom.
Agora vou entrar 10 e eu adivinhei.
Então eu acho que eles são rápidos.
Mas devemos ver menos e maior do que na mesma saída.
Tente novamente, e o aleatório número está funcionando porque estou gerando números
diferentes cada vez que executo o programa.
20 está errado.
Agora vamos tentar 19.
Vamos tentar 1 e é maior do que isso.
Portanto, vejo maior e menos.
Tenho certeza de que está funcionando.
Parece muito bom para mim.
Uma coisa que você deveria ter notado havia um pequeno bug
no programa que eu estava testando.
Então, quando você o executou, porque temos esta quebra aqui, ainda vai
imprimir que eu falhei mesmo quando eu consegui.
Então você deveria ter notado que na saída anterior, acho
que o número certo.
Está impresso parabéns.
Mas também imprimiu I falhou, isso não parece certo.
Então, a maneira de consertar isso é você não tem um avanço,
você quer ter um retorno.
E agora, quando ele retorna não
vai imprimir na linha 39 se você ganhar.
Não vai imprimir que você falhou.
Então, um último teste e você deve percebemos isso
antes, mas quando criamos e adivinhamos corretamente, não vai exibir um erro.
Assim, podemos salvar a corrida e quando execute este, você tem 5 suposições.
Eu vou dizer 10, menos que isso.
Nós vamos dizer 6, e eu adivinhei.
E você vai notar lá diz parabéns.
Não vemos aquela saída extra isso diz que eu também falhei.
Então você quer ter certeza de adicione esse retorno na linha 30 para
que o programa seja executado corretamente.
Você poderia adicionar outra declaração if se você queria para
que não imprima o printf, poderia ter feito uma pausa aqui e então
em printf você poderia ter verificado quantas estimativas de contagem você também tinha que determinar se
era menos de 5, então parabéns.
Mas um pequeno bug aí, e espero que você tenha
notado isso nos testes, o retorno irá corrigi-lo.
Portanto, um pequeno programa legal.
Espero que isso tenha ajudado você a aprender um muito sobre o looping e
todas as suas declarações de decisão e realmente resolução de problemas.
Felizmente, você tirou isso e projetamos isso antes de você
realmente começar a escrever código, isso é sempre importante.
Espero que isto ajude.
Vou fornecer o código-fonte para que você pode compará-lo, ver e analisar.
Obrigada.