[C con Clase] Duda acerca de else if

Oscar Aparicio Holgado pelucheloko en hotmail.com
Vie Abr 25 21:46:12 CEST 2014


el switch era la versión 1 del programa :-) lo cambié por los if etc.
Modifiqué el programa para que yo solo usase las variables PIEDRA etc, en todos los casos, y el --eleccion
Muchas gracias por todos los apuntes Steven, un saludo!
Date: Fri, 25 Apr 2014 12:25:38 -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-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 empateswitch( eleccion )

{
  case PIEDRA:  ...  case PAPEL:  ...  case TIJERA:  ...  default:  ...}


Espero que esto te oriente.
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/2bc42296/attachment.html>


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