[C con Clase] Duda acerca de else if

Davidson, Steven srd4121 en njit.edu
Vie Abr 25 18:25:38 CEST 2014


Hola Óscar,

2014-04-25 7:04 GMT-04:00 Oscar Aparicio Holgado <pelucheloko en hotmail.com>:

> Muy buena Steven el if que compara si eleccion es igual a s, jamás se me
> habría ocurrido :-)
>
>
Como dije, se trata de representar los conceptos y usar tal representación.
Originalmente, representaste cada elección de la máquina usando cadenas de
caracteres, pero usaste otra representación para la elección del usuario.
Si usas una representación común, entonces podemos tratar el mismo concepto
- la elección - de la misma manera.

El código de ahora con el if y el enum (¿está bien usado?) sería este:
>
>
Sí, aunque como he explicado deberías tratar 's' y 'eleccion' de la misma
manera. Esto es,

    else if(eleccion == 1)
>

Aquí 1 no tiene ningún sentido para nosotros. Tendríamos que recordar que 1
representa "piedra". ¿Por qué recordar esto cuando podemos usar una
constante con un nombre descriptivo para comunicar tal idea?

Escribe,

else if( eleccion-1 == PIEDRA )

Esto es mucho más legible y por tanto seremos menos propensos a cometer
errores.

    {
>         if(s == PAPEL)
>             cout << "Perdistes panoli!" << endl;
>         else
>             cout << "Ganastes tronko!" << endl;
>     }
>     else if(eleccion == 2)
>

Aquí hacemos lo mismo,

else if( eleccion-1 == PAPEL )

        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;
> }
>
>
Como puedes ver, vas a necesitar usar 'eleccion-1'. Por lo tanto, sugiero
que hagas esta resta permanente nada más conseguir tal elección; esto es,

cin >> eleccion;

--eleccion;

if( s == eleccion )  ...

if( eleccion == PIEDRA )  ...

Ya no tienes que estar restando 1 cada vez que uses 'eleccion'.


La otra alternativa es usar un 'switch/case' en lugar de 'if/else'; o sea,

// ¿Empate?
if( s == eleccion )  ...

// No hay empate
switch( eleccion )
{
  case PIEDRA:  ...
  case PAPEL:  ...
  case TIJERA:  ...
  default:  ...
}


Espero que esto te oriente.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140425/2ae91ab3/attachment.html>


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