[C con Clase] Duda acerca de else if

Davidson, Steven srd4121 en njit.edu
Jue Abr 24 21:55:43 CEST 2014


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140424/56b488ac/attachment.html>


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