[SOLUCIONADO] Generar nombre aleatorio.

Iniciado por Yugget, 8 Marzo 2014, 13:59 PM

0 Miembros y 4 Visitantes están viendo este tema.

Yugget

Hola, muy buenas.

Estoy recién aprendiendo c++, y tengo un problema con un mini-juego por así llamarlo.

El problema es que no sé cómo hacer que se genere un nombre aleatorio.
Por ejemplo tengo: Tomás,Antonio,Juan y quiero que cada vez que inicie el programa se muestre uno de esos nombres aleatoriamente... estoy probando con rand() pero no me da resultado y estaba buscando información pero no logro encontrarlo... y si ustedes me pudieran echar una mano lo agradecería.

El código:

Código (cpp) [Seleccionar]
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main()
{
   string num;
   cout << "Introduce un numero: " << endl;
   cin >> num;
   
   char *a[] = { "tijeras", "piedra", "papel" };
   
   if(num == "tijeras")
   {
       cout << "tijeritas" << endl;
   }
   else if(num == "piedra")
   {
       cout << "piedrita" << endl;
   }
   else if(num == "papel")
   {
       cout << "papelin" << endl;
   }  
   else
   {
       cout << "No es correcto." << endl;
   }
   
   cout << rand(a) << endl;
   
   getch();
   return 0;
}


Como se abran dado cuenta es un juego de piedra papel o tijeras... jeje

Muchas gracias y disculpen las molestias.

Un cordial saludo.

xaps

Documentación de rand():
http://www.cplusplus.com/reference/cstdlib/rand/

A veces para saber como funciona algo es tan fácil como buscarlo.

Saludos
"The programmers of tomorrow are the wizards of the future" - Gave Newel

Yugget

Hola, muy buenas.
Gracias por tu respuesta...

Estoy probando con esto:

   
Código (cpp) [Seleccionar]
int t1;
   
    t1 = rand() % 10 + 1;
   
    cout << t1 << endl;


Pero solo se muestra el numero 2...

Saludos.

xaps

#3
Tienes que inicializar una semilla para que te genere números aleatorios con srand() (http://www.cplusplus.com/reference/cstdlib/srand/).
Código cogido directamente de la página web que te he pasado:
Código (cpp) [Seleccionar]
/* initialize random seed: */
srand (time(NULL));

/* generate secret number between 1 and 10: */
iSecret = rand() % 10 + 1;
"The programmers of tomorrow are the wizards of the future" - Gave Newel

ivancea96

Rand genera un número pseudoaleatorio. Tienes que establecerle en cada programa, una semilla de la cual, sacará los números.
El comando es:
Código (cpp) [Seleccionar]
srand();

Normalmente, la semilla se le pone según la hora.

Código (cpp) [Seleccionar]
#include <ctime>

int main(){
   srand(time(0));
}

Yugget

Muchas gracias, y disculpen mi ignorancia ha sido culpa mía no poner eso... pensé que no hacía falta...

Ahora ya todo va bien pero... ahora quiero que me lo elija entre tres variables:

Código (cpp) [Seleccionar]
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    string num;
    string texto;
    string texto1;
    string texto2;
    int t1;
   
    cout << "Introduce un numero: " << endl;
    cin >> num;
   
    if(num == "tijeras")
    {
        cout << "tijeritas" << endl;
    }
    else if(num == "piedra")
    {
        cout << "piedrita" << endl;
    }
    else if(num == "papel")
    {
        cout << "papelin" << endl;
    } 
    else
    {
        cout << "No es correcto." << endl;
    }
   
    texto = "tijeras";
    texto1 = "piedra";
    texto2 = "papel";
    srand(time(0));
    t1 = rand() % texto + texto1;
   
    getch();
    return 0;
}


Un cordial saludo.

ivancea96

Tienes varias opciones. Te propongo 3:
En primer lugar, generas el número aleatorio entre 0 y 2. Luego...

  • 1: Pones 3 IF-ELSE para cada valor
  • 2: Mejor que la anterior: Haces un SWITCH, con 3 CASE
  • 3: Guardas las string en un array (string arr[3];) y luego haces arr[num_aleatorio];

amchacon

Por cierto, el srand solo hay que realizarlo UNA VEZ. Lo digo por si después haces un bucle y haces srand todo el rato...
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Yugget

Hola, muy buenas.
Gracias a todos por vuestra colaboración, ya está funcionando correctamente ahora solo tengo un problema... y es que se me muestra un número... que será el del case.

ivancea seguí más o menos tus instrucciones....

Código:

Código (cpp) [Seleccionar]
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    string num;
    int t1;
    int resultado;
    srand(time(0));
    resultado = rand() % 3 + 1;
   
    cout << "Introduzca piedra, papel o tijeras: " << endl;
    cin >> num;
   
    switch(resultado)
    {
        case 1:
             cout << "Tijeras" << endl;
             break;
        case 2:
             cout << "Piedra" << endl;
             break;
        case 3:
             cout << "Papel" << endl;
             break;
             default:
             cout << "Ha ocurrido un error..." << endl;
    }
   
    if(num == "tijeras")
    {
        cout << resultado << endl;
    }
    else if(num == "piedra")
    {
        cout << resultado << endl;
    }
    else if(num == "papel")
    {
        cout << resultado << endl;
    } 
    else
    {
        cout << "No es correcto." << endl;
    }
   
    getch();
    return 0;
}


Aquí una imagen del problema:



He introducido: tijeras y me da de resultado: piedra < perfecto pero como pueden observar me sale abajo el número 2, si es otro resultado me sale otro número... según haciendo referencia al case opino.

amchacon, gracias lo tendré en cuenta.

Un cordial saludo.

ivancea96

[quote author=TomasinSG link=topic=410167.msg1925421#msg1925421 date=1394290846]
    if(num == "tijeras")
    {
        cout << resultado << endl;
    }
    else if(num == "piedra")
    {
        cout << resultado << endl;
    }
    else if(num == "papel")
    {
        cout << resultado << endl;
    }
}

[/quote]
Haces cout de "resultado" jiji