C++ Comparaciones complejas con los operadores and y or

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

Requisitos:

Con frecuencia queremos comprobar que dos condiciones se cumplan para ejecutar una instrucción. Por ejemplo si queremos comprobar si el usuario pertenece a la Generacion Z tenemos que comprobar que haya nacido entre el año 1990 y el año 2010.

#include <iostream>
using namespace std;
int main() {
    int anio_nacimiento;
    cin >> anio_nacimiento;
    if (anio_nacimiento >= 1990) {
        if (anio_nacimiento < 2010) {
            cout << "Eres posmilenial";
        } else {
            cout << "No eres posmilenial";
        }
    } else {
        cout << "No eres posmilenial";
    }
}

Parece demasiado complejo para una idea tan sencilla. Y por supuesto que lo es, podemos simplificarlo:

#include <iostream>
using namespace std;
int main() {
    int anio_nacimiento;
    cin >> anio_nacimiento;
    if (anio_nacimiento >= 1990 and anio_nacimiento < 2010) {
        cout << "Eres posmilenial";
    } else {
        cout << "No eres posmilenial";
    }
}

Vemos que empleando “and” (también se puede usar “&&” que es exactamente equivalente) podemos unir dos o más condiciones y el if solo entrará si todas las condiciones son correctas.

Podemos usar “or” (o “||” que es exactamente equivalente) para unir condiciones donde nos basta con que una de ellas se cumpla para entrar en el if:

#include <iostream>
using namespace std;
int main() {
    string nombre;
    cin >> nombre;
    if (nombre == "Santiago" or nombre == "Yago" or nombre == "Jaime" or nombre == "Diego" or nombre == "Jacobo") {
        cout << "Tu santo es el 25 de julio";
    }
}

Veamos otro ejemplo:

int edad;
cin >> edad;
if (edad >= 16 and edad < 70) {
    cout << "Legalmente estas en edad de trabajar";
}

Es importante que veas que a los dos lados del and y del or siempre debe haber una comparación (completa), es decir, no podemos poner "if (edad >= 16 and < 70)" porque a la derecha del and no hay una comparación completa.

También podemos utilizar la exclamación (“!”) para obtener el resultado contrario, por ejemplo:

if (!(edad >= 16 and edad < 70)) {
    cout << "Legalmente no tienes facil poder trabajar";
}

Debe ponerse después de la exclamación entre paréntesis todo aquello que queramos “negar” (es decir, todo aquella que queremos que sea lo contrario).

Y por supuesto podemos combinar and’s i or’s, aunque es recomendable usar paréntesis para dejar claro en qué orden queremos que se hagan las comprobaciones:

if ((edad < 2) or (edad >= 13 and edad < 18)) {
    cout << "Tu hijo esta en una edad complicada, paciencia";
}

 

Printer Friendly, PDF & Email

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.