2011-01-21 28 views
10

मैं कुछ Obj सी कोड का सामना किया है और वहाँ यह आसान बनाने के लिए एक तरीका है मैं सोच रहा हूँ:तर्क: है (ए &&! (बी || सी)) || (बी || सी) के समान (ए || बी || सी)?

#if (A && !(B || C)) || (B || C) 

इस रूप में ही है?

#if (A || B || C) 

यदि नहीं, तो इसे बनाने के लिए एक और तरीका है जिसे पढ़ना आसान होगा?

[संपादित करें] मैंने सवाल पूछने से पहले सत्य तालिका की कोशिश की, लेकिन सोचा कि मुझे कुछ याद आना पड़ा क्योंकि मुझे संदेह था कि फाउंडेशन.फ्रेमवर्क/फाउंडेशन एच इस जटिल फॉर्म को नियोजित करेगा। क्या इसके लिए कोई अच्छा कारण है?

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

क्यों सिर्फ परिणामों के साथ एक छोटे से सच तालिका को लागू नहीं और यह अपने आप का परीक्षण? केवल 8 अलग-अलग इनपुट हैं | ए = सत्य, बी = सत्य, सी = सत्य | ए = सच, बी = सच। सी = झूठी | इत्यादि इत्यादि। सच तालिकाओं की तुलना करें। यदि आउटपुट समान हैं, तो आपका तर्क बराबर है। – AndyPerfect

+3

प्रश्न के शीर्षलेख में आपके कोष्ठक प्रश्न के मुकाबले थोड़ा अलग हैं। यदि हेडर सही है, तो अनुभाग "! (बी || सी) || (बी || सी)" को "सत्य" के साथ प्रतिस्थापित किया जा सकता है, जिससे आपको "ए एंड क्यू" के साथ छोड़ दिया जा सकता है, जो कि केवल ए के बराबर है। दूसरी तरफ, प्रश्न संस्करण में एक जोड़ी कोष्ठक याद आ रही है, अन्यथा आपके पास वाक्यविन्यास त्रुटि है। इसके अलावा, मैं अन्य पोस्टरों से सहमत हूं, सच्चे टेबल बनाते हैं। – cobaltduck

+0

@ पीटर Perháč - संपादन के लिए धन्यवाद! – jpwco

उत्तर

12

हां। दूसरों की तरह कहा, आप सच तालिका इसे कर सकते हैं। डी मॉर्गन नियम भी मदद कर सकते हैं।

हालांकि, मुझे लगता है कि Karnaugh Map का उपयोग करने का सबसे अच्छा विकल्प है। सीखने में कुछ मिनट लगते हैं, लेकिन कर्णघ मैप्स आपको बूलियन तर्क के लिए लगातार न्यूनतम अभिव्यक्ति खोजने की अनुमति देता है। सत्य सारणी एक न्यूनतमकरण को सत्यापित कर सकती हैं, लेकिन वे इसे आपको नहीं दे सकती हैं।

पहले, तालिका लेआउट:

यहाँ कैसे मैं समझ गया है

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

अब, अपने समीकरण, बी पर विचार || सी हमेशा एक सच्चाई का कारण बनता है:

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

यह केवल दो मामलों को छोड़ देता है। किसी भी मामले में, दाहिने तरफ झूठे का मूल्यांकन करता है। 000 के लिए, बाईं तरफ भी झूठे मूल्यांकन (&! (जो कुछ भी गलत है)। 100 के लिए, 1 & &! (0 ||| 0) सत्य का मूल्यांकन करता है। इस प्रकार, बयान सत्य है। भरना:

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

अब, हमें केवल सभी सत्यों को "कवर" करने की आवश्यकता है। "सी" नीचे पंक्ति को कवर करेगा। "बी" मध्यम वर्ग (चार मानों में से) को कवर करेगा। इस प्रकार, "बी || सी" शीर्ष दाएं वर्ग के अलावा सभी को शामिल करता है। अब, "ए" दाएं चार-स्तरीय वर्ग को कवर करेगा।यह ठीक है कि यह अनावश्यक है। इस प्रकार, "ए || बी || सी" सभी सच्चे वर्गों को शामिल करता है और केवल झूठा छोड़ देता है।

+0

हैं यह एक उत्कृष्ट उत्तर है। "कर्णघ मैप" के लिए +1। – jpwco

+1

यह योग्य प्रश्न, और बूट करने के लिए शैक्षिक से बेहतर जवाब है। – jpwco

7

प्राप्त पेन + कागज + यह कोशिश करते हैं, केवल 8 संभव आदानों

+0

स्वाभाविक रूप से मैंने पहले कोशिश की। मैंने कोड के स्रोत को इस प्रतीत होता है कि यह अस्पष्ट फॉर्मूलेशन से ऊपर है: ओएसएक्स फाउंडेशन.h। इसलिए मैंने अपने scribblings पर संदेह किया। लेकिन हाँ, अपने उत्कृष्ट पहले वृत्ति के लिए +1। – jpwco

+0

मैं एक प्रयोगात्मक भौतिक विज्ञानी हूं - गणित करने या माप बनाने का विकल्प दिया गया है, मैं गूंगा समाधान –

+2

के लिए जाता हूं, मैं भी हूं, लेकिन कौन सा गूंगा है और कौन सा प्रयोग पर निर्भर नहीं है। ;) – John

2

हाँ, यह एक ही है देखते हैं:

यहाँ (Foundation.h से) मूल कोड है। डी मॉर्गन नियमों का उपयोग करना:

(ए & &! (बी || सी)) || (बी || सी) = (ए & &! बी & &! सी) || (बी || सी)। तो दूसरा सच होगा जब ए = 1 और बी, सी = 0. यदि ऐसा नहीं है तो दूसरा भाग (बी || सी) सच होगा जब बी || सी। तो यह पहले के बराबर है।

0

हां, दो अभिव्यक्ति बराबर हैं। (मैं सिर्फ सभी आठ संभावनाओं का परीक्षण करने के कार्यों के एक जोड़े ने लिखा है।)

7
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 

अंतिम दो कॉलम के आधार पर, मैं हाँ कहेंगे।

+0

इस तालिका के साथ कुछ गलत होना चाहिए। कृपया पुनः जाँच करें। – detunized

+0

@ डिट्यूननाइज्ड, हाँ I && 'ed के बजाय अंतिम दो संपादित करें' ed। वे बराबर – SwDevMan81

7

वे वही हैं। आप इसका परीक्षण करने के लिए Truth Table Generator का उपयोग कर सकते हैं। इन दोनों अभिव्यक्तियों को false केवल एक मामले में, A, B और Cfalse हैं।

+1

यह एक चालाक लिंक है। मैं इसे अपने गणित-शिक्षक मित्रों के साथ साझा करूंगा। +1 – jpwco

1

तुम भी कह सकते हैं:

(! एक & & (बी || सी)) || (बी || सी) फिर से लिखता है (ए & &! डब्ल्यू) || डब्ल्यू (1)

(1) फिर से लिखता है (ए & &! डब्ल्यू) || (ए ||! ए || डब्ल्यू) (2)

(2) पुनः लिखता है (ए & &! डब्ल्यू) || (ए || डब्ल्यू) || (! ए || डब्ल्यू) (3)

(3) पुनः लिखता है (ए & &! डब्ल्यू) || ! (ए & &! डब्ल्यू) || (ए || डब्ल्यू) (4)

(4) ए की ओर जाता है || डब्ल्यू और फिर ए || बी || सी

+0

आप 'ए^(बी || सी) 'नहीं कह सकते हैं? – Jay

संबंधित मुद्दे