elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO] Generar nombre aleatorio.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Generar nombre aleatorio.  (Leído 10,749 veces)
Yugget

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: Generar nombre aleatorio.
« Respuesta #20 en: 8 Marzo 2014, 19:34 pm »

Hola, muy buenas.

Muchas gracias, por vuestra ayuda.
Ya está todo solucionado, he echo lo de los if y ya todo me funciona correctamente.

Muchas gracias por vuestra ayuda.

Un cordial saludo.


En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [SOLUCIONADO] Generar nombre aleatorio.
« Respuesta #21 en: 10 Marzo 2014, 01:11 am »

Hola a todos. Creo que al programilla le falta la parte donde decide quién ganó (o quizá yo no la vi, sorry). Como un switch() anidado con las nueve posibilidades sería muy tedioso es más cómodo definir una matriz de 3x3, donde la opción 1 representa tijera, 2 la piedra, 3 el papel. En la posición (i,j) de la matriz se pone:
  • 1, si i le gana a j
  • -1, si i pierde ante j
  • 0, si son iguales y hay empate

Así por ejemplo, para el caso de la tijera, como empata consigo misma, pierde ante piedra y gana ante papel, la primera fila de la matriz debe ser {0, -1, 1}. El programa inspecciona el elemento de la matriz, y ahí sabe si usted ganó, perdió o empató.

En la primera parte del programa el usuario elige tijera, piedra o papel pulsando '1', '2' ó '3' (más cómodo que escribir el nombre completo), y este valor entero se deposita en la variable human_op. Luego, elige la máquina al azar usando rand() y srand(), y su valor se deposita en machine_op. Como ya se explicó, el valor de A[human_op - 1][machine_op - 1] dará la respuesta.

Al final, te pregunta si quieres jugar de nuevo y así sucesivamente. Confieso que yo mismo me puse a jugar contra la máquina y casi me envicio, jajaja  >:D.

Un detalle, la función clear_screen() está codificada para Windows y para Linux. En Windows debes dejar la línea system("cls") y comentariar  system("clear"), mientras en Linux se hace al revés. La versión que pongo aquí está para Windows:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <time.h>
  4.  
  5. void clear_screen( void );
  6.  
  7. using namespace std;
  8.  
  9. int main () {
  10.  
  11.    string human, machine;
  12.    int human_op = 0;        /* 1: tijera, 2: piedra, 3: papel */
  13.    int machine_op = 0;
  14.    char next;                /* next == 's' indica que se quiere seguir jugando */
  15.  
  16.    /* Declarar matriz de casos:
  17.      *
  18.      * 1: tijera, 2: piedra, 3: papel
  19.      *
  20.      * El elemento (i,j) vale:
  21.      *   1 si "i le gana a j"
  22.      *  -1 si "i pierde ante j"
  23.      *   0 si hay empate
  24.      */
  25.    int A[3][3] = {{0, -1, 1}, {1, 0, -1}, {-1, 1, 0}};
  26.  
  27.    /* inicializar semilla */
  28.    srand( time(NULL) );
  29.  
  30.    do {
  31.  
  32.        /* El humano elige */
  33.        do {
  34.            clear_screen( );        /* borrar pantalla */
  35.            cout << "Juego piedra, papel o tijera ..." << endl << endl
  36.                << "1: tijera" << endl
  37.                << "2: piedra" << endl
  38.                << "3: papel" << endl << endl
  39.                << "elige: ";
  40.            cin >> human_op;
  41.        } while ( human_op < 1 || human_op > 3 );
  42.        switch ( human_op ) {
  43.            case 1:
  44.                human = "tijera";
  45.                break;
  46.            case 2:
  47.                human = "piedra";
  48.                break;
  49.            case 3:
  50.                human = "papel";
  51.                break;
  52.        }
  53.  
  54.        /* La maquina elige */
  55.        machine_op = rand( ) % 3 + 1;
  56.        switch ( machine_op ) {
  57.            case 1:
  58.                machine = "tijera";
  59.                break;
  60.            case 2:
  61.                machine = "piedra";
  62.                break;
  63.            case 3:
  64.                machine = "papel";
  65.                break;
  66.        }
  67.  
  68.        /* Ahora se decide quien gana */
  69.        cout << endl << "Usted elige: " << human << endl
  70.            << "La maquina elige: " << machine << endl << endl
  71.            << "... ";
  72.        switch ( A[human_op - 1][machine_op - 1] ) {
  73.            case 1:
  74.                cout << "Usted gana !!!" << endl;
  75.                break;
  76.            case -1:
  77.                cout << "Ups, usted pierde" << endl;
  78.                break;
  79.            case 0:
  80.                cout << "Empate" << endl;
  81.                break;
  82.        }
  83.  
  84.        /* Seguir jugando ? */
  85.        cout << "Seguir jugando s/n? ";
  86.        cin >> next;
  87.    } while ( next == 's' );
  88. }
  89.  
  90. /* Borra la pantalla */
  91. void clear_screen( void ) {
  92.  
  93.    /* para Windows */
  94.    system( "cls" );
  95.    /* para Linux */
  96.    //system( "clear" );
  97. }


En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [SOLUCIONADO] Generar nombre aleatorio.
« Respuesta #22 en: 10 Marzo 2014, 04:46 am »


* Te faltó el return de main.

*  Es  más propio de C++ usar <ctime> en lugar de  <time.h> ...pijo que es uno.

* Hecho de menos unos contadores de las partidas ganadas, empatadas y perdidas.

Por lo demás, lo has bordado con la matriz.


¡¡¡¡ Saluditos! ..... !!!!



En línea

BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: [SOLUCIONADO] Generar nombre aleatorio.
« Respuesta #23 en: 10 Marzo 2014, 09:17 am »

Cuando he leído el título, pensaba que hablabas sobre algo así:
http://zonaisc.com/web/?q=node/16
En línea

- Pásate por mi web -
https://codeisc.com
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [SOLUCIONADO] Generar nombre aleatorio.
« Respuesta #24 en: 11 Marzo 2014, 02:13 am »

Leo, ¿En serio se me olvidó el return de main()? Jaja, pero que burdo, sorry  :-[ !!!

Pero de veras que el programa está divertido, provoca fajarse a jugar contra la máquina, jaja.
Bueno, con las modificaciones que propones (contador de ganadas, perdidas y empatadas), quedaría:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <ctime>
  4.  
  5. void clear_screen( void );
  6.  
  7. using namespace std;
  8.  
  9. int main () {
  10.  
  11.   string human, machine;
  12.   int human_op = 0;      /* 1: tijera, 2: piedra, 3: papel */
  13.   int machine_op = 0;
  14.   char next;            /* next == 's' indica que se quiere seguir jugando */
  15.   int ganadas, perdidas, empates;
  16.  
  17.   /* Declarar matriz de casos:
  18.     *
  19.     * 1: tijera, 2: piedra, 3: papel
  20.     *
  21.     * El elemento (i,j) vale:
  22.     *   1 si "i le gana a j"
  23.     *  -1 si "i pierde ante j"
  24.     *   0 si hay empate
  25.     */
  26.   int A[3][3] = {{0, -1, 1}, {1, 0, -1}, {-1, 1, 0}};
  27.  
  28.   /* inicializar semilla */
  29.   srand( time(NULL) );
  30.   ganadas = perdidas = empates = 0;
  31.  
  32.   do {
  33.  
  34.      /* El humano elige */
  35.      do {
  36.         clear_screen( );      /* borrar pantalla */
  37.         cout << "Juego piedra, papel o tijera ..." << endl << endl
  38.            << "1: tijera" << endl
  39.            << "2: piedra" << endl
  40.            << "3: papel" << endl << endl
  41.            << "elige: ";
  42.         cin >> human_op;
  43.      } while ( human_op < 1 || human_op > 3 );
  44.      switch ( human_op ) {
  45.         case 1:
  46.            human = "tijera";
  47.            break;
  48.         case 2:
  49.            human = "piedra";
  50.            break;
  51.         case 3:
  52.            human = "papel";
  53.            break;
  54.      }
  55.  
  56.      /* La máquina elige */
  57.      machine_op = rand( ) % 3 + 1;
  58.      switch ( machine_op ) {
  59.         case 1:
  60.            machine = "tijera";
  61.            break;
  62.         case 2:
  63.            machine = "piedra";
  64.            break;
  65.         case 3:
  66.            machine = "papel";
  67.            break;
  68.      }
  69.  
  70.      /* Ahora se decide quien gana */
  71.      cout << endl << "Usted elige: " << human << endl
  72.         << "La maquina elige: " << machine << endl << endl
  73.         << "... ";
  74.      switch ( A[human_op - 1][machine_op - 1] ) {
  75.         case 1:
  76.            cout << "Usted gana !!!" << endl;
  77.            ganadas++;
  78.            break;
  79.         case -1:
  80.            cout << "Ups, usted pierde" << endl;
  81.            perdidas++;
  82.            break;
  83.         case 0:
  84.            cout << "Empate" << endl;
  85.            empates++;
  86.            break;
  87.      }
  88.  
  89.      /* Seguir jugando ? */
  90.      cout << ganadas << " ganadas, " << perdidas << " perdidas, "
  91.         << empates << " empates" << endl << endl;
  92.      cout << "Seguir jugando s/n? ";
  93.      cin >> next;
  94.   } while ( next == 's' );
  95.  
  96.   return 0;
  97. }
  98.  
  99. /* Borra la pantalla */
  100. void clear_screen( void ) {
  101.  
  102.   /* para Windows */
  103.   //system( "cls" );
  104.   /* para Linux */
  105.   system( "clear" );
  106. }

En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer texto base y generar otro aleatorio {JAVA}
Java
drachmatizando 0 3,245 Último mensaje 16 Septiembre 2010, 19:24 pm
por drachmatizando
Duda como generar un link aleatorio...!!
PHP
TrashAmbishion 2 4,864 Último mensaje 1 Julio 2013, 03:22 am
por #!drvy
Generar un mapa aleatorio 2D con puntos « 1 2 »
Programación C/C++
erest0r 11 6,017 Último mensaje 12 Marzo 2014, 23:41 pm
por ivancea96
desglose del un método generar numero aleatorio sin que se repita JAVA
Java
elm0n0 5 3,696 Último mensaje 30 Abril 2015, 01:00 am
por elm0n0
[Resuelto] como generar un código aleatorio con tiempo de duración?
PHP
pancho1061 1 2,286 Último mensaje 26 Marzo 2018, 02:15 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines