Advertisement
Korotkodul

boolean_function

Mar 5th, 2025 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.89 KB | None | 0 0
  1. #include <FL/Fl.H> // Подключаем основной заголовочный файл FLTK
  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.     // Конструктор класса, инициализирует координаты и тип элемента
  18.     LogicGate(int x_, int y_, std::string type_) : x(x_), y(y_), type(type_), value(false) {}
  19.    
  20.     // Виртуальные методы, которые будут реализованы в производных классах
  21.     virtual void draw() = 0; // Отрисовка элемента
  22.     virtual bool compute(bool a, bool b = false) = 0; // Логическая операция
  23. };
  24.  
  25. // Логический элемент AND
  26. class AndGate : public LogicGate {
  27. public:
  28.     AndGate(int x, int y) : LogicGate(x, y, "AND") {}
  29.     void draw() override {
  30.         fl_color(FL_BLACK);
  31.         fl_rectf(x, y, 40, 40);
  32.         fl_color(FL_WHITE);
  33.         fl_draw("AND", x + 10, y + 25);
  34.     }
  35.     bool compute(bool a, bool b) override { return value = a && b; }
  36. };
  37.  
  38. // Логический элемент OR
  39. class OrGate : public LogicGate {
  40. public:
  41.     OrGate(int x, int y) : LogicGate(x, y, "OR") {}
  42.     void draw() override {
  43.         fl_color(FL_BLACK);
  44.         fl_rectf(x, y, 40, 40);
  45.         fl_color(FL_WHITE);
  46.         fl_draw("OR", x + 10, y + 25);
  47.     }
  48.     bool compute(bool a, bool b) override { return value = a || b; }
  49. };
  50.  
  51. // Логический элемент NOT
  52. class NotGate : public LogicGate {
  53. public:
  54.     NotGate(int x, int y) : LogicGate(x, y, "NOT") {}
  55.     void draw() override {
  56.         fl_color(FL_BLACK);
  57.         fl_rectf(x, y, 40, 40);
  58.         fl_color(FL_WHITE);
  59.         fl_draw("NOT", x + 5, y + 25);
  60.     }
  61.     bool compute(bool a, bool) override { return value = !a; }
  62. };
  63.  
  64. // Основной класс окна, в котором будет отображаться схема
  65. class LogicCircuitWindow : public Fl_Window {
  66. private:
  67.     std::vector<LogicGate*> gates;
  68. public:
  69.     LogicCircuitWindow(int w, int h, const char* title) : Fl_Window(w, h, title) {
  70.         // Создаем логические элементы для выражения ((NOT x1) AND x2) OR x3
  71.         LogicGate* notGate = new NotGate(50, 50);  // NOT x1
  72.         LogicGate* andGate = new AndGate(150, 50); // (NOT x1) AND x2
  73.         LogicGate* orGate = new OrGate(250, 50);   // ((NOT x1) AND x2) OR x3
  74.  
  75.         gates.push_back(notGate);
  76.         gates.push_back(andGate);
  77.         gates.push_back(orGate);
  78.     }
  79.  
  80.     void draw() override {
  81.         Fl_Window::draw();
  82.         for (auto gate : gates) {
  83.             gate->draw();
  84.         }
  85.        
  86.         // Рисуем соединительные линии между элементами
  87.         fl_color(FL_BLACK);
  88.         fl_line(90, 70, 140, 70); // Линия от NOT к AND
  89.         fl_line(200, 70, 240, 70); // Линия от AND к OR
  90.     }
  91. };
  92.  
  93. int main() {
  94.     LogicCircuitWindow win(400, 300, "Логическая схема");
  95.     win.show();
  96.     return Fl::run();
  97. }
  98.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement