Advertisement
Korotkodul

logic_scheme

Mar 5th, 2025
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <FL/Fl.H>
  2. #include <FL/Fl_Window.H>
  3. #include <FL/Fl_Button.H>
  4. #include <FL/Fl_Input.H>
  5. #include <FL/fl_draw.H>
  6. #include <vector>
  7. #include <string>
  8. #include <map>
  9.  
  10. // Определяем класс логического элемента
  11. class LogicGate {
  12. public:
  13.     int x, y; // Координаты
  14.     std::string type; // Тип элемента (AND, OR, NOT)
  15.     bool value; // Значение на выходе
  16.  
  17.     LogicGate(int x_, int y_, std::string type_) : x(x_), y(y_), type(type_), value(false) {}
  18.     virtual void draw() = 0;
  19.     virtual bool compute(bool a, bool b = false) = 0;
  20. };
  21.  
  22. // Логический элемент AND
  23. class AndGate : public LogicGate {
  24. public:
  25.     AndGate(int x, int y) : LogicGate(x, y, "AND") {}
  26.     void draw() override {
  27.         fl_color(FL_BLACK);
  28.         fl_rectf(x, y, 40, 40);
  29.         fl_color(FL_WHITE);
  30.         fl_draw("AND", x + 10, y + 25);
  31.     }
  32.     bool compute(bool a, bool b) override { return value = a && b; }
  33. };
  34.  
  35. // Логический элемент OR
  36. class OrGate : public LogicGate {
  37. public:
  38.     OrGate(int x, int y) : LogicGate(x, y, "OR") {}
  39.     void draw() override {
  40.         fl_color(FL_BLACK);
  41.         fl_rectf(x, y, 40, 40);
  42.         fl_color(FL_WHITE);
  43.         fl_draw("OR", x + 10, y + 25);
  44.     }
  45.     bool compute(bool a, bool b) override { return value = a || b; }
  46. };
  47.  
  48. // Логический элемент NOT
  49. class NotGate : public LogicGate {
  50. public:
  51.     NotGate(int x, int y) : LogicGate(x, y, "NOT") {}
  52.     void draw() override {
  53.         fl_color(FL_BLACK);
  54.         fl_rectf(x, y, 40, 40);
  55.         fl_color(FL_WHITE);
  56.         fl_draw("NOT", x + 5, y + 25);
  57.     }
  58.     bool compute(bool a, bool) override { return value = !a; }
  59. };
  60.  
  61. // Основной класс окна схемы
  62. class LogicCircuitWindow : public Fl_Window {
  63. private:
  64.     std::vector<LogicGate*> gates;
  65. public:
  66.     LogicCircuitWindow(int w, int h, const char* title) : Fl_Window(w, h, title) {
  67.         gates.push_back(new AndGate(50, 50));
  68.         gates.push_back(new OrGate(150, 50));
  69.         gates.push_back(new NotGate(250, 50));
  70.     }
  71.  
  72.     void draw() override {
  73.         Fl_Window::draw();
  74.         for (auto gate : gates) {
  75.             gate->draw();
  76.         }
  77.     }
  78. };
  79.  
  80. int main() {
  81.     LogicCircuitWindow win(400, 300, "Логическая схема");
  82.     win.show();
  83.     return Fl::run();
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement