Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Crea un programa para decidir si es un buen día para la producción de energía con paneles solares

Inicializa estas variables:

  • isSunny con el valor 1 (true)
  • windSpeed con el valor 5.4
  • temperature con el valor 23
  • solarPanelOutput con el valor 9
  • isCloudy con 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á evaluado

Con || (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á evaluada

El 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;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentals