Ir ao conteúdo

Posts recomendados

Postado

Estou fazendo um trabalho que envolve criar um jogo de adivinhação , cujo o número gerado é aleatório , eu tenho que dizer se o chute do jogador está perto ou não com dicas de frio, morno, quente ou fervendo, mas toda vez que vou gerar o número aleatório está dando 0 e não sei o que fazer , poderiam me ajudar? Obs: Se puder apenas ajudar com dicas e intruções , sem resposta eu agradeceria.

Obs: o "ntent" está sem ele declarado antes pois , quando declaro antes , apenas fica mostrando o número e não roda os requisitos da adivinhação.

 

int main(){
    int chute, num_dado,ntent,diferente;
    
    num_dado==rand()%10;
    unsigned seed = time(0);

    srand(seed);
    cout<<1+rand()%10<<endl;
    cout << "\e[2J";
    
    do{
        cout << "Digite seu chute ";
        cin >> chute;
        diferente=chute-num_dado;
        if(diferente >= 20 && diferente > 30){
            cout << "Frio " ;
           } else if(diferente >=10 && diferente <= 19){
            cout << "Morno " ;
             }else if (diferente >=5 && diferente <=9){
            cout << "Quente " ;
                } else if(diferente >=1 && diferente <=4)
                cout << "Fervendo " ; 
    } while (num_dado != chute);
    cout << " Foram " << ntent << "Tentativas para acertar o numero ";
    
}

Esse é meu código até o momento. 

  • Amei 1
  • Membro VIP
Postado
7 horas atrás, Dark_Yoshi disse:
num_dado==rand()%10;

Eu não entendo nada de c++ mas parece que você se equivocou nesta definição. Tenta com

num_dado=rand()%10;

 

 

Em tempo... esta ideia me apareceu originalmente láaá nos 80's. Na época 100% original, fiz em basic que está registrado vagamente em minha mente algo como A=INT(RND(1)*100). Curiosamente a ideia era muito igual.

  • Amei 1
Postado

@Dark_Yoshi   isso mesmo que o @.if  disse ,  pois para adicionar se usa apenas um sinal de igualdade , e dois sinais serve para comparar uma variável com outra , e também você colocou o "srand" depois do "rand" e funviona melhor o contrário , com o rand depois . e não entendi para que serve a variável "diferente" , seria melhor comparar mesmo,  o chute com o número gerado .

  • Obrigado 1
Postado
16 horas atrás, Dark_Yoshi disse:

Obs: o "ntent" está sem ele declarado antes pois , quando declaro antes , apenas fica mostrando o número e não roda os requisitos da adivinhação.

 

Não entendi nada. 😞  

 

16 horas atrás, Dark_Yoshi disse:

eu tenho que dizer se o chute do jogador está perto ou não com dicas de frio, morno, quente ou fervendo, mas toda vez que vou gerar o número aleatório está dando 0 e não sei o que fazer , poderiam me ajudar? Obs: Se puder apenas ajudar com dicas e intruções , sem resposta eu agradeceria.

 

Bem, li seu programa e ele nem compila direito.

 

Quando for postar algo prefira sempre postar um programa completo, compilável. É chato para quem quer te ajudar ficar gastando tempo preenchendo coisas em seu programa.

 

Eis o que posso dizer de início:

  • declare uma variável por linha e inicialize tudo. É grátis e é melhor para você.
  • não precisa de time(0), prefira um número, uma constante que possa reproduzir sempre a série de testes. Eu uso algo como 20240720, ano/mes/dia
  • que pretende com isso:

  

    num_dado = rand() % 10;
    unsigned seed = time(0);

    srand(seed);
    cout << 1 + rand() % 10 << endl;

  

 

Afinal quer um número entre 0 e 9 ou entre 1 e 10? E para que gerar outro número e mostrar na tela? De nada serve.

 

  • E isso o que é?
        cout << "Digite seu chute ";
        cin >> chute;
        diferente = chute - num_dado;
        if (diferente >= 20 && diferente > 30)

 

  • Já pensou em dizer os limites para orientar o cara que vai digitar?
  • Se é só um dígito porque usa diferenças tão grandes como >30?
  • >=20 e >30 é a mesma coisa que >30
  • se o chute for maior que o número a diferença é negativa. Nem testou.

 

  • Obrigado 1
  • Membro VIP
Postado
16 horas atrás, arfneto disse:

É chato para quem quer te ajudar ficar gastando tempo preenchendo coisas em seu programa.

De fato. Eu até ia testar num on line c compiler mas nem senti muita vontade.

 

Falando nela, só pra complementar, senti vontade complementar um fato minimamente curioso semi off topic: o número gerado pela função rnd que disse lá em cima não era totalmente aleatório. Ele repetia a sequência em cada reset do computador. Algum tempo depois, logo me veio à luz do motivo: o computador (apple II) não tinha relógio em tempo real que era a base pra gerar números de fato randomicos. Apesar de haver uma função randomize  que provavelmente contornava isso. De novo, era em basic interpretado nativamente.

 

Passado sempre presente

  • Curtir 2
Postado
1 hora atrás, .if disse:

Passado sempre presente

 

😄 esse mundo fica dando voltas e voltas e voltas....

 

Ainda sobre esse caso,

 

18 horas atrás, arfneto disse:

não precisa de time(0), prefira um número, uma constante que possa reproduzir sempre a série de testes. Eu uso algo como 20240720,

 

No caso desse tipo de programa esse é exatamente o efeito que tem ao usar uma constante, como essas que uso, ao escrever esse tipo de coisa. Enquanto o programa está em testes é melhor ter algo que se repete SEMPRE, a mesma sequência, ao invés de usar alguma técnica, como essa clássica de pegar a  hora e usar como semente em srand --- seed sand. Assim você cria uma massa de testes e vai ter sempre as mesmas vagas de estacionamento, os mesmos tickets no cinema, as mesmas músicas na playlist, os mesmos dados, as mesmas cartas no poker, para todos os exercícios clássicos. Até o programa estar estável e testado. Assim um erro vai se repetir, e programas em teste, especialmente nesse contexto, dão muito mais errado que certo, não é?

 

Uma vez que o programa passe pelos testes iniciais se tenta algo com o "'rand para o srand". Se não dá pra ser a hora pode ser algum número avaliado a partir da memória ou do sistema de arquivos, não sei.

 

🙂 

  • Curtir 1
  • Obrigado 1
Postado

@Dark_Yoshi      você disse que a variável "ntent" sempre tem o valor zero , e isso é porque você não a inicializou no início e também não a incrementou nenhuma vez, e como ao ser criada , o compilador reserva um espaço na memória para ela , e por coincidência o valor naquela posição era zero e permaneu em zero até o final então seria melhor inicializar as variáveis logo ao serem criadas:

int ntent = 0;


e essa variável "diferente" poderia ser a porcentagem , assim não precisa ter valores fixos e poderia ter mais quantidades de números e assim se a porcentagem for de 100 por cento , então é por que acertou o número .e para calcular você pode usar a regra de três :

num_dado ----->  100
           X
chute    ----->  diferente

diferente = chute * 100
            -----------
             num_dado

que no algoritmo isso seria assim :
 

diferente = chute * 100 / num_dado;

if( diferente < 20 )
{
   cout << "Frio " ;
}
else if(diferente >=20 && diferente < 45 )
{
   cout << "Morno " ;
}
else if (diferente >= 45 && diferente < 75 )
{
   cout << "Quente " ;
}
else if(diferente >= 75 && diferente < 95)
   cout << "Fervendo " ;

e depois você estabelece as quantidade para   frio  morno  quente  fervendo , pois o acertou será apenas o 100 por cento , porém se o chute for maior que o nUmero , as mensagens precisam ser invertidas.

Postado

@Dark_Yoshi

Seja bem-vindo no fórum CdH!

 

Bom Dia!

Habilite todos os alerta no compilador, em seguida, experimente compilar tua programação, por último escute todos os alerta (se houver).

 

O Jogo

Essa tua expressão inspira a brinca “tá quente ou tá frio”? Uma variação dessa atividade dos jogos infantis consiste na orientação por meio de 2 palavras, QUENTE e FRIO: quando o buscador se oriente na direção do objeto, diz-se está quente, do contrário, está frio. Na reta real dos números, dado um ponto, todo palpite no ponto está quente, todo palpite longe do ponto está frio, sendo sempre o primeiro palpite QUENTE quando não exato.

 

Por exemplo

Dado um número, e um palpite X, se |NUMERO-X|≠ 0, então espera-se que o absoluto da diferença do número e o próximo palpite (X') seja menor que a atual, por isso QUENTE, do contrário, será FRIO.

 

Acertei?

  • Obrigado 1
  • DiF alterou o título para jogo de adivinhação deveria gerar um valor aleatório, está dando zero

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!