Advertisement
Korotkodul

logic_scheme_comment

Mar 5th, 2025
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.63 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.    
  30.     void draw() override {
  31.         fl_color(FL_BLACK); // Устанавливаем цвет рисования в черный
  32.         fl_rectf(x, y, 40, 40); // Рисуем прямоугольник размером 40x40
  33.         fl_color(FL_WHITE); // Устанавливаем цвет для текста
  34.         fl_draw("AND", x + 10, y + 25); // Выводим надпись внутри элемента
  35.     }
  36.    
  37.     bool compute(bool a, bool b) override { return value = a && b; } // Вычисляем логическое И
  38. };
  39.  
  40. // Логический элемент OR
  41. class OrGate : public LogicGate {
  42. public:
  43.     OrGate(int x, int y) : LogicGate(x, y, "OR") {} // Вызываем конструктор базового класса
  44.    
  45.     void draw() override {
  46.         fl_color(FL_BLACK);
  47.         fl_rectf(x, y, 40, 40);
  48.         fl_color(FL_WHITE);
  49.         fl_draw("OR", x + 10, y + 25);
  50.     }
  51.    
  52.     bool compute(bool a, bool b) override { return value = a || b; } // Вычисляем логическое ИЛИ
  53. };
  54.  
  55. // Логический элемент NOT
  56. class NotGate : public LogicGate {
  57. public:
  58.     NotGate(int x, int y) : LogicGate(x, y, "NOT") {} // Вызываем конструктор базового класса
  59.    
  60.     void draw() override {
  61.         fl_color(FL_BLACK);
  62.         fl_rectf(x, y, 40, 40);
  63.         fl_color(FL_WHITE);
  64.         fl_draw("NOT", x + 5, y + 25);
  65.     }
  66.    
  67.     bool compute(bool a, bool) override { return value = !a; } // Вычисляем логическое НЕ (второй аргумент игнорируется)
  68. };
  69.  
  70. // Основной класс окна, в котором будет отображаться схема
  71. class LogicCircuitWindow : public Fl_Window {
  72. private:
  73.     std::vector<LogicGate*> gates; // Вектор для хранения всех логических элементов
  74. public:
  75.     LogicCircuitWindow(int w, int h, const char* title) : Fl_Window(w, h, title) {
  76.         // Создаем логические элементы и добавляем их в вектор
  77.         gates.push_back(new AndGate(50, 50));
  78.         gates.push_back(new OrGate(150, 50));
  79.         gates.push_back(new NotGate(250, 50));
  80.     }
  81.  
  82.     // Метод для отрисовки окна и всех элементов внутри него
  83.     void draw() override {
  84.         Fl_Window::draw(); // Вызываем базовый метод отрисовки окна
  85.         for (auto gate : gates) {
  86.             gate->draw(); // Рисуем каждый логический элемент
  87.         }
  88.     }
  89. };
  90.  
  91. int main() {
  92.     LogicCircuitWindow win(400, 300, "Логическая схема"); // Создаем окно 400x300 пикселей
  93.     win.show(); // Отображаем окно
  94.     return Fl::run(); // Запускаем главный цикл программы
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement