Resumen
Una condición es una expresión cuyo valor es verdadero o falso. Esta clase estudia cómo se construyen en C++: los seis operadores relacionales, que comparan dos valores y producen un bool; las tres conectivas lógicas, &&, || y !, que combinan condiciones como la conjunción, la disyunción y la negación de la lógica, y la precedencia que las ordena entre sí y respecto de la aritmética. Estudia también dos rasgos en que C++ se aparta de la escritura matemática: la cadena 1 < x < 5, que compila y no significa lo que parece, y la evaluación en cortocircuito, por la cual el segundo operando de && y de || no se evalúa cuando el primero ya decide el resultado, lo que permite proteger una operación peligrosa. Termina con la negación de condiciones compuestas mediante las leyes de De Morgan, comprobada con tablas de verdad, y con su ejemplo central: la condición de año bisiesto y su negación. La unidad no tiene todavía decisiones: las condiciones se evalúan y se imprimen como true o false, y la clase Decisiones en C++ las pondrá a gobernar el programa.
Objetivos de aprendizaje
- Escribir en C++ condiciones compuestas que traduzcan enunciados como « está entre 1 y 10, extremos incluidos».
- Negar una condición compuesta con las leyes de De Morgan y comprobar la equivalencia con una tabla de verdad.
- Usar la evaluación en cortocircuito para proteger una operación, como en
count != 0 && total / count > 2. - Detectar el error de escribir
1 < x < 5, explicar qué calcula y corregirlo.
La condición como expresión
La clase Caracteres, booleanos, conversiones y constantes presentó el tipo bool, con sus dos valores true y false, y la clase Aritmética mostró que una expresión tiene un árbol, que fijan la precedencia y la asociatividad, y un tipo, que fijan sus operandos. Esta clase reúne ambas ideas. Una condición es una expresión de tipo bool: no una instrucción que pregunta algo, sino un cálculo cuyo resultado es una respuesta. count < 10 se calcula como count + 1: se toman los operandos, se aplica el operador y se obtiene un valor, solo que el valor es true o false en lugar de un número. Si esto es así, todo lo que vale para las expresiones aritméticas vale para las condiciones: tienen precedencia, tienen árbol, pueden guardarse en una variable con nombre (const bool inRange{…}) y pueden imprimirse. De ello se sigue la pregunta que recorre la clase: dada una frase («el año es bisiesto», «la edad está entre 18 y 65»), ¿qué expresión tiene exactamente ese valor de verdad para todos los datos posibles?
Cargando el contenido…