C++ Condiciones con if y comparaciones

Enviado por jvilella el Lun, 23/09/2019 - 03:16

Requisitos:

A veces no queremos ejecutar una instrucción tras otra sino que en función de algo queremos que ocurra una cosa u otra. Para eso existen los bloques if (que en inglés significa “si” en el sentido de “si pasa esto hago aquello”). Veamos un ejemplo:

int num_continentes = 5;
string respuesta;
cout << "Cuentas la America como dos continentes? ";
cin >> respuesta;
if (respuesta == "si") {
   num_continentes = 6;
}
cout << "La Tierra tiene " << num_continentes << " continentes";

La operación == compara dos valores para ver si son iguales. Podemos imaginar que if modifica la secuencia de ejecución de instrucciones en función de una condición, esta condición hay que ponerla entre paréntesis justo después del if y el bloque de instrucciones que queremos ejecutar si se cumple la condición lo ponemos entre llaves. Así pues el programa anterior pregunta al usuario si considera que América son dos continentes y si el usuario responde “si” el programa suma uno a su contador de continentes y dice que la Tierra tiene 6 continentes, y si el usuario no dice “si” no le suma uno al contador de continentes y por tanto dice que la Tierra tiene 5 continentes.

NOTA:  Es muy, muy, MUY importante poner dos caracteres de igual seguidos (“==”) para referirnos a una comparación, ya que si ponemos uno solo C++ cree que estamos asignando un valor. Este es un error tremendamente habitual y además es difícil de detectar porque en muchas ocasiones el programa no mostrará un error y se ejecutará pero siempre entrará en el if o nunca entrará en el if en lugar de entrar en función de si los dos valores son iguales.

Muy sencillo. Pero ¿qué pasa si quiero hacer una cosa si se cumple la condición pero otra cosa si no se cumple? Para eso tenemos else. else siempre debe ir inmediatamente después de cerrar la llave de un if, y cada if no puede tener más que un único else. else no tiene condición porque su condición es simplemente la contraria a la del if. Veámoslo en acción:

int num_continentes;
string respuesta;
cout << "Cuentas la America como dos continentes? ";
cin >> respuesta;
if (respuesta == "si") {
   num_continentes = 6;
}
else
{
   num_continentes = 5;
}
cout << "La Tierra tiene " << num_continentes << " continentes";

Veamos otro ejemplo, de temática distinta:

int edad;
cin >> edad;
if (edad < 18) {
    cout << "Menor de edad";
} else {
    cout << "Mayor de edad";
}

Lo primero que destaca es el uso de la operación de comparación < (menor que), intuitiva porque es la que estamos acostumbrados a usar en matemáticas. Esta operación no podríamos usarla con variables de tipo string porque no tendría sentido, pero si tiene sentido con variables de tipo int. Por lo de demás el resto del código es tan claro como los ejemplos anteriores. Entonces, ¿qué operaciones de comparación hay para variables de tipo int?

  • Menor que: <
  • Mayor que: >
  • Igual: ==
  • Diferente: !=
  • Menor o igual que: <=
  • Mayor o igual que: >=

Conociendo estas comparaciones, si quisiéramos rehacer el código anterior con dos if’s en lugar de con un if-else, quedaría así:

int edad;
cin >> edad;
if (edad < 18) {
    cout << "Menor de edad";
}
if (edad >= 18) {
    cout << "Mayor de edad";
}

¿Qué por qué es relevante este ejemplo? Porque ilustra que el contrario de < no es > como solemos pensar, sino >=. Del mismo modo, el contrario de > es <=. Y obviamente el contrario de == es !=.

¿Y siempre es lo mismo usar un if-else que dos if’s con condiciones invertidas? Casi siempre, pero no siempre. Atención a este código:

int edad;
cout << "Que edad tienes: ";
cin >> edad;
if (edad >= 50) {
    edad = edad - 10;
    cout << "Que sorpresa, aparentas " << edad << " anios"; // A partir de 50 anio preferimos pensar que parecemos mas jovenes
}
if (edad < 50) {
    cout << "Aparentas la edad que tienes";
}

Con este código si el usuario responde que tiene, por ejemplo, 55 años, la variable edad será 55 y al ser 55 mayor o igual a 50 entrará en el primer if, donde cambiará el valor de edad a 45 (le restará 10) y mostrará el texto de que aparenta tener 45 años. Pero a continuación llegará al siguiente if y comprobará si la variable edad es menor que 50… y sí lo es, porque en el anterior if hemos cambiado su valor a 45. Así que entrará también en este if y mostrará el texto diciendo al usuario que aparenta la edad que tiene.

 

Printer Friendly, PDF & Email

Comentarios

Hola Antonio, switch es una estructura condicional que resulta útil en casos muy concretos, en la mayoría de ocasiones no aporta valor adicional a if-else. Para simplificar el aprendizaje del lenguaje no se explica en este manual.

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.