Condicionales en C++
Condicionales en C++
Condicionales en C++
Existen diferentes tipos de condicionales, cada uno tiene una utilidad y funcionalidad
diferente, que consideran diferentes situaciones que se pueden llegar a presentar
durante la ejecución de un algoritmo. Depende entonces del conocimiento que
tengamos acerca de cada uno de los condicionales saber determinar correctamente
cuando es necesario implementar uno u otro. Tenemos a nuestra disposición los
siguientes tipos de condicionales en C++.
• Condicional If en C++
• Condicional if-else en C++
• Condicional Switch en C++
Básicamente, un condicional if, es una estructura que nos posibilita definir las
acciones a ejecutar si se cumple cierta condición y de ese modo modificar la
ejecución de tareas en un programa según se necesite.
Para comprender mejor cómo funciona el condicional if, una muy buena forma es
partiendo de un ejemplo. Supongamos que queremos verificar si el resultado de una
suma ingresada por el usuario es correcto o no. Para este ejemplo, el condicional if,
es el encargado de verificar si el resultado ingresado corresponde o no a la respuesta
correcta de la suma. El condicional if, funciona verificando la condición ingresada y
de acuerdo a su valor de verdad (falso o verdadero) lleva a cabo o no una serie de
instrucciones.
Espero haber sido claro, si no, no te preocupes, pues veremos ya mismo algunos
ejemplos para entender todo mejor.
La sintaxis de un condicional if, es bastante simple e incluso creo que intuitiva. Vamos
entonces a ver rápidamente como es la estructura para ir luego a unos ejemplos y
quedar bien claros. Veamos:
if(condición a evaluar) //Por ejemplo X <= 10
....
....
....
....
....
....
Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar
claros. Posteriormente veremos un ejemplo con valores reales.
Línea 1:
En esta línea está prácticamente todo lo esencial del condicional, aquí le hemos dicho
al interior del argumento del condicional if, cual es la condición que se debe cumplir
para que se ejecute el primer bloque de instrucciones, esta línea es en efecto esencial
ya que nos da la pauta para que el algoritmo determine si ejecutará o no el bloque
de instrucciones al interior de las llaves.
Línea 2:
En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás
indica que allí comienza el bloque de instrucciones que se ejecutarán si se cumple la
condición dada. Esta llave no es del todo obligatoria, sin embargo, si no la ponemos
solo se ejecutará dentro de nuestro ciclo la primera línea inmediatamente posterior
a la declaración del condicional, de modo que, si deseamos que se ejecuten varias
líneas dentro de nuestro condicional, debemos usar las llaves
Línea 3 a 7:
En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo
en caso de cumplirse la condición, este bloque podrá tener la cantidad de líneas
necesarias incluso, como veremos más adelante dentro de estas podría haber uno o
más condicionales en su interior, así que podrías tener lo que se conoce como
condicionales anidados (ya veremos eso más adelante).
Línea 8:
En esta línea hacemos uso de la llave cerrando "}", una vez más como seguramente
ya sabrás esta nos indica que allí termina el bloque del condicional y se dará por
terminada la ejecución de este para continuar ejecutando el resto del programa.
Línea 9 a 11
Estas líneas contienen la estructura restante del algoritmo, quise ponerlas allí, para
que quede claro que sin importar si la condición se cumple o no, el algoritmo
siempre va a ejecutar estas líneas, es decir las líneas que se encuentran después de
la llave de cierre de un condicional, siempre se ejecutarán sin importar si la condición
se cumpla o no.
Solución Ejemplo 1:
Debemos entonces determinar cuál va a ser nuestra condición a evaluar, en este
ejemplo, la condición debe ser que la respuesta ingresada, sea igual al resultado de
la suma, veamos entonces como realizar esto:
int resultado = 0;
cout << "Cuanto es 39+50? ";
cin >> resultado;
if(resultado == 39+50)
{
cout << "Respuesta Correcta. ¡Felicitaciones! \n";
}
El código funcional completo sería el siguiente:
#include "iostream"
using namespace std;
int main()
{
int resultado = 0;
cout << "Cuanto es 39+50? ";
cin >> resultado;
if(resultado == 39+50)
{
cout << "Respuesta Correcta. ¡Felicitaciones! \n";
}
system("PAUSE");
}
En resumen, un condicional if-else es una estructura que nos posibilita definir las
acciones que se deben llevar a cabo si se cumple cierta condición y también
determinar las acciones que se deben ejecutar en caso de que no se cumpla;
generando así una separación o bifurcación en la ejecución del programa,
ejecutando ciertas acciones u otras a partir de la evaluación de una condición dada.
Para comprender mejor cómo funciona el condicional if-else, una muy buena forma
es partiendo de un ejemplo. Imaginemos que, en nuestro programa, deseamos
implementar un sistema de logeo de usuario, comprobando si la información
suministrada coincide con unos los valores correctos y en este caso mostrar un
mensaje de bienvenida, y en caso de que no, se mostrará un mensaje de error. Como
podemos imaginar, es entonces necesario hacer que nuestro algoritmo, tome una
decisión, de acuerdo a los valores ingresados por el usuario, y definir los dos casos
posibles en caso de fallo o en caso de que no. Es para esto que sirve el condicional
if-else, nos permite definir una condición que se debe cumplir y de acuerdo a su
cumplimiento o no tomar una acción correspondiente. Espero haber sido claro, si no,
no te preocupes, pues veremos ya mismo algunos ejemplos para entender todo
mejor.
Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar
claros. Posteriormente veremos un ejemplo con valores reales.
Línea 1:
En esta línea está prácticamente todo lo esencial del condicional, aquí le hemos dicho
al interior del argumento del condicional if, cual es la condición que se debe cumplir
para que se ejecute el primer bloque de instrucciones, esta línea es en efecto esencial
ya que nos da la pauta para que el algoritmo determine que bloque de instrucciones
ejecutar.
Línea 2:
En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás
indica que allí comienza el bloque de instrucciones que se ejecutarán si se cumple la
condición dada. Esta llave no es del todo obligatoria, sin embargo si no la ponemos
solo se ejecutará dentro de nuestro condicional la primera línea inmediatamente
posterior a la declaración del condicional, de modo que si deseamos que se ejecuten
varias líneas dentro de nuestro condicional, debemos usar las llaves
Línea 3 a 7:
En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo
en caso de cumplirse la condición, este bloque podrá tener la cantidad de líneas
necesarias incluso, como veremos más adelante dentro de estas podría haber uno o
más condicionales en su interior, así que podrías tener todo un condicional dentro
de un condicional dentro de otro condiconal... y así sucesivamente jejeje.
Línea 8:
En esta última línea hacemos uso de la llave cerrando "}", una vez más como
seguramente ya sabrás esta nos indica que allí termina el bloque del condicional y
se dará por terminada la ejecución de este para continuar ejecutando el resto del
programa, cabe notar que esta línea dará paso a la ejecución del bloque de
instrucciones del else, en caso de que la condición dada no se haya cumplido.
Línea 9 a 16
Estas líneas contienen la estructura else, que es la que indica que existe un bloque
de instrucciones que se debe ejecutar en caso de que la condición dada no se
cumpla. Este bloque al igual que el del condicional if, se abre y se cierra con llaves,
recuerda que estas pueden ser opcionales, sin embargo siempre recomiendo usarlas
como una buena práctica de programación.
Solución Ejemplo 1:
#include "iostream"
#include "string"
#include "stdlib.h"
int main()
{
string password = "";
cout << "Ingrese la contrasenia: ";
cin >> password;
if(password == "myClave")
{
cout << "Contrasenia correcta. Bienvenido";
}
else
{
cout << "Contrasenia incorrecta.";
}
system("PAUSE");
return 0;
}
Muy bien. De momento es todo en esta sección, podemos entonces continuar ahora
con el siguiente contenido que son los condicionales Switch, recuerda también dejar
tus comentarios y/o preguntas en la sección de comentarios.
Condicional switch en C++. Declaración uso y sintaxis de switch en C++
Los condicionales Switch, son una estructura de control condicional, que permite
definir múltiples casos que puede llegar a cumplir una variable cualquiera, y qué
acción tomar en cualquiera de estas situaciones, incluso es posible determinar qué
acción llevar a cabo en caso de no cumplir ninguna de las condiciones dadas.
Espero que haya sido un tanto claro con esto, si no es así, recuerda que puedes
preguntar en la sección de comentarios y con gusto te voy a responder o incluso
modificar esta sección para responder tu cuestión, de igual forma, vamos a ver ya
mismo unos ejemplos para entender mucho mejor de lo que he estado hablando.
Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar
claros. Posteriormente veremos un ejemplo con valores reales.
Línea 1:
Aquí, tenemos la declaración del condicional switch, estamos diciendo que lo que
viene a continuación es esto, entre los paréntesis, el switch recibe la variable que
vamos a usar para comparar en cada uno de los casos.
Línea 2:
En la línea 2 tenemos una llave abriendo "{" lo cual como hemos visto en secciones
anteriores, indica que allí comienzan los bloques de instrucciones que se ejecutarán
para cada caso.
Línea 3:
En esta línea tenemos una parte vital del condicional switch, aquí tenemos definido
un caso posible que puede cumplir nuestra variable, la sintaxis es simple, usamos la
instrucción "case" para indicar que allí comienza un caso, luego indicamos el valor
que puede tomar la variable, puede ser un numero, una cadena de caracteres o lo
que necesitemos, de esto se siguen dos puntos ":" y después de estos ponemos la o
las instrucciones a ejecutar para este caso, como ejemplo, podríamos tener algo
como esto : case "Hola": cout << "Usted ha escrito Hola";.
Línea 4:
Esta línea contiene la instrucción break, es una instrucción simple, pero fundamental
al interior del condicional Switch, esta instrucción indica que hasta allí va el bloque
de instrucciones del caso inmediatamente anterior a este, de este modo evitamos
que el algoritmo ejecute los demás casos, a modo de ejercicio, podrías intentar
ejecutar el código del ejemplo que veremos más adelante y quitar las instrucciones
break, con esto podrás comprobar que si el usuario ingresa por ejemplo un 1, se
ejecutarán todos los casos, es por esto que el break es fundamental.
Línea 5 a 8
Líneas 9, 10 y 12
Estas líneas como deberías saber ya, contienen diferentes comentarios aclarativos
sobre el código, en caso de que no comprendas adecuadamente estas líneas, te
recomiendo visitar la sección de comentarios.
Línea 11
Esta línea cambia un poco con respecto a las anteriores, sin embargo conserva la
misma esencia, en vez de poner el comando "case", usamos el comando "default", y
luego los 2 puntos ":", notemos que no se pone ningún valor a evaluar, pues esta es
la acción que se ejecuta en caso de que no lleguemos a entrar en ninguno de los
casos.
Línea 13:
En esta línea hacemos uso de la llave cerrando "}", una vez más como seguramente
ya sabrás esta nos indica que allí termina el bloque del condicional y se dará por
terminada la ejecución de este para continuar ejecutando el resto del programa.
Solución Ejemplo 1:
switch(opcion)
{
case 1: cout << "Usted ha seleccionado la opción 1";
break;
case 2: cout << "Usted ha seleccionado la opción 2";
break;
case 3: cout << "Usted ha seleccionado la opción 3";
break;
default: cout << "Usted ha ingresado una opción
incorrecta";
}
El código funcional completo sería el siguiente:
# include "iostream"
int main()
{
cout << "Ingrese la Opción a ejecutar: ";
int opcion = 0;
cin >> opcion;
switch(opcion)
{
case 1: cout << "Usted ha seleccionado la opción 1";
break;
case 2: cout << "Usted ha seleccionado la opción 2";
break;
case 3: cout << "Usted ha seleccionado la opción 3";
break;
default: cout << "Usted ha ingresado una opción
incorrecta";
}
// system("PAUSE"); //Solo ponla si no te da error
return 0;
}
Vamos a retomar el ejemplo anterior, pero en esta ocasión vamos a usar caracteres
(char) de C++, para determinar las opciones ingresadas por el usuario.
switch(opcion)
{
case 'a': cout << "Usted ha seleccionado la opción a";
break;
case 'b': cout << "Usted ha seleccionado la opción b";
break;
case 'c': cout << "Usted ha seleccionado la opción c";
break;
default: cout << "Usted ha ingresado una opción
incorrecta";
}
El código funcional completo sería el siguiente:
# include "iostream"
int main()
{
cout << "Ingrese la Opción a ejecutar: ";
char opcion;
cin >> opcion;
switch(opcion)
{
case 'a': cout << "Usted ha seleccionado la opción a";
break;
case 'b': cout << "Usted ha seleccionado la opción b";
break;
case 'c': cout << "Usted ha seleccionado la opción c";
break;
default: cout << "Usted ha ingresado una opción
incorrecta";
}
// system("PAUSE"); //Solo ponla si no te da error
return 0;
}
Eso es todo. Como ves, en esencia es el mismo código, pero debes asegurarte de
poner las diferentes opciones entre comillas simples ('), puesto que la comparación
es entre caracteres.
En C++, NO puedes usar otra cosa diferente a número en cada case. Si necesitas
comparar cadenas de texto u otros tipos de datos, seguramente un condicional
como el if o if-else sean una mejor alternativa
Los caracteres también se pueden usar, pues en esencia se pueden representar como
números enteros (el lenguaje se encarga de eso por ti). Sin embargo, como indiqué,
otros tipos de datos no son recomendables
La sentencia default es opcional, así que si no lo deseas no la debes poner. Sin
embargo, es recomendable hacerlo, para así controlar todas las opciones posibles y
que tu programa no quede a la "suerte" en ciertos casos.
Dentro de cada case eres libre de poner varias líneas de código, incluso otras
estructuras como condicionales o ciclos. Sin embargo, es preferible mantener tu
código ordenado y no poner muchas. Recomendaría no poner más de 5 y
preferiblemente solo una. Si deseas hacer tareas complejas al interior de un case de
un switch en C++, posiblemente sea mejor hacer esas tareas en una función y llamar
a esa función desde el case o simplemente usar un if-else.
Así que, efectivamente, los condicionales switch y de hecho todos los condicionales
en sí, son extremadamente útiles pues permiten definirle a nuestro software
múltiples vías de ejecución contemplando así todas las posibilidades durante la
ejecución. Me gustaría hacer una leve aclaración, el condicional switch encuentra su
utilidad al momento de tener más de una posibilidad de valores para una variable
cualquiera, evidentemente si nuestra variable solo puede adquirir un valor útil para
nosotros, nuestra alternativa inmediata debería ser un if o un if-else, no un switch
que resulta un poco más engorroso de escribir, sin embargo cuando tenemos varias
posibilidades es mejor un switch que tener condicionales anidados o un condicional
después de otro. Espero que todo te haya quedado claro en esta sección.
Muy bien de momento, es todo en esta sección, podemos entonces continuar ahora
con el siguiente contenido que son los Ciclos en C++, recuerda también dejar tus
comentarios y/o preguntas en la sección de comentarios.