Robimy z kolegą projekt z programowania obiektowego, którego tematem jest: Stworzyć system klas służących do reprezentacji sieci logicznych, składających się z bramek AND, OR, NAND, NOR, XOR, NOT. Napisać program, który będzie wczytywał definicję sieci oraz wymuszenia, a następnie obliczał i wyprowadzał wynik oraz wyniki pośrednie. Napotkaliśmy kilka problemów:
-
nie wiemy jak to zrobić aby pobierało i zapisywało do pliku ten schemat sieci logicznych np A10 (czyt. na bramce A jeden jest sygnał 0) - ja próbowałem już strumieniami ale wychodzi kompletna klapa :(
-
nie wiemy jak zapisć operator logiczny w bramkach NOR(jednoczesne zaprzeczenie) i NAND(Zdanie utworzone za pomocą spójnika dysjunkcji jest fałszywe tylko wtedy, gdy prawdziwe są oba argumenty tego spójnika; w przeciwnym wypadku jest zawsze zdaniem prawdziwym.)
-
i tu najważniejszy problem, nie bardzo wiemy jak ma wyglądać wywołująca funkcja przelatująca po całym układzie i wypisująca na końcu wynik
jeżeli ktoś miałby chwilkę czasu to dzięki wielkie za ewentualną pomoc/sugestie :)
pozdrawiam
#include <iostream>
using namespace std;
// Klasa bazowa
class Sygnal
{
virtual bool wyjscie() = 0; // funkcja czysto wirtualna wiec klasa jest abstarakcyjna
};
class Bramka
{
int Sygnal *wejscie1, *wejscie2;
virtual void wyjscie();
};
class Jedynka
{
};
class Zero
{
};
class AND: public Sygnal
{
bool AND::wyjscie()
{
bool wynik;
wynik = wejscie1->wyjscie() && wejscie2->wyjscie();
return wynik;
}
};
class OR: public Sygnal
{
bool OR::wyjscie()
{
bool wynik;
wynik = wejscie1->wyjscie() || wejscie2->wyjscie();
return wynik;
}
};
class XOR: public Sygnal
{
bool XOR::wyjscie()
{
bool wynik;
wynik = wejscie1->wyjscie() ^ wejscie2->wyjscie();
return wynik;
}
};
class NOT: public Sygnal
{
bool NOT::wyjscie()
{
bool wynik;
wynik = wejscie1->wyjscie() ! wejscie2->wyjscie();
return wynik;
}
};
class NOR: public Sygnal
{
bool NOR::wyjscie()
{
bool wynik;
wynik = wejscie1->wyjscie() ! wejscie2->wyjscie();
return wynik;
}
};
class NAND: public Sygnal
{
bool NAND::wyjscie()
{
bool wynik;
wynik = wejscie1->wyjscie() && wejscie2->wyjscie();
return wynik;
}
};
// wydruk informcji z klasy bazowej
void Sygnal::printData(){
cout << "Wyjsciowy stan ukladu: " << stan << "\n";
}
return 0;
}