Wahrheitstabelle ausgeben in C?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

naja ganz einfach du setzt ja nix zurück, ergo ist überall nicht mehr <= 1

und schritte brauchst du gar nicht, das ergibt sich aus den kombinationen .

#include <stdio.h>


int main(void)
{
    int a, b, c, d, e, f, g, h, i;
    a = 0;
    b = 0;
    c = 0;
    d = 0;

    printf(" | A | B | C | D || E | G | H | I | F |\n");
    printf("-+---+---+---+---++---+---+---+---+---+-\n");

    while(a <= 1)
    {
        while(b <= 1)
        {
            while(c <= 1)
            {
                while(d <= 1)
                {
                    e = a && -b;
                    g = c || -d;
                    h = -e || g;
                    i = a || b || d;
                    f = h==i;

                    printf(" | %d | %d | %d | %d |    | %d | %d | %d | %d |\n", a, b, c, d, e, g, h, i, f);
                    
                    d++;
                }
                d=0;
                c++;
            }
            c=0;
            b++;    
        }
        b=0;                  
        a++;
    }
    a=0;
}

 | A | B | C | D || E | G | H | I | F |
-+---+---+---+---++---+---+---+---+---+-
 | 0 | 0 | 0 | 0 |    | 0 | 0 | 0 | 0 |
 | 0 | 0 | 0 | 1 |    | 0 | 1 | 1 | 1 |
 | 0 | 0 | 1 | 0 |    | 0 | 1 | 1 | 0 |
 | 0 | 0 | 1 | 1 |    | 0 | 1 | 1 | 1 |
 | 0 | 1 | 0 | 0 |    | 0 | 0 | 0 | 1 |
 | 0 | 1 | 0 | 1 |    | 0 | 1 | 1 | 1 |
 | 0 | 1 | 1 | 0 |    | 0 | 1 | 1 | 1 |
 | 0 | 1 | 1 | 1 |    | 0 | 1 | 1 | 1 |
 | 1 | 0 | 0 | 0 |    | 0 | 0 | 0 | 1 |
 | 1 | 0 | 0 | 1 |    | 0 | 1 | 1 | 1 |
 | 1 | 0 | 1 | 0 |    | 0 | 1 | 1 | 1 |
 | 1 | 0 | 1 | 1 |    | 0 | 1 | 1 | 1 |
 | 1 | 1 | 0 | 0 |    | 1 | 0 | 1 | 1 |
 | 1 | 1 | 0 | 1 |    | 1 | 1 | 1 | 1 |
 | 1 | 1 | 1 | 0 |    | 1 | 1 | 1 | 1 |
 | 1 | 1 | 1 | 1 |    | 1 | 1 | 1 | 1 |

fragenueberf858 
Beitragsersteller
 05.12.2021, 19:24

hast du vielleicht ne Ahnung wieso die Werter für e,g,h,i,f falsch berechnet werden?

Ich habe jetzt nochmal geändert und

 e = (a && ~b);
 g = (c || ~d);
 h = (~e || g);
 i = (a || b || d);
 f = (h == i);


printf(" |%d  |%d  |%d  |%d  ||%d  |%d  |%d  |%d  |%d  |\n", a, b, c, d, e, g, h, i, f);

trotzdem ab und zu falsches raus

 | A | B | C | D || E | G | H | I | F |
-+---+---+---+---++---+---+---+---+---+-
 |0  |0  |0  |0  ||0  |1  |1  |0  |0  |
 |0  |0  |0  |1  ||0  |1  |1  |1  |1  |
 |0  |0  |1  |0  ||0  |1  |1  |0  |0  |
 |0  |0  |1  |1  ||0  |1  |1  |1  |1  |
 |0  |1  |0  |0  ||0  |1  |1  |1  |1  |
 |0  |1  |0  |1  ||0  |1  |1  |1  |1  |
 |0  |1  |1  |0  ||0  |1  |1  |1  |1  |
 |0  |1  |1  |1  ||0  |1  |1  |1  |1  |
 |1  |0  |0  |0  ||1  |1  |1  |1  |1  |
 |1  |0  |0  |1  ||1  |1  |1  |1  |1  |
 |1  |0  |1  |0  ||1  |1  |1  |1  |1  |
 |1  |0  |1  |1  ||1  |1  |1  |1  |1  |
 |1  |1  |0  |0  ||1  |1  |1  |1  |1  |
 |1  |1  |0  |1  ||1  |1  |1  |1  |1  |
 |1  |1  |1  |0  ||1  |1  |1  |1  |1  |
 |1  |1  |1  |1  ||1  |1  |1  |1  |1  |
TechPech1984  05.12.2021, 19:32
@fragenueberf858

wo siehst du da fehler ??

e = 0 && 1 = 0
g = 0 || 1 = 1
h = 1 || 0 = 1
i = 0 || 0 || 0 = 0
f = 1 == 0 = 0

setzt mal wahr und falsch ein

e = F && W = F
g = F || W = W
h = W || F = W
i = F || F || F = F
f = W == F = F

bei AND müssen beide WAHR sein um WAHR zu ergeben

bei OR muss nur einer WAHR sein um WAHR zu sein

Das liegt wohl daran, dass deine Variablen a, b, c, d nie wieder auf 0 zurückgesetzt werden. Somit werden die inneren Schleifen nach dem ersten Mal nicht mehr ausgeführt.