2016-05-20 7 views
0

私はC++のロジックシミュレータを開発中です。それはコンピュータ工学コースのプロジェクトです。このシミュレータは、回路記述と入力パターンという2つの入力ファイルを受け取ります。回路記述には、入力と出力の数とゲートが含まれます。 AND2 I1、I2、N1 //は、2つの入力とノードN1を出力とするANDゲートです。 構造体やリストを実装すると思いますが、すべてのノードをどのように接続するか、出力(または出力)を評価する関数を書く方法はわかりません。論理シミュレータリスト実装のC++

+1

グラフ理論は読みやすい良い主題のようです。 –

+0

今まで行ってきたことを私たちに見せてください –

+0

@JoachimPileborg私たちは理論的にリストを完成させたので、このプロジェクトではグラフ理論を使うことはできません。 – user46

答えて

0

入力を持ち、出力を生成するクラスとしてゲートをモデル化することができます。例:

class Gate 
{ 
public: 
    virtual ~Gate() {} 
    virtual bool read() = 0; 
}; 

class AndGate : public Gate 
{ 
private: 
    Gate *m_Input1; 
    Gate *m_Input2; 

public: 
    AndGate(Gate *input1, Gate *input2) : m_Input1(input1), m_Input2(input2) 
    { 
    } 

    bool read() override 
    { 
     return m_Input1->read() & m_Input2->read(); 
    } 
}; 

class OrGate : public Gate 
{ 
private: 
    Gate *m_Input1; 
    Gate *m_Input2; 

public: 
    OrGate(Gate *input1, Gate *input2) : m_Input1(input1), m_Input2(input2) 
    { 
    } 

    bool read() override 
    { 
     return m_Input1->read() | m_Input2->read(); 
    } 
}; 


class NotGate : public Gate 
{ 
private: 
    Gate *m_Input; 

public: 
    NotGate(Gate *input) : m_Input(input) 
    { 
    } 

    bool read() override 
    { 
     return !m_Input->read(); 
    } 
}; 

class ConstantLine : public Gate 
{ 
private: 
    bool m_State; 

public: 
    ConstantLine(bool state) : m_State(state) 
    { 
    } 

    bool read() override 
    { 
     return m_State; 
    } 
}; 

これは基本的にグラフネットワークを提供します。これで、ゲート同士を接続することができます。あなたの解決策では

ConstantLine x(true); 
ConstantLine y(false); 
ConstantLine z(true); 

NotGate notGate(&z); 
OrGate orGate(&x, &y); 
AndGate andGate(&orGate, &notGate); 

bool result = andGate.read(); 

あなたが動的にゲートを作成することがありますので、代わりに生のポインタを使用してのあなたが入力を管理するために、このようなstd::shared_pointer<Gate>として、スマートポインタを使用する必要があります:あなたはどうなる((X | Y) & !Z)計算するために、たとえば、ゲート。

+0

答えをありがとう。このソリューションでは、私は回路のモデルを作成し、入力ファイルを読み込んだ後に値をロードできますか?入力ファイルが非常に大きくなる可能性があるので、私はconstantLineのベクトル(この場合)を使用してそれらを格納することはできません。 – user46

+0

@ user46 - ファイルがどのようにゲートを指定するかによって、多くのことが決まります。あなたが組み立てるゲートのグラフが十分かもしれないので、ゲートを格納するためのベクターやリストは必要ないかもしれません。 – Sean

+0

ありがとうありがとう – user46