Operadores lógicos - Parte 3
Parte de la sección Fundamentals del Journey de C de Coddy — lección 23 de 63.
Al comprobar múltiples condiciones, el programa deja de comprobar tan pronto como conoce la respuesta final. Esto se llama evaluación de cortocircuito.
Por ejemplo:
int x = 0;
int y = 5;
int result = (x != 0) && (y / x > 2);Aquí x es igual a 0, por lo tanto, no evaluará y / x > 2. Si invirtiéramos el orden:
int result = (y / x > 2) && (x != 0);Esto resultará en un error porque y será dividido por 0, lo cual no está definido en C. Por lo tanto, es una buena práctica analizar bien las operaciones, para que puedas obtener un código correcto y efectivo, pero sin errores.
Esta técnica se utiliza para optimizar la evaluación de expresiones lógicas. Por ejemplo:
int a = 0;
int b = 2;
int c = 3;
int d = 5;
int result = (a > 0 && b < 2) || (c < -5 && d < 10);En este ejemplo, b < 2 y d < 10 no se evaluarán porque a > 0 y c < -5 son ambos falsos.
Desafío
FácilCrea un programa para decidir si es un buen día para la producción de energía con paneles solares
Inicializa estas variables:
isSunnycon el valor 1 (true)windSpeedcon el valor 5.4temperaturecon el valor 23solarPanelOutputcon el valor 9isCloudycon el valor 0 (false)
Crea una expresión lógica que verifique TODAS estas condiciones:
- Está soleado
- La velocidad del viento es menor que 10
- La producción del panel solar es menor que 15
- La temperatura es superior a 20 O no hay nubes
Imprime "Good day for solar energy" si se cumplen todas las condiciones, de lo contrario imprime "Not ideal for solar energy".
Hoja de referencia
La evaluación de cortocircuito deja de comprobar condiciones tan pronto como se determina el resultado final, optimizando la evaluación de expresiones lógicas.
Con && (AND), si la primera condición es falsa, la segunda no será evaluada:
int x = 0;
int result = (x != 0) && (y / x > 2); // y/x no será evaluadoCon || (OR), si la primera condición es verdadera, la segunda no será evaluada:
int result = (a > 0 && b < 2) || (c < -5 && d < 10);
// Si a > 0 es falso, b < 2 no será evaluado
// Si la primera parte es verdadera, la segunda parte no será evaluadaEl orden importa - coloque las condiciones que podrían causar errores (como la división por cero) después de las comprobaciones de seguridad:
// Seguro: comprueba x != 0 primero
int result = (x != 0) && (y / x > 2);
// Inseguro: podría dividir por cero
int result = (y / x > 2) && (x != 0);Pruébalo tú mismo
#include <stdio.h>
int main() {
// Inicializar variables
int isSunny = 1;
float windSpeed = 5.4;
int temperature = 23;
int solarPanelOutput = 9;
int isCloudy = 0;
// Crear la expresión lógica
int isGoodDay =
// No cambiar abajo
if (isGoodDay) {
printf("Good day for solar energy\n");
} else {
printf("Not ideal for solar energy\n");
}
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentals
2Variables
Tipos de datosEnterosFloat - DoubleCaracteresBooleanosConstantesConceptos básicos de printfReglas para nombrar variablesConversión de tipos Parte 1Conversión de tipos Parte 2Desafío de repaso3Operadores
Operadores aritméticosOperador de móduloIncremento/DecrementoOperadores de asignaciónOperadores relacionalesOperadores lógicos - Parte 1Operadores lógicos - Parte 2Operadores lógicos - Parte 3Desafío de repaso