[C con Clase] Duda acerca de else if

Oscar Aparicio Holgado pelucheloko en hotmail.com
Vie Abr 25 13:04:41 CEST 2014


Muy buena Steven el if que compara si eleccion es igual a s, jamás se me habría ocurrido :-)
El código de ahora con el if y el enum (¿está bien usado?) sería este:
#include <iostream>#include <ctime>#include <cstdlib>using namespace std;
int main()    {
    srand( time(NULL) );
    const char *ordenador[3] = { "piedra", "papel", "tijera" };    int s = rand() % 3;
    enum resultado_t { PIEDRA, PAPEL, TIJERA };
    cout << "Eleccion de la maquina: " << ordenador[s] << endl;
    int eleccion;
    cout << "Introduce n. jugada (1 = piedra, 2 = papel, 3 = tijera): ";    cin >> eleccion;    cout << endl;
    if(eleccion-1 == s)    {        cout << "Empate" << endl;    }
    else if(eleccion == 1)    {        if(s == PAPEL)            cout << "Perdistes panoli!" << endl;        else            cout << "Ganastes tronko!" << endl;    }    else if(eleccion == 2)        if(s == PIEDRA)            cout << "Ganastes tronko!!" << endl;        else            cout << "Perdistes panoli!!" << endl;    else        if(s == PIEDRA)            cout << "Perdistes panoli!!!" << endl;        else            cout << "Ganastes tronko!!!" << endl;    return 0;}

Date: Thu, 24 Apr 2014 15:55:43 -0400
From: srd4121 en njit.edu
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] Duda acerca de else if

Hola Óscar,
2014-04-24 14:26 GMT-04:00 Oscar <pelucheloko en hotmail.com>:



SD> enum resultado_t { PIEDRA, PAPEL, TIJERA };

SD> ...



Entiendo el enum, pero no se como ni donde utilizarlo



Esto sirve para representar el resultado de la elección del juego. Por lo tanto, en cualquier momento que necesites manipular las elecciones, usaremos estas constantes, que como he dicho, representan la elección tomada.

De hecho, doy un ejemplo de su uso:

if( s == PIEDRA )  ...
Queremos comprobar si la elección tomada - guardada en 's' - es igual a la elección de "piedra". Es decir, ¿hemos elegido piedra?


SD> y luego, usamos estas constantes en lugar de las cadenas de caracteres; por

SD> ejemplo,

SD> if( s == PIEDRA )  ...



¿por qué s sería igual a piedra? ¿no es PIEDRA una de las opciones del enum?



No he dicho que 's' sea piedra, sino que preguntamos si es el caso; por eso usamos el operador == y además, forma parte de la sentencia 'if'.

El juego consiste en hacer dos elecciones: una para cada jugador.
¿Qué significa hacer una elección?Significa elegir (y recordar) un valor de entre tres: piedra, papel, o tijera.

¿Cómo representamos una elección?Usamos enteros para representar: piedra, papel, o tijera. Podríamos usar otros tipos de datos, pero usar enteros es más sencillo y rápido.

¿Qué enteros usamos?
Podemos asociar cualquier entero a cualquier elección, pero en mi ejemplo, elegí los enteros: 0, 1, y 2, principalmente, porque podemos usarlos como índices para el array que creaste.

Este es el código retocado con los cambios sugeridos:




Está mejor. Si usaras las constantes que te comenté, el código sería más legible; esto es,
if( eleccion-1 == PIEDRA )
{  if( s == PIEDRA )
    cout << "Empate!" << endl;  else if( s == PAPEL )    cout << "Perdistes panoli!" << endl;  else    cout << "Ganastes tronko!" << endl;
}
Sin embargo, te comenté que crearas la tabla de resultados y que la analizaras. El análisis sirve para que saques conclusiones, sin tener que implementar explícitamente cada resultado. Por ejemplo, mirando la tabla,

J1 \ J2 |  R | P | T----------+----+---+----    R    |  E  | V | G----------+----+---+----    P    |  G  | E | V----------+----+---+----
    T    |  V  | G | E
vemos que si las elecciones son iguales, entonces siempre es empate. Podríamos implementar esta conclusión:
if( eleccion-1 == s )
  cout << "Empate" << endl;
else
{
  ...
}
Hemos eliminado tres casos con una sola comprobación.

Es posible que podamos sacar otras conclusiones útiles, si estratégicamente elegimos otros valores para representar las elecciones o incluso usando alguna fórmula para combinar los valores de cada elección.


Espero que esto te ayude.
Steven


_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140425/2a09645b/attachment.html>


Más información sobre la lista de distribución Cconclase