simplifica la función booleana

0

He intentado simplificar una función booleana. Lamentablemente está mal.

Pregunta : ¿Dónde está mi error?

\ $ f = x_4x_2 + \ overline {(x_3 + x_2) x_2 \ cdot 1} + x_2 x_0 \ $

\ $ f = x_4 x_2 + \ overline {(x_3 + x_2) x_2} + x_2 x_0 \ $

\ $ f = x_4 x_2 + (\ overline {x_3} \ overline {x_2}) + \ overline {x_2} + x_2 x_0 \ $

\ $ f = \ overline {\ overline {x_4 x_2 + (\ overline {x_3} \ overline {x_2}) + \ overline {x_2} + x_2 x_0}} \ $

\ $ f = \ overline {\ overline {x_4} + \ overline {x_2} (x_3 + x_2) x_2 \ overline {x_2} + x_0} \ $

\ $ f = \ overline {\ overline {x_4} + \ overline {x_0}} \ $

\ $ f = x_4x_0 \ $

La solución correcta sería:

\ $ f = \ overline {x_2} + x_0 + x_4 \ $

    
pregunta jublikon

1 respuesta

2

El error está en la línea 3. Debería ser así:

$$ \ overline {(x_3 + x_2) x_2} = \ overline {(x_3 + x_2)} + \ overline {x_2} = \ overline {x_3} \ cdot \ overline {x_2} + \ overline {x_2} = \ overline {x_2} (\ overline {x_3} + 1) = \ overline {x_2} $$

Esto te da:

$$ x_4x_2 + \ overline {x_2} + x_2x_0 = x_2 (x_4 + x_0) + \ overline {x_2} $$

Para simplificar esto, podemos escribir:

$$ \ overline {\ overline {x_2 (x_4 + x_0) + \ overline {x_2}}} = \ overline {(\ overline {x_2} + \ overline {(x_4 + x_0)}) \ cdot x_2} = \ overline {\ overline {x_2} \ cdot x_2 + \ overline {(x_4 + x_0)} \ cdot x_2} = $$ $$ = \ overline {0+ \ overline {(x_4 + x_0)} \ cdot x_2} = (x_4 + x_0) + \ overline {x_2} $$

que es igual a \ $ x_4 + x_0 + \ overline {x_2} \ $.

Siempre puedes escribir un programa en C simple para ver dónde te equivocaste.

Aquí tienes:

#include <stdio.h>
#include <stdint.h>

int main(void) {

    uint8_t byte;

    /* A number of all possible combinations.
    For 5 variables it would be 0b11111 etc. */
    uint8_t MAX = 0b1111;

    /* Print header */
    printf("x4 x3 x2 x0 | f1 f2 f3  f\n");

    for (byte=0; byte<=MAX; byte++)
    {
        /* Get individual bits (combinations) */
        uint8_t x0 = (byte & (1<<0)) >> 0; /* my x0 is your x0 */
        uint8_t x1 = (byte & (1<<1)) >> 1; /* my x1 is your x2 */
        uint8_t x2 = (byte & (1<<2)) >> 2; /* my x2 is your x3 */
        uint8_t x3 = (byte & (1<<3)) >> 3; /* my x3 is your x4 */

        /* Logic functions */
        uint8_t f1 = (x3 && x1) || !((x2 || x1) && x1 && 0b1) || (x1 && x0);
        uint8_t f2 = (x3 && x1) || !((x2 || x1) && x1) || (x1 && x0);
        uint8_t f3 = (x3 && x1) || !(x2 && x1) || (!x1) || (x1 && x0);

        /* Final solution */
        uint8_t f = (!x1) || x0 || x3;

        /* Print truth table */
        printf(" %d  %d  %d  %d |  %d  %d  %d  %d", x3, x2, x1, x0, f1, f2, f3, f);

        /* Print wrong line indicator */
        if ((f2!=f1) || (f3!=f1) || (f!=f1))
            printf(" <");

        printf("\n");

    }


    return 0;
}
    
respondido por el Marko Gulin

Lea otras preguntas en las etiquetas