Ir ao conteúdo
  • Cadastre-se
Ga_bryel

C++ Programa para sortear uma palavra

Posts recomendados

Boa noite pessoal, alguém pode me ajudar na construção de um programa para sortear uma palavra pre definida.

por exemplo.

 

char palavra[2][30] = {"Programação","C++"};

 

como eu faria pra sortear uma dessas palavras?

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ga_bryel    você pode usar um gerador de números aleatórios de acordo com a quantidade de palavras que você queira sortear , e nesse caso aí são apenas duas , então gere um número de zero até hum , e você pode imprimir a palavra que esteja na posição indicada pelo número gerado pela função , numero = rand() % 2 ,  que resultará ou no número zero , ou no número hum , e imprimirá a palavra sorteada  , cout<<palavra[numero];

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 consegui fazer desse seu jeito. usei um laço for para ver se todas palavras estavam sendo selecionadas, mas percebi que algumas foram repetidas e outras nao apareceram. Usei 5 palavras.

 

int geradorDeNumero(int numero){
    
    char palavraSecreta[5][30]= {"Programacao","C++","Hello","Notebook","Relogio"};
    int palavras = 5;
    for(int i = 0;i < palavras; i++){
    numero = rand() %5;
    cout<<palavraSecreta[numero]<<endl;
    }
//criei essa função para executar o gerador
}

 

 

Captura de tela de 2020-02-22 12-15-39.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ga_bryel Essa não é a melhor forma de sortear um numero mas e a mais rápida.

 

Aqui um exemplo de duas maneiras diferentes.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* Constantes */
#define Q_PALAVRAS 5
#define T_PALAVRAS 20

char *Sorteia(char p[][T_PALAVRAS],int quant)
{
  srand(time(NULL));
  return(p[rand()%quant]);
}

char *SorteiaAdv(char p[][T_PALAVRAS],int quant)
{
  int *vetor,indice;
  vetor=malloc(sizeof(int));
  for(indice=0; indice<quant; indice++)
    vetor[indice]=indice;
  srand(time(NULL));
  for(indice=0; indice<quant; indice++)
  {
    int aux1,aux2;
    aux1=rand()%quant;
    aux2=vetor[indice];
    vetor[indice]=vetor[aux1];
    vetor[aux1]=aux2;
  }
  indice=vetor[0];
  free(vetor);
  return(p[indice]);
}

int main(void)
{
  char palavras[Q_PALAVRAS][T_PALAVRAS];
  int a;
  char tecla;
  printf("\nDigite %i palavras para serem sorteadas.",Q_PALAVRAS);
  for(a=0; a<Q_PALAVRAS; a++)
  {
    printf("\n:\t");
    scanf("%s%*c",palavras[a]);
  }
  do
  {
    printf("\nA palavra sorteada foi:\t%s",Sorteia(palavras,Q_PALAVRAS));
    printf("\nA palavra sorteada foi:\t%s",SorteiaAdv(palavras,Q_PALAVRAS));
    printf("\nPressione S para sair ou qualquer outra tecla para continuar..\n:\t");
    scanf("%c%*c",&tecla);
  }while(tecla!='S'&&tecla!='s');
  return(0);
}

A função SorteiaAdv tem mais chances de sortear todos os nomes no vetor. (foi mal o C puro).

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser feito assim.

 

#include <iostream>
#include <string>
#include <ctime>

using namespace std;

int main()
{
    const int NUM_PALAVRAS = 5;
    const string PALAVRAS[NUM_PALAVRAS] = {
        {"Programacao"},
        {"C++"},
        {"Hello"},
        {"Notebook"},
        {"Relogio"}
    };

    srand(static_cast<unsigned int>(time(0)));
	int NUMERO = (rand() % NUM_PALAVRAS);
    string PALAVRASECRETA = PALAVRAS[NUMERO];

    int TAM = PALAVRASECRETA.size();

    for(int i = 0;i < TAM; i++) {
        int INDICE = (rand() % TAM);
        char TEMP = PALAVRASECRETA[INDICE];
        PALAVRASECRETA[INDICE] = TEMP;
    }

    cout << PALAVRASECRETA << endl;

    return 0;
}

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ga_bryel      repetiu por que precisa colocar o comando 

#include <ctime>
/* e dentro da função main coloque */  
srand( time( NULL ) );  /* só precisa uma vez em todo o programa */
numero = rand() % 5;  

então seu código poderia ser assim  :

#include <iostream>
#include <ctime>
using namespace std;
int geradorDeNumero(){
    int numero;
    char palavraSecreta[5][30]= {"Programacao","C++","Hello","Notebook","Relogio"};
    int palavras = 5;
    for(int i = 0;i < palavras; i++){
        numero = rand() % 5;
        cout<<palavraSecreta[numero]<<endl;
    }
}
int main(){
    int numero;
    srand(time(NULL));
    char palavra[2][30] = {"Programação","C++"};
    for(int j=0;j<10;j++){
        cout<<rand()%100<<" ";
    }
    numero = rand() % 5;
    cout<<"\n\ngerou a posicao da palavra\n"<<endl;
    cout<<palavra[numero]<<"\n\n"<<endl;

    geradorDeNumero();
    getchar();
    system("taskkill /IM cb_console_runner.exe");/* no codeblock funcionna */
    return 0;
}

e como vai gerar cinco números é bem provável que alguma palavra , se repita mesmo .

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

Redes de Computadores - Gabriel Torres

PROMOÇÃO DE QUARENTENA

De R$ 39,90 por apenas R$ 9,90 só até as 23h59min desta sexta-feira 03/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!