Ir ao conteúdo
  • Cadastre-se

C jogo de adivinhação para o computador em c


phinky88

Posts recomendados

Faça um programa na linguagem de programação C. Seu programa deve adivinhar um número entre 1 e 100 escolhido pelo usuário. O programa deve pedir para o usuário escolher um número, e depois propor valores para esse número. A cada número proposto pelo programa, deve pedir ao usuário informação sobre se seu número é igual, maior ou menor que o número escolhido. O programa deve usar essa informação para a próxima escolha. O programa deve identificar se o usuário estiver mentindo. O programa deve propor uma nova partida no final.

Pessoal eu preciso implementar um comando caso o usuario esteja mentindo nesse código como eu faço

#include <stdio.h>

void adivinha() {
    int aleatorio, ultimo=100,primeiro=1,tentativas=0;
    char simbolomate;
    do{
        aleatorio = primeiro + (ultimo-primeiro) /2;
        tentativas ++;
        printf("O número que você escolheu é maior,menor ou igual a %d? Digite '>', '<' ou '=' respectivamente\n Número de tentativas : %d\n",aleatorio,tentativas);
        scanf(" %c",&simbolomate);
        switch (simbolomate){
            case '=':
               printf("número correto");
               break;
            case '>':
               primeiro = aleatorio + 1;
               break;
            case '<':
               ultimo = aleatorio - 1;
               break;
        }
    } while(simbolomate != '=');
}

int main()
{
    int numero, tentar_de_novo=1;
    do{
        printf("Pense e digite um número de 1 a 100\n");
        scanf("%d",&numero);
        adivinha();
        printf("Se você deseja jogar novamente digite um qualquer numero, se não digite 0\n");
        scanf("%d",&tentar_de_novo);
    }while(tentar_de_novo);
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@phinky88        essa função  adivinha  possui apenas variáveis locais , e sendo assim o que o usuário digitou lá função main , e não foi enviado por parâmetro , para essa função adivinha , o programa não sabe o número que o usuário digitou , e o computador só consegue tomar alguma decisão através de comparações , de um dado com outro , e quando os dois dados são idênticos uma área do  processador chamada de ALU  ( unidade de Lógica e Aritmética ) , seta a bandeira , "flag" Z , com o valor 1 em binário , e então o programa faz o que está dentro do comando   if , que é quem faz essa comparação , e caso não sejam iguais a flag z será resetada e terá o valor 0 , e assim o programa não faz o que está dentro do  if  , mas se o programa não tiver em mãos os dois dados para fazer essa comparação , ele não saberá se o usuário mentiu ou não , e uma forma de fazer isso sem enviar o número digitado pelo usuário por parâmetro para a função adivinha , é colocar essa variável numero como sendo do tipo Global , e lá na função adivinha fazer a comparação do número que o usuário escolheu como o programa apresentou , e através do resultado dessa comparação o programa saberá se o usuário mentiu ou não , pois ali do jeito que está no programa é o próprio usuário quem decide se o número é igual ou menor ou maior  , e se colocar que são iguais , mesmo não sendo , o programa aceita e termina , mas entendi que na verdade o que você quer é que o  programa decida por si só se o usuário está ou não está mentindo , e ele não tem condições de adivinhar nada  para fazer uma coisa dessas , pois se nem mesmo uma pessoa consegue fazer , então um programa de  computador , que é mais burro do que uma porta , não conseguirá nunca adivinhar nada , desculpe , mas do jeito que esse programa está é impossível conseguir isso que você pretende , e as modificações para que ele faça isso poderia ser assim   :

#include <stdio.h>
void adivinha()
{    
    int aleatorio, ultimo=100,primeiro=1,tentativas=0;    
    char simbolomate;    
    do
    {            
        aleatorio = primeiro + (ultimo-primeiro) /2;        
        tentativas ++;        
        printf("O número que você escolheu é maior,menor ou igual a %d? Digite '>', '<' ou '=' respectivamente\n Número de tentativas : %d\n",aleatorio,tentativas);        
        scanf(" %c",&simbolomate);        
        switch (simbolomate)
        {            
        case '=':               
            if(aleatorio != numero)printf("Mentiu !\n");               
            else printf("número correto");               
            break;            
        case '>':               
            if(aleatorio <= numero)printf("Mentiu !\n");               
            primeiro = aleatorio + 1;               
            break;            
        case '<':               
            if(aleatorio >= numero)printf("Mentiu !\n");               
            ultimo = aleatorio - 1;               
            break;        
        }    
    } while(simbolomate != '=' );
}
int numero;
int main()
{    
    int tentar_de_novo=1;    
    do
    {           
        printf("Pense e digite um número de 1 a 100\n");        
        scanf("%d",&numero);        
        adivinha();        
        printf("Se você deseja jogar novamente digite um qualquer numero, se não digite 0\n");        
        scanf("%d",&tentar_de_novo);    
    }while(tentar_de_novo);    
    return 16;
} 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...