10
votes

Logique: est (a &&! (B || c)) || (B || c) le même que (A || B || C)?

J'ai rencontré un code obj-C et je me demande s'il y a un moyen de le simplifier: xxx pré>

est la même chose que? P>

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)


3 commentaires

Pourquoi ne pas simplement mettre en œuvre une petite table de vérité avec les résultats et le tester vous-même? Il n'y a que 8 entrées différentes | A = true, b = true, c = vrai | A = vrai, b = vrai. C = faux | et ainsi de suite. Comparer les tables de vérité. Si les sorties sont identiques, votre logique est équivalente.


Vos parenthèses dans l'en-tête de la question sont légèrement différentes que dans la question elle-même. Si l'en-tête est correct, alors la section "! (B || c) || ​​(b || c)" peut être remplacé par "vrai", vous laissant avec "A && TRUE", ce qui équivaut à Just A. D'autre part, la version de la question semble manquer une paire de parenthèses, sinon vous avez une erreur de syntaxe. Au-delà de cela, je suis d'accord avec les autres affiches, créez les tables de vérité.


@Peter Perháč - merci pour la modification!


7 Réponses :


7
votes

Obtenez un stylo + papier + Essayez, il n'y a que 8 entrées possibles


4 commentaires

Naturellement, j'ai essayé cela en premier. J'ai réputé la source du code pour être au-dessus de cette formulation apparemment obscure: OSX's Foundation.h. Par conséquent, j'ai douté de mes griffonnages. Mais oui, +1 pour votre excellent premier instinct.


Je suis physicien expérimental - étant donné le choix de faire des mathématiques ou de faire des mesures, je vais pour la solution muette


Je suis aussi, mais lequel est idiot et lequel ne dépend pas de l'expérience. ;)


@John - Eh bien, l'option Smart est de le faire la voie la plus stupide d'abord!



2
votes

Oui c'est la même chose. Utilisation de règles de Morgan:

(a &&! (B || c)) || (B || c) = (a &&! B &&! C) || (B || c). Donc, la seconde sera vraie lorsque A = 1 et B, C = 0. Si ce n'est pas le cas, la deuxième partie (B || C) sera vraie lorsque B || C. Donc, il est égal au premier.


0 commentaires

0
votes

Oui, les deux expressions sont équivalentes. (Je viens d'écrire quelques fonctions pour tester les huit possibilités.)


0 commentaires

7
votes
A | B | C | (B || C) | (!(B || C)) | (A && !(B || C)) | (A && (!(B || C)) || (B || C) | (A || B || C)
------------------------------------------------------------------------------------------------------
T | T | T |     T    |       F     |         F        |                 T             |         T      
T | T | F |     T    |       F     |         F        |                 T             |         T 
T | F | T |     T    |       F     |         F        |                 T             |         T 
T | F | F |     F    |       T     |         T        |                 T             |         T 
F | T | T |     T    |       F     |         F        |                 T             |         T 
F | T | F |     T    |       F     |         F        |                 T             |         T 
F | F | T |     T    |       F     |         F        |                 T             |         T 
F | F | F |     F    |       T     |         F        |                 F             |         F 
Based on the last two columns, I would say yes.

1 commentaires

@Detunized, ouais je && 'ed les deux derniers au lieu de ||' ed. Ils sont égaux



12
votes

Oui. Comme les autres l'a dit, vous pouvez la vérité la table. Les règles de Morgan peuvent également aider.

Cependant, je pense que la meilleure option est d'utiliser un Carte Karnaugh . Il faut quelques minutes pour apprendre, mais Karnaugh Maps vous permet de trouver systématiquement l'expression la plus minimale de la logique booléenne. Les tables de vérité peuvent vérifier une minimisation, mais elles ne peuvent pas vous le donner. P>

Voici comment je l'ai eu: p>

Premier, la disposition de la table: P>

         AB
     00   01   11   10
  0|  F |  T |  T |  T |
C 1|  T |  T |  T |  T |


1 commentaires

C'est une meilleure réponse que la question méritée et éducative à démarrer.



7
votes

Ils sont les mêmes. Vous pouvez utiliser générateur de table de vérité pour le tester. Ces deux expressions donnent false uniquement dans un cas, lorsque a , b et c sont faux < / code>.


1 commentaires

C'est un lien intelligent. Je vais le partager avec mes amis de mathématiques. +1



1
votes

Vous pouvez aussi dire:

(a &&! (B || c)) || (B || c) réécrit à (A &&! W) || W (1)

(1) réécrit à (a &&! w) || (A ||! A || W) (2)

(2) réécrit (A &&! W) || (A || w) || (! A || w) (3)

(3) réécrit (a &&! w) || ! (A &&! W) || (A || W) (4)

(4) conduit à un || W puis a || B || C


1 commentaires

Vous pouvez aussi dire a ^ (b || c) non?