a && b - Wahrheitstabelle?
-
Dachte die Aufgabe war, Wahrheitstabelle ausgeben und nicht UND besonders seltsam zu implementieren. Alternativ habe ich noch:
print 0 0 -> 0 print 0 1 -> 0 print 1 0 -> 0 print 1 1 -> 1
Ich hätte gedacht das wäre klar
Zeig mir bitte in deinem Ausgangspunkt wo du das klar gestellt hast. Anscheinend war es nicht klar!
-
Ja und genau das war ja gerade an der Situation das Problem weil ich wieder zu viel gedacht habe... Ich hab gedacht es wäre klar, dass ich das && implementieren will und nicht nur die Wahrheitstabelle mit Verwendung von && erstellen möchte.
Ich hab jetzt zumindestens schon mal einen neuen Ansatz für die benötigte Wahrheitstabelle für a,b,c,d.
int main() { int i, a, b, c, d; for(a=0; a<=1; a=a+1) { for(b=0; b<=1; b=b+1) { for(c=0; c<=1; c=c+1) { for(d=0; d<=1; d=d+1) { printf("%i %i %i %i\n", a, b, c, d); } } } } return 0; }
-
Mein Riecher war schon richtig:
progcontest schrieb:
Und mit diesen selbstgebauten funktionen möchte ich dann die wahrheitstabelle für a AND(b OR c) AND NOT d berechnen lassen...
Mit meiner Struktur lässt sich das einfach erweitern:
#include <stdio.h> void und (int a, int b) { printf ("%i\n", a && b); } void a_and_lpar_b_or_c_rpar_and_not_d(int a, int b, int c, int d) { printf ("%i %i %i %i ", !!a, !!b, !!c, !!d); // Falls du dich überzeugen willst printf ("%i\n", a && (b || c) && !d); } int main () { int i; for (i = 0; i < 4; ++i) und (i&1, i&2); for (i = 0; i < 16; ++i) a_and_lpar_b_or_c_rpar_and_not_d (i&1, i&2, i&4, i&8); }
-
Was ist eigentlich i&1, i&2 in deinem Code?
-
enum {false,true}; printf("false UND false: %s\n", false && false? "true" : "false" ); printf("false UND true : %s\n", false && true ? "true" : "false" ); printf("true UND false: %s\n", true && false? "true" : "false" ); printf("true UND true : %s\n", true && true ? "true" : "false" );
-
@Wutz: das war die zündende Idee:
enum {false,true}; printf("false UND (false ODER false) UND NICHT false\n", (false && (false || false) && !false) ? "true": "false" ); printf("false UND (false ODER false) UND NICHT true \n", (false && (false || false) && !true ) ? "true": "false" ); printf("false UND (false ODER true ) UND NICHT false\n", (false && (false || true ) && !false) ? "true": "false" ); printf("false UND (false ODER true ) UND NICHT true \n", (false && (false || true ) && !true ) ? "true": "false" ); printf("false UND (true ODER false) UND NICHT false\n", (false && (true || false) && !false) ? "true": "false" ); printf("false UND (true ODER false) UND NICHT true \n", (false && (true || false) && !true ) ? "true": "false" ); printf("false UND (true ODER true ) UND NICHT false\n", (false && (true || true ) && !false) ? "true": "false" ); printf("false UND (true ODER true ) UND NICHT true \n", (false && (true || true ) && !true ) ? "true": "false" ); printf("true UND (false ODER false) UND NICHT false\n", (true && (false || false) && !false) ? "true": "false" ); printf("true UND (false ODER false) UND NICHT true \n", (true && (false || false) && !true ) ? "true": "false" ); printf("true UND (false ODER true ) UND NICHT false\n", (true && (false || true ) && !false) ? "true": "false" ); printf("true UND (false ODER true ) UND NICHT true \n", (true && (false || true ) && !true ) ? "true": "false" ); printf("true UND (true ODER false) UND NICHT false\n", (true && (true || false) && !false) ? "true": "false" ); printf("true UND (true ODER false) UND NICHT true \n", (true && (true || false) && !true ) ? "true": "false" ); printf("true UND (true ODER true ) UND NICHT false\n", (true && (true || true ) && !false) ? "true": "false" ); printf("true UND (true ODER true ) UND NICHT true \n", (true && (true || true ) && !true ) ? "true": "false" );
Erweiterbare Codebeispiele gepaart mit reiner englischen Sprachnutzung. Respekt.
-
Ups, ich habe vergessen, bei der Codegenerierung ein
": %s"
im Formatstring einzubauen. Aber egal, testet ja sowieso keiner.
-
Sorry, Leute, aber ich verstehe immer noch nicht, was diese for-Schleife macht:
for (i = 0; i < 16; ++i) a_and_lpar_b_or_c_rpar_and_not_d (i&1, i&2, i&4, i&8);
-
Kennst du dich mit binären Zahlen aus?
`0: 0001: 001
2: 010
3: 011
4: 100
5: 101
6: 110
7: 111`
i&1
ist ungleich 0, wenn die hinterste Stelle 1 ist.
i&2
ist ungleich 0, wenn die zweithinterste Stelle 1 ist.
i&4
ist ungleich 0, wenn die dritthinterste Stelle 1 ist.
i&8
ist ungleich 0, wenn die vierthinterste Stelle 1 ist.
i&(1<<x)
ist ungleich 0, wenn die x-thinterste Stelle 1 ist.1<<x
bedeutet 2 hoch (x-1).Im Prinzip erzeugt man damit alle möglichen Permutationen.
-
Das % ist das bitweise Und. Von der Logik wie && nur das es diesmal auf jedes Bit einzeln wirkt.
6 & 3 = 0b00000110 & 0b00000011 ------------ 0b00000010
Nur da wo in Wert1 und Wert2 die Bits gesetzt sind bleibt das Bit stehen.