Logique: ( A && !(B || C)) | | B || C ) la même chose que ( A || B || C )?
J'ai rencontré quelques obj-c code et je me demandais si il y a un moyen de le simplifier:
#if ( A && !(B || C)) || ( B || C )
est-ce le même?
#if ( A || B || C )
Si non, est-il une autre façon de formuler, ce serait plus facile à lire?
[modifier]
J'ai essayé de la table de vérité avant de poser la question, mais pensé que je devais être en manque de quelque chose parce que je doute de la Fondation.cadre/Fondation.h serait d'employer cette forme plus complexe. Est-il une bonne raison pour cela?
Voici le code d'origine (à partir de la Fondation.h):
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
pourquoi ne pas simplement mettre en œuvre une petite table de vérité avec les résultats et le test vous-même? Il y a seulement 8 entrées |A=true, B=true, C=true | true=, B=true. C=false | et ainsi de suite et ainsi de suite. Comparer les tables de vérité. Si les sorties sont les mêmes, votre logique est équivalent.
Votre parenthèses dans l'en-tête de la question sont un peu différentes que dans la question elle-même. Si l'en-tête est correcte, la section "de!(B || C) | | B || C)" peut être remplacé par "true", vous laissant avec Un "&& vrai", qui est l'équivalent d'un peu A. d'autre part, la question de version semble être le manque d'une paire de parenthèses, sinon vous avez une erreur de syntaxe. Au-delà de ça, je suis d'accord avec les autres affiches, de créer les tables de vérité.
Perháč - merci pour le modifier!
Votre parenthèses dans l'en-tête de la question sont un peu différentes que dans la question elle-même. Si l'en-tête est correcte, la section "de!(B || C) | | B || C)" peut être remplacé par "true", vous laissant avec Un "&& vrai", qui est l'équivalent d'un peu A. d'autre part, la question de version semble être le manque d'une paire de parenthèses, sinon vous avez une erreur de syntaxe. Au-delà de ça, je suis d'accord avec les autres affiches, de créer les tables de vérité.
Perháč - merci pour le modifier!
OriginalL'auteur jpwco | 2011-01-21
Vous devez vous connecter pour publier un commentaire.
Oui. Comme les autres ont dit, vous pouvez la table de vérité. La De Morgan, les règles peuvent aussi aider.
Cependant, je pense que la meilleure option est d'utiliser un Karnaugh Carte. Il faut quelques minutes pour apprendre, mais Karnaugh Cartes vous permettent de toujours trouver le minimum de l'expression de la logique booléenne. La table de vérité peut vérifier une minimisation, mais ils ne peuvent pas le donner à vous.
Voici comment je l'ai eu:
Tout d'abord, la disposition de table:
Maintenant, compte tenu de votre équation, B || C entraînera toujours une vérité:
Cela ne laisse que deux cas. Dans les deux cas, le côté droit a la valeur false. Pour 000, du côté gauche aussi a la valeur false (0 && !(quoi que) est faux). Pour 100, 1 && !(0 ||| 0) évalue à true. Ainsi, l'énoncé est vrai. Remplissage:
Maintenant, nous avons seulement besoin de "couvrir" toutes les vérités. "C" portera sur la ligne du bas. "B" se couvrir le carré central (de quatre valeurs). Ainsi, "B || C" couvre toutes les mais la en haut à droite du carré. Désormais, "Un" couvrira la droite quatre-espace carré. Il est d'accord que c'est redondant. Ainsi, "A || B || C" couvre tous les vrais places et omet le seul faux.
C'est une meilleure réponse que la question mérite et de l'éducation pour démarrer.
OriginalL'auteur jtpereyda
Basé sur les deux dernières colonnes, je dirais que oui.
ouais j'ai &&'ed les deux dernières au lieu de ||'ed. Ils sont égaux
OriginalL'auteur SwDevMan81
Obtenir stylo + papier + l'essayer, il y a seulement 8 entrées possibles
Je suis un physicien expérimental - le choix de faire des maths ou de prise de mesures-je aller pour le muet solution
Je suis trop, mais que l'on est bête et que l'on n'est pas dépend de l'expérience. 😉
eh bien, la smart option est de le faire de la façon la plus stupide première!
OriginalL'auteur Martin Beckett
Ils sont les mêmes. Vous pouvez utiliser Table De Vérité Du Générateur pour le tester. Ces deux expressions de donner
false
dans un cas seulement, quandA
,B
etC
sontfalse
.OriginalL'auteur detunized
Oui c'est la même chose. À l'aide De Morgan règles:
(A && !(B || C)) | | B || C) = (A && !B && !C) | | B || C).
Ainsi, la deuxième sera vrai lorsque A = 1 et B, C = 0. Si ce n'est pas le cas de la deuxième partie (B || C) sera vrai lorsque B || C. c'est Donc égale à la première.
OriginalL'auteur Mariy
On pourrait aussi dire :
(A && !(B || C)) | | B || C) réécrit (A && !W) || W (1)
(1) réécrit (A && !W) | | A || !A || B) (2)
(2) réécrit (A && !W) || (A || B) || (!A || W) (3)
(3) réécrit (A && !W) || !(A && !W) || (A || B) (4)
(4) conduit à Un || W puis A || B || C
A ^ (B || C)
pas?OriginalL'auteur Michel Cadennes
Oui, les deux expressions sont équivalentes. (J'ai juste écrit un couple de fonctions de test de l'ensemble des huit possibilités.)
OriginalL'auteur John