Condiciones lógicas.
Anteriormente revisamos que una condición lógica da como resultado un valor lógico, el cual puede ser verdadero o falso. Es precisamente en las estructuras de control en donde se utilizan ampliamente la evaluación de condiciones lógicas, si revisas en la sección anterior, todas las estructuras hacen o no algo en función del resultado de evaluar una condición lógica.
En esta sección se profundizará en el uso de expresiones lógicas.
Nota: Aunque en este momento no le encuentres mucho sentido a los ejemplos siguientes, trata de seguirlos, en la siguiente sección todo empezará a tomar sentido.
Expresiones con 2 operandos
Las expresiones compuestas por 2 operandos son las más sencillas de evaluar, las cuales generan un valor dependiendo del operador utilizado. Considera las siguientes expresiones.
int eMinima = 18; //Establecemos la edad mínima aceptada int eUsuario = 16; //Suponemos una edad para nuestro usuario bool MayordeEdad;
Si evaluamos estas expresiones con los operadores relacionales más comunes tenemos:
eMinima < eUsuario | eMinima > eUsuario | eMinima == eUsuario | eMinima != eUsuario | eMinima <= eUsuario | |
MayordeEdad | true | false | false | true | true |
Actualizamos la edad del usuario:
eUsuario = 18;
con este cambio nuestra evaluación de condiciones cambia del siguiente modo:
eMinima < eUsuario | eMinima > eUsuario | eMinima == eUsuario | eMinima != eUsuario | eMinima <= eUsuario | |
MayordeEdad | false | false | true | false | true |
El siguiente programa ilustra la evaluación con operadores lógicos, probablemente te parezca muy simple, lo importante en este caso es que comprendas como se evalúan las expresiones y que modifiques el código para que observes los cambios en la ejecución.
/****************************************************************************** // operadoreslogicos.cpp // Este programa muestra la evauación de 2 números con operadores lógicos // 2017, Por http://about.me/carlosgbr // Versión 1 // Compilado en https://www.onlinegdb.com/online_c++_compiler *******************************************************************************/ #include <iostream> using namespace std; int main() { int numero1 = 0, numero2=0; bool resultado; cout << "En este programa se evalúan expresiones lógicas\n"; cout << "Introduce 2 cifras para que puedas compararlos:\n\n"; cout << "Escribe un número (con o sin decimales), a continuación pulsa ENTER\n"; cin >> numero1; cout << "Escribe otro número (con o sin decimales), a continuación pulsa ENTER \n"; cin >> numero2; cout << "\n\n"; cout << "Considera que 0 = Falso y 1 = Verdadero \n"; cout << numero1 << " < " << numero2 << " = " << (numero1 < numero2) << "\n"; cout << numero1 << " <= " << numero2 << " = " << (numero1 <= numero2) << "\n"; cout << numero1 << " > " << numero2 << " = " << (numero1 > numero2) << "\n"; cout << numero1 << " >= " << numero2 << " = " << (numero1 >= numero2) << "\n"; cout << numero1 << " == " << numero2 << " = " << (numero1 == numero2) << "\n"; cout << numero1 << " != " << numero2 << " = " << (numero1 != numero2) << "\n"; cout << "not (" << numero1 << " != " << numero2 << ") = " << not (numero1 != numero2) << "\n"; return 0; }
Evaluando expresiones complejas
En ocasiones tendremos que evaluar 3 o más condiciones, por ejemplo considera el pago de comisiones para un empleado: Supongamos que se le dará bono de productividad solo si no tuvo faltas y si cumplió todas sus actividades durante el periodo evaluado. Si solo cumple una de las 2 solo se le darán $100.00 de comisión.
int limitefaltas = 0; //tolerancia de faltas para recibir bono int faltasemp = 3; //Las faltas del empleado en el periodo int act = 10; //actividades totales que debe hacer en el periodo int actCumplidas = 12; // actividades realizadas bool darBono; // Aquí se almacena si se dar no bono al empleado.
En este caso debemos evaluar y comparar las faltas y a parte las actividades cumplidas para determinar si le toca bono al empleado.
limitefaltas <= faltasemp | |
darBono | false |
Codificando esta condición tenemos:
darBono = (limitefaltas <= faltasemp);
Por asistencia al empleado no le toca bono!
act <= actCumplidas | |
darBono | True |
Codificando esta condición tenemos:
darBono = (act <= actCumplidas);
Por rendimiento al empleado sí le toca bono!
Ahora que sabemos que no le toca bono completo, debemos evaluar si merece al menos la comisión de $100.00 recuerda que la condición es que al menos una de las 2 se cumpla (sea verdadera), en este caso tenemos 2 expresiones que debemos evaluar, en estos casos utilizaremos los operadores Y lógico u O lógico, recuerda como trabajan estos operadores: Y sea cierto, solo si las 2 expresiones evaluadas son verdaderas, OR será verdadero solo si una de las 2 o las 2 expresiones son verdaderas, de este modo la expresión que hace lo que necesitamos es OR. Consulta la sección de Operadores para revisar en detalle este tema.
la evaluación la haremos de este modo:
limitefaltas <= faltasemp | OR | act <= actCumplidase | dar bono? | |
Posibilidad 1 | true | true | true | |
Posibilidad 2 | true | false | true | |
Posibilidad 3 | false | true | true | |
Posibilidad 4 | false | false | false |
Si codificamos esto en C++ la expresión resultante es:
darBono = (limitefaltas <= faltasemp) || (act <= actCumplidase);
Con esta sentencia podremos determinar si al menos le toca el bono opcional al empleado. Nota que las expresiones están agrupadas con paréntesis. Esto en necesario cuando evalúas expresiones compuestas.
Programa con expresiones complejas
El siguiente es un ejemplo que implementa la evaluación de las tablas de verdad que anteriormente se mostraron para los operadores AND y OR, por una parte, y la evaluación de dos expresiones compuestas por el otro. También notarás que se incluyó parte del código del programa anterior, te presente que es una práctica frecuente reutilizar tu propio código como el de terceros al realizar tus programas.
/****************************************************************************** // operadoreslogicos2.cpp // Este programa muestra la evaluación de 2 números con operadores lógicos // AND Y OR // 2017, Por http://about.me/carlosgbr // Versión 1 // Compilado en https://www.onlinegdb.com/online_c++_compiler *******************************************************************************/ #include <iostream> using namespace std; int main() { bool resp1 = true; bool resp2 = false; cout << "En este programa muestra las tablas de verdad para los operadores\n"; cout << "AND (&) y OR ( ):\n\n"; cout << "\n"; cout << "Tabla de verdad para Y Lógico (AND, &) \n"; cout << "\tExpresión 1 \t& \tExpresión 2 \t -> \tResultado\n"; cout << " \t" << true << " \t\t& " << " \t" << true << " \t\t= " << " \t" << (true & true) << "\n"; cout << " \t" << true << " \t\t& " << " \t" << false << " \t\t= " << " \t" << (true & false) << "\n"; cout << " \t" << false << " \t\t& " << " \t" << true << " \t\t= " << " \t" << (false & true) << "\n"; cout << " \t" << false << " \t\t& " << " \t" << false << " \t\t= " << " \t" << (false & false) << "\n"; //cout << "not (" << numero1 << " != " << numero2 << ") = " << not (numero1 != numero2) << "\n"; cout << "\n"; cout << "Tabla de verdad para O Lógico (OR, ||) \n"; cout << "\tExpresión 1 \t|| \tExpresión 2 \t -> \tResultado\n"; cout << " \t" << true << " \t\t|| " << " \t" << true << " \t\t= " << " \t" << (true || true) << "\n"; cout << " \t" << true << " \t\t|| " << " \t" << false << " \t\t= " << " \t" << (true || false) << "\n"; cout << " \t" << false << " \t\t|| " << " \t" << true << " \t\t= " << " \t" << (false || true) << "\n"; cout << " \t" << false << " \t\t|| " << " \t" << false << " \t\t= " << " \t" << (false || false) << "\n"; //Ahora evaluamos expresiones introducidas por el usuario int numero1 = 0, numero2=0; char letra1, letra2; cout << "Introduce la información para que puedas compararla:\n"; cout << "Escribe un número (sin decimales), a continuación pulsa ENTER\n"; cin >> numero1; cout << "Escribe otro número (con o sin decimales), a continuación pulsa ENTER \n"; cin >> numero2; cout << "Escribe una letra, a continuación pulsa ENTER\n"; cin >> letra1; cout << "Escribe otra letra, a continuación pulsa ENTER \n"; cin >> letra2; cout << "\n"; cout << "Considera que 0 = Falso y 1 = Verdadero \n"; //Imprementamos una expresión AND cout << numero1 << " < " << numero2 << " = " << (numero1 < numero2) << "\n"; cout << letra1 << " < " << letra2 << " = " << (letra1 < letra2) << "\n"; cout << "(" << letra1 << " < " << letra2 << ") & (" << numero1 << " < " << numero2 << ") = " << ((letra1 < letra2) & (numero1 < numero2)) << "\n"; //Imprementamos una expresión OR cout << numero1 << " < " << numero2 << " = " << (numero1 < numero2) << "\n"; cout << letra1 << " < " << letra2 << " = " << (letra1 < letra2) << "\n"; cout << "(" << letra1 << " < " << letra2 << ") || (" << numero1 << " < " << numero2 << ") = " << ((letra1 < letra2) || (numero1 < numero2)) << "\n"; return 0; }
A continuación te muestro una salida del programa
Conclusión
Podrás pensar que es muy enredado esto, no lo es, tan solo requiere que pienses de forma lógica, y dicho sea de paso, siempre será recomendable que leas un poco de lógica booleana, en donde obtendrás muchas herramientas y el pensamiento abstracto para no perderte en este tipo de construcciones. Sin embargo en general no se requiere tanta profundidad, conque manejes las tablas de verdad para las funciones AND, OR, NOT, XOR Y NAND, es suficiente para la mayoría de los casos.
Por otra parte considera que para generar una simple sentencia debemos hacer muchas suposiciones, debes tener en cuenta que tú debes prever todas las posibilidades a las que tu programa debe responder de forma apropiada. Entre más suposiciones pueda prever tu programa, verás que crece el código del mismo.
Ahora sí, estamos listos para empezar a programar cosas más interesantes.
Si tienes alguna duda que no se responde en este documento, por favor plantea tu pregunta para poder responderte. O escribe directamente a soporte@ehack.mx
Referencias
- Por Roberto C. González para Ethical Hack
Fuente Imágenes
- «Todas las imágenes de esta sección»: by Nala Systems
Tutorial de C++ by eHack
- Volver al índice de temas del Tutorial de C++
- *** Durante todo este tutorial se repetirá: Este es un curso orientado a gente que nunca ha programado, incluso a gente ajena a la informática. Por esta razón el desarrollo puede parecer lento en ciertas etapas. Prefiero ser claro paso a paso, que hacer «pasos mágicos» como suele ocurrir cuando se enseña programación. *** También es buena idea leas esta entrada si te preguntas «Por qué C++»
Código Fuente
- El código fuente de toda la serie lo puedes descargar en nuestro repositorio en github busca los programas con el nombre del encabezado de cada programa.
- Código de esta sección
Evaluación de Condiciones Lógicas, por Roberto C. González. Se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.
©2025, Ethical Hack, Todos los derechos reservados sobre el contenido propio.