Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <FL/Fl.H>
- #include <FL/Fl_Window.H>
- #include <FL/Fl_Button.H>
- #include <FL/Fl_Input.H>
- #include <FL/fl_draw.H>
- #include <vector>
- #include <string>
- #include <map>
- // Определяем класс логического элемента
- class LogicGate {
- public:
- int x, y; // Координаты
- std::string type; // Тип элемента (AND, OR, NOT)
- bool value; // Значение на выходе
- LogicGate(int x_, int y_, std::string type_) : x(x_), y(y_), type(type_), value(false) {}
- virtual void draw() = 0;
- virtual bool compute(bool a, bool b = false) = 0;
- };
- // Логический элемент AND
- class AndGate : public LogicGate {
- public:
- AndGate(int x, int y) : LogicGate(x, y, "AND") {}
- void draw() override {
- fl_color(FL_BLACK);
- fl_rectf(x, y, 40, 40);
- fl_color(FL_WHITE);
- fl_draw("AND", x + 10, y + 25);
- }
- bool compute(bool a, bool b) override { return value = a && b; }
- };
- // Логический элемент OR
- class OrGate : public LogicGate {
- public:
- OrGate(int x, int y) : LogicGate(x, y, "OR") {}
- void draw() override {
- fl_color(FL_BLACK);
- fl_rectf(x, y, 40, 40);
- fl_color(FL_WHITE);
- fl_draw("OR", x + 10, y + 25);
- }
- bool compute(bool a, bool b) override { return value = a || b; }
- };
- // Логический элемент NOT
- class NotGate : public LogicGate {
- public:
- NotGate(int x, int y) : LogicGate(x, y, "NOT") {}
- void draw() override {
- fl_color(FL_BLACK);
- fl_rectf(x, y, 40, 40);
- fl_color(FL_WHITE);
- fl_draw("NOT", x + 5, y + 25);
- }
- bool compute(bool a, bool) override { return value = !a; }
- };
- // Основной класс окна схемы
- class LogicCircuitWindow : public Fl_Window {
- private:
- std::vector<LogicGate*> gates;
- public:
- LogicCircuitWindow(int w, int h, const char* title) : Fl_Window(w, h, title) {
- gates.push_back(new AndGate(50, 50));
- gates.push_back(new OrGate(150, 50));
- gates.push_back(new NotGate(250, 50));
- }
- void draw() override {
- Fl_Window::draw();
- for (auto gate : gates) {
- gate->draw();
- }
- }
- };
- int main() {
- LogicCircuitWindow win(400, 300, "Логическая схема");
- win.show();
- return Fl::run();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement