डिजिटल लॉजिक सर्किट - परीक्षा प्रश्न


14

मेरे पास परीक्षा से एक प्रश्न है जिसे हल करने में मैं असफल रहा:

मुझे एक डिजिटल लॉजिक सर्किट बनाने की आवश्यकता है जो 4 बिट नंबर प्राप्त कर रहा है और trueयदि नंबर है 0, 7या वापस लौटाता है 14। मेरे पास केवल एक XORगेट (2 इनपुट), एक NOR(3 इनपुट), एक NAND(2 इनपुट) और एक 3 से 8 डिकोडर है।

मुझे लगता है कि प्रश्न अस्वीकार्य है, मुझे ऐसा कोई संयोजन नहीं मिला जो ऐसा कर सके। किसी भी विचार यह कैसे हल करने के लिए?


1
संकेत के रूप में: 4 बिट्स और 3-8 डिकोडर दिए गए हैं, आपको बिट्स में से एक को अलग तरीके से व्यवहार करना होगा।
ब्रायन ड्रमंड

2
@BrianDrummond लेकिन मैं पहले से ही जानता हूं कि, और मैं अभी भी इसे हल करने में सफल नहीं हुआ। हर समाधान जो मैंने कोशिश किया है कि यह एक या गेट को याद कर रहा है। मुझे दिए गए फाटकों के साथ ऐसा संयोजन नहीं मिला जो समस्या को हल कर सके ... ध्यान दें कि मेरे पास प्रति गेट केवल एक गेट है ...
nrofis

3
@BrianDrummond: यदि आपको लगता है कि आपके द्वारा मौजूद समाधान का विवरण पोस्ट किया गया है, तो हम इसे सत्यापित कर सकते हैं। यह कहना मुश्किल है कि कोई समाधान मौजूद नहीं है, लेकिन यह सत्यापित करना आसान है कि कोई समाधान मान्य है या नहीं।
पसाबा पोर एक्वी

2
@ इंडो केसलर ... मैं आपके समाधान से सहमत था और यदि आपका प्रमाण उन्हें सही लगता है तो मुझे खेद है कि आपने इसे हटा दिया। अब तक किसी को भी इसका हल नहीं दिख रहा है। शायद अगर आपने अपने एल्गोरिथ्म का विवरण शामिल किया, तो यह उत्तर को बेहतर करेगा। आप कितने आश्वस्त हैं कि यह सही और बग-मुक्त है?
टट

3
@ जलीलिपोप, मैंने कल किया था। पक्षी केसलर और पसबा पोर एक्वी सही थे, मेरे प्रोफेसर ने कहा कि प्रश्न गलत था और नंद को नोर होना चाहिए ....
nrofis

जवाबों:


24

मैंने C # में एक एल्गोरिथ्म लिखा है जो उन लोगों के हर संभव संयोजन की कोशिश करता है Nor 3->1 Xor 2->1 Nand 2->1और Decoder 3->8

इसे 7 years मिलियन वर्ष 2 घंटे चलाने के बाद , इसने 42 फाल्स लौटा दिए । मेरा मानना ​​है कि इस सवाल का कोई जवाब नहीं है क्योंकि यह एल्गोरिथम हर संभव संयोजन की जांच करता है। :)

मुझे इसका वर्णन करने के लिए कहा गया था, इसलिए अगला भाग कोड के कुछ हिस्सों का एक विवरण है, भाग द्वारा। टीएल; डीआर - आप अंत में कोड को छोड़ सकते हैं :)


आइए इनपुट लाइनों के बारे में बात करते हैं, उनके पास 0 या 1 राज्य हैं और प्रत्येक संभावित इनपुट (0 से 15) के लिए वे अलग-अलग मान रखते हैं:

पहली पंक्ति के लिए ऐसा दिखता है: 0 1 0 1 0 0 1 ... दूसरा है: 0 0 1 1 0 0 1 1 ... तीसरा: 0 0 0 0 1 1 1 1 .... बाइनरी की तरह गिनती ... आपको विचार मिला: पी

इसलिए मैंने एक ऐसी वस्तु बनाई जो उनके प्रत्येक राज्य में प्रत्येक पंक्ति का प्रतिनिधित्व करती है:

class BitLine{
    bool[] IsActiveWhenInputIs = new bool[16];
}

जैसा कि यह कहा जाता है कि बिटलाइन .sActiveWhenInputIs [5] वापसी करें कि क्या इनपुट 5 था जब लाइन सक्रिय थी।

यह एक कोड है जो पूरी तरह से इनपुट लाइनें बनाता है:

var bitLineList = new BitLine[6]; // initialize new array of bitLines
for (int i = 0; i < 6; i++) bitLineList [i] = new BitLine(); // initialize each bitLine
for (int i = 0; i < 16; i++)
{
    for (int j = 0; j < 4; j++)
    {
        int checker = 1 << j; // check whether the j-th bit is activated in the binary representation of the number.
        bitLineList[j].IsActiveWhenInputIs[i] = ((checker & i) != 0); // if it's active, the AND result will be none zero, and so the return value will be true - which is what we need :D
    }
}

हम एक "हमेशा सच" और "हमेशा झूठी" बिट लाइनों के साथ-साथ एक निरंतर "0" इनपुट या "1" इनपुट प्रदान करेंगे।

for (int i = 0; i < 16; i++){
    bitLineList[4].IsActiveWhenInputIs[i] = false;
    bitLineList[5].IsActiveWhenInputIs[i] = true;
}

अब यदि आप ध्यान दें, जो हम देख रहे हैं, वह वास्तव में एक विशिष्ट बिटलाइन है, तो यह एक सच है जब इनपुट 0, 7, 14. है। चलो इसे हमारी कक्षा में दर्शाते हैं:

var neededBitLine = new BitLine();
for (int i = 0; i < 16; i++){
    neededBitLine.IsActiveWhenInputIs[i] = ((i % 7) == 0); // be true for any number that is devideble by 7 (0,7,14)
}

इससे चीजें वास्तव में सरल हो गईं: हम वास्तव में जिस चीज की तलाश कर रहे हैं वह इनपुट बिट लाइन से इस जरूरत को "जाली" बनाने का एक तरीका है (यह है कि मैं अपने कार्यक्रम का प्रतिनिधित्व करता हूं कि मैं अपना आउटपुट क्या चाहता हूं)।

अब, यह है कि हम कैसे चलते हैं: हर बार जब हम अपने बिटलाइन पर कुछ तार्किक तत्व का उपयोग करते हैं Xor, जैसे Nor, Nandया यहां तक ​​कि Decoder, हम वास्तव में एक नया बिटलाइन बना रहे हैं। हम प्रत्येक संभावित इनपुट में 0 से 15 तक की लाइनों का मूल्य जानते हैं, इसलिए हम हर संभव इनपुट में नए बिटलाइन के मूल्य की गणना कर सकते हैं!

नंद नोर और ज़ोर सभी सीधे हैं:

void Xor(BitLine b1, BitLine b2, BitLine outputBitLine)
{
    for (var i = 0; i < 16; i++)
    {
        outputBitLine.IsActiveWhenInputIs[i] = b1.IsActiveWhenInputIs[i] != b2.IsActiveWhenInputIs[i];
    }
}

void Nand(BitLine b1, BitLine b2, BitLine outputBitLine)
{
    for (var i = 0; i < 16; i++)
    {
        outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] && b2.IsActiveWhenInputIs[i]);
    }
}

void Nor(BitLine b1, BitLine b2, BitLine b3, BitLine outputBitLine)
{
    for (var i = 0; i < 16; i++)
    {
        outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] || b2.IsActiveWhenInputIs[i] || b3.IsActiveWhenInputIs[i]);
    }
}

प्रत्येक संभावित इनपुट के लिए, यह दर्शाता है कि नया बिटलाइन कैसे कार्य करेगा।

डिकोडर को संभालना थोड़ा मुश्किल है, लेकिन विचार यह है कि "यदि इनपुट पर बिट्स बाइनरी में संख्या x का प्रतिनिधित्व करते हैं, तो x-th आउटपुट बिट लाइन सही होगी, जबकि अन्य सभी झूठे होंगे। दूसरे के विपरीत। फ़ंक्शन, यह एक बिटलाइन की एक सरणी प्राप्त करता है, और सरणी में 8 नए बिटलाइन जोड़ता है।

void Decoder(BitLine b1, BitLine b2, BitLine b3, List<BitLine> lines, int listOriginalLength)
{
    for (int optionNumber = 0; optionNumber < 8; optionNumber++)
    {
        for (var i = 0; i < 16; i++)
        {
            int sum = 0;
            if (b1.IsActiveWhenInputIs[i]) sum += 4;
            if (b2.IsActiveWhenInputIs[i]) sum += 2;
            if (b3.IsActiveWhenInputIs[i]) sum += 1;

            lines[listOriginalLength+optionNumber].IsActiveWhenInputIs[i] = (sum == optionNumber);
        }
    }
}

अब हमारे पास हमारे सभी मूल तत्व हैं, तो आइए एल्गोरिथ्म के बारे में बात करते हैं:

हम एक पुनरावर्ती एल्गोरिथ्म करने जा रहे हैं, प्रत्येक गहराई पर यह वर्तमान में उपलब्ध बिटलाइन्स पर अन्य तत्वों (न ही \ nand \ xor \ decoder) का उपयोग करने की कोशिश करेगा, और फिर अगले पुनरावर्ती गहराई के लिए अनुपयोगी तत्व को सेट करेगा। जब भी हम नीचे पहुंचते हैं और हमारे पास उपयोग करने के लिए और कोई तत्व नहीं होते हैं, तो हम जांच करेंगे कि क्या हमारे पास बिटलाइन है या नहीं।

यह कोड किसी भी समय की जाँच करता है कि क्या वर्तमान समूह में वह पंक्ति है जिसमें हम देख रहे हैं:

bool CheckIfSolutionExist(List<BitLine> lines, int linesLength BitLine neededLine)
{
    for(int i = 0; i<linesLength; i++){
         if (lines[i].CheckEquals(neededLine))
        {
            return true;
        }

    }
    return false;
}

यह वह फ़ंक्शन है जो यह जांचने के लिए उपयोग करता है कि क्या दो लाइनें समान हैं:

bool CheckEquals(BitLine other)
{
    for (var i = 0; i < 16; i++)
    {
        if (this.IsActiveWhenInputIs[i] != other.IsActiveWhenInputIs[i])
        {
            return false;
        }
    }
    return true;
}

ठीक है, तो अब मुख्य भाग के लिए, यह मुख्य एल्गोरिथ्म है:

bool Solve(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if ((!nand) && (!nor) && (!xor) && (!decoder))
    {
        return CheckIfSolutionExist(lines, listLength, neededLine);
    }
    else
    {
        if (HandleNand(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        if (HandleNor(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        if (HandleXor(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        if (HandleDecoder(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        return false;
    }
}

यह फ़ंक्शन उपलब्ध बिटलाइन की एक सूची प्राप्त करता है, सूची की लंबाई, एक बूलियन जो यह दर्शाता है कि प्रत्येक तत्व वर्तमान में उपलब्ध है (xor / nor / nand / decoder), और बिटलाइन जिसे हम खोज रहे हैं बिटलाइन का प्रतिनिधित्व करते हैं।

प्रत्येक चरण में, यह जाँचता है कि क्या हमारे पास उपयोग करने के लिए और भी तत्व हैं, यदि नहीं - यह जाँचता है कि क्या हम अपनी आवश्यक बिटलाइन को संग्रहीत करते हैं।

यदि हमारे पास अभी भी अधिक तत्व हैं, तो प्रत्येक तत्व के लिए यह एक फ़ंक्शन को कॉल करता है जो उन तत्वों का उपयोग करके नए बिटलाइन बनाने का काम करता है और बाद में अगली पुनरावर्ती गहराई को बुलाता है।

अगले हैंडलर के कार्य सभी बहुत सीधे हैं, उन्हें उपलब्ध बिटलाइन से "2 \ 3" चुनने और संबंधित तत्व का उपयोग करके उन्हें संयोजित करने के लिए अनुवादित किया जा सकता है। फिर पुनरावृत्ति की अगली गहराई को कॉल करें, बस इस बार इसमें शामिल नहीं होगा। यह तत्व! ”।

वे कार्य हैं:

bool HandleNand(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (nand)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                BitLine.Nand(lines[i], lines[j],lines[listLength]);
                if (Solve(lines,listLength+1, false, nor, xor, decoder, neededLine))
                {
                    return true;
                }
            }
        }
    }
    return false;
}

bool HandleXor(List<BitLine> lines,  int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (xor)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                BitLine.Xor(lines[i], lines[j],lines[listLength]);
                if (Solve(lines,listLength+1, nand, nor, false, decoder, neededLine))
                {
                    return true;
                }

            }
        }
    }
    return false;
}

bool HandleNor(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (nor)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                for (int k = j; k < listLength; k++)
                {
                    BitLine.Nor(lines[i], lines[j], lines[k],lines[listLength]);
                    if (Solve(lines,listLength+1, nand, false, xor, decoder, neededLine))
                    {
                        return true;
                    }

                }
            }
        }
    }
    return false;
}

bool HandleDecoder(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (decoder)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                for (int k = j; k < listLength; k++)
                {
                    BitLine.Decoder(lines[i], lines[j], lines[k],lines,listLength);
                    if (Solve(lines,listLength+8, nand, nor, xor, false, neededLine))
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}

और यह वह है, हम इस फ़ंक्शन को केवल उस आवश्यक पंक्ति के साथ कहते हैं जिसे हम ढूंढ रहे हैं, और यह विद्युत भागों के हर संभव संयोजन की जांच करता है कि क्या उन्हें इस तरह से संयोजित करना संभव है कि अंत में एक ही लाइन होगी आवश्यक मूल्यों के साथ उत्पादन किया।

* ध्यान दें कि मैं हर समय एक ही सूची का उपयोग करता हूं, इसलिए मुझे हर समय नए बिटलाइन इंस्टेंस बनाने की आवश्यकता नहीं होगी। मैं इसे उस कारण से 200 का बफर देता हूं।


यह पूरा कार्यक्रम है:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    public class BitLine
    {
        public bool[] IsActiveWhenInputIs = new bool[16];

        public static void Xor(BitLine b1, BitLine b2, BitLine outputBitLine)
        {
            for (var i = 0; i < 16; i++)
            {
                outputBitLine.IsActiveWhenInputIs[i] = b1.IsActiveWhenInputIs[i] != b2.IsActiveWhenInputIs[i];
            }
        }

        public static void Nand(BitLine b1, BitLine b2, BitLine outputBitLine)
        {
            for (var i = 0; i < 16; i++)
            {
                outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] && b2.IsActiveWhenInputIs[i]);
            }
        }

        public static void Nor(BitLine b1, BitLine b2, BitLine b3, BitLine outputBitLine)
        {
            for (var i = 0; i < 16; i++)
            {
                outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] || b2.IsActiveWhenInputIs[i] || b3.IsActiveWhenInputIs[i]);
            }
        }

        public static void Decoder(BitLine b1, BitLine b2, BitLine b3, List<BitLine> lines, int listOriginalLength)
        {
            for (int optionNumber = 0; optionNumber < 8; optionNumber++)
            {
                for (var i = 0; i < 16; i++)
                {
                    int sum = 0;
                    if (b1.IsActiveWhenInputIs[i]) sum += 4;
                    if (b2.IsActiveWhenInputIs[i]) sum += 2;
                    if (b3.IsActiveWhenInputIs[i]) sum += 1;

                    lines[listOriginalLength + optionNumber].IsActiveWhenInputIs[i] = (sum == optionNumber);
                }
            }
        }

        public bool CheckEquals(BitLine other)
        {
            for (var i = 0; i < 16; i++)
            {
                if (this.IsActiveWhenInputIs[i] != other.IsActiveWhenInputIs[i])
                {
                    return false;
                }
            }
            return true;
        }

    }

    public class Solver
    {
        bool CheckIfSolutionExist(List<BitLine> lines, int linesLength, BitLine neededLine)
        {
            for (int i = 0; i < linesLength; i++)
            {
                if (lines[i].CheckEquals(neededLine))
                {
                    return true;
                }

            }
            return false;
        }

        bool HandleNand(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (nand)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        BitLine.Nand(lines[i], lines[j], lines[listLength]);
                        if (Solve(lines, listLength + 1, false, nor, xor, decoder, neededLine))
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }

        bool HandleXor(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (xor)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        BitLine.Xor(lines[i], lines[j], lines[listLength]);
                        if (Solve(lines, listLength + 1, nand, nor, false, decoder, neededLine))
                        {
                            return true;
                        }

                    }
                }
            }
            return false;
        }

        bool HandleNor(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (nor)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        for (int k = j; k < listLength; k++)
                        {
                            BitLine.Nor(lines[i], lines[j], lines[k], lines[listLength]);
                            if (Solve(lines, listLength + 1, nand, false, xor, decoder, neededLine))
                            {
                                return true;
                            }

                        }
                    }
                }
            }
            return false;
        }

        bool HandleDecoder(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (decoder)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        for (int k = j; k < listLength; k++)
                        {
                            BitLine.Decoder(lines[i], lines[j], lines[k], lines, listLength);
                            if (Solve(lines, listLength + 8, nand, nor, xor, false, neededLine))
                            {
                                return true;
                            }
                        }
                    }
                }
            }
            return false;
        }

        public bool Solve(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if ((!nand) && (!nor) && (!xor) && (!decoder))
            {
                return CheckIfSolutionExist(lines, listLength, neededLine);
            }
            else
            {
                if (HandleNand(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                if (HandleNor(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                if (HandleXor(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                if (HandleDecoder(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                return false;
            }
        }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            List<BitLine> list = new List<BitLine>();
            var bitLineList = new BitLine[200];
            for (int i = 0; i < 200; i++) bitLineList[i] = new BitLine();

            // set input bit:
            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    int checker = 1 << j;
                    bitLineList[j].IsActiveWhenInputIs[i] = ((checker & i) != 0);
                }
            }

            // set zero and one constant bits:
            for (int i = 0; i < 16; i++)
            {
                bitLineList[4].IsActiveWhenInputIs[i] = false;
                bitLineList[5].IsActiveWhenInputIs[i] = true;
            }

            list.AddRange(bitLineList);

            var neededBitLine = new BitLine();
            for (int i = 0; i < 16; i++)
            {
                neededBitLine.IsActiveWhenInputIs[i] = (i%7==0); // be true for any number that is devideble by 7 (0,7,14)
            }

            var solver = new Solver();
            Console.WriteLine(solver.Solve(list, 6, true, true, true, true, neededBitLine));
            Console.ReadKey();
        }
    }
}

आशा है कि इस बार यह एक मान्य स्पष्टीकरण है: पी


6
आप इस प्रकार का एक उच्च-स्तरीय विवरण शामिल करना चाह सकते हैं कि इस प्रकार का सॉल्वर कैसे काम करता है। यह पूरी तरह से अनियोजित कोड डंप पढ़ने से तुरंत स्पष्ट नहीं है।
डेव ट्वीड

2
यह एक पेचीदा समाधान है और मुझे आशा है कि आप एल्गोरिथ्म का वर्णन प्रदान कर सकते हैं। क्या आपने विधि को सिद्ध करने के लिए इसी तरह के परीक्षण के मामले किए हैं (BTW, मुझे सूक्ष्म डगलस एडम्स संदर्भ पसंद है)
Tut

2
मैं जोड़ूंगा कि मैंने इस एल्गोरिथम को कुछ परीक्षण के मामले में आज़माया था जो मैं देख सकता था: x == 2, x == 3, x == 4, ..., x == 11। चूँकि मुझे चलाने में लंबा समय लगता है इसलिए मैंने देखा कि x% 3 == 0 और x% 5 == 0 भी असंभव हो सकता है, और मुझे उन दोनों का उत्तर नहीं मिला। लेकिन एल्गोरिथ्म उपरोक्त सभी मामलों के लिए सही लौटा जिसके लिए मुझे हाथ से एक समाधान मिला।
केसलर

3
+1! @IdoKessler क्या आप 2-बिट इनपुट NOR के साथ 2-बिट इनपुट NAND को बदलने का प्रयास कर सकते हैं, और जाँच कर सकते हैं कि क्या आपका सॉफ़्टवेयर कोई समाधान देता है? वास्तव में, उस गेट के साथ, एक नंद के बजाय, एक समाधान है।
अगली बार

3
@ अगली-हैक यह सच है जब मैंने इसे 2-बिट NOR
केसलर

8

यह एक गैर-उत्तर है, सबसे स्पष्ट समाधान को त्यागने के लिए।

1248

24

( {एक्स=0,एक्स=3,एक्स=6}) नंद (2 XOR 4)

148

हालाँकि, पिछली अभिव्यक्ति का सरलीकरण है:

(एक्स=0 या एक्स=3 या एक्स=6) या (2=4)

यह अपेक्षित नहीं है:

(एक्स=0 या एक्स=3 या एक्स=6) तथा (2=4)

इस कारण से, मुझे लगता है कि प्रश्न में एक त्रुटि है, "नंद" गेट ए और न ही "एक"।


2
शायद यह सच है, मुझे इसका जवाब नहीं मिला।
nrofis

2
+1। मेरा मानना ​​है कि आप सही हैं, और NAND को NOR होना चाहिए।
ब्रायन ड्रमंड

2

आपके प्रश्न का एक मान्य उत्तर हमेशा सही होने वाला कोई भी सर्किट होगा। क्योंकि यह सच है अगर इनपुट नंबर 0,7, या 14 हैं।

मुझे लगता है कि प्रश्न को स्पष्ट रूप से एक सर्किट के लिए पूछना चाहिए जो कि इनपुट संख्या 0,7, या 14. सही है और यदि वह गलत है, तो यह सही है।


2
वाह, मुझे ऐसे उत्तर की उम्मीद नहीं थी। यदि सर्किट 0, 7 या 14 ...
nrofis

1
बिल्कुल वैसा ही।
अगस्टिन तेना

2
चश्मे को ध्यान से देखने के लिए +1। यह खराब इंजीनियरिंग है जब किसी ग्राहक से इस तरह की कल्पना की जाती है। उस मामले में, सही उत्तर ग्राहक को युक्ति के साथ समस्या को इंगित करना और सत्यापित करना है कि वे वास्तव में क्या चाहते हैं। लेकिन, एक परीक्षा प्रश्न के लिए यह बॉक्स से बाहर सोच को दर्शाता है, और यह सही ढंग से एक बहुत ही सरल उत्तर प्रदान करता है।
ओलिन लेथ्रोप

-3

यह करने योग्य है। एक संकेत के रूप में मध्य दो बिट्स इन सभी बिट पैटर्न के लिए समान हैं, इसलिए उन्हें xoring करने से 0 का उत्पादन होगा जो तब अन्य दो बिट्स के साथ डिकोडर के लिए एक इनपुट हो सकता है। शेष गेट्स को सही एकल बिट आउटपुट प्रदान करने के लिए तीन डिकोडर आउटपुट पर लागू किया जाता है।


पहले ही हो चुका है। मुझे ऐसा कोई भी संयोजन नहीं मिला जो सवाल हल करता हो ...
nrofis

डिकोडर के लिए चार बिट्स को तीन बिट्स तक कम करने के लिए एक्सोर का उपयोग करें। डिकोडर में तीन आउटपुट होंगे जो तीन मिलान पैटर्न के लिए 1 हैं। न ही उन्हें एक साथ और एक इन्वर्टर के रूप में नंद गेट का उपयोग करें।
जॉन

4
@ जॉन ... आपका समाधान 6 उत्पाद शर्तों (असूचीबद्ध) देता है, जिनमें से 3 अमान्य हैं। दूसरे शब्दों में, यद्यपि आपका समाधान 0, 7 या 14 के लिए सही है; यह भी के लिए 1, 6 या 8 सच रिटर्न
टुट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.