Skip to content

Demonrux/MathProcessor

Repository files navigation

markdown

Лабораторная работа №3: Калькулятор с графическим интерфейсом

Описание проекта

Проект представляет собой калькулятор с графическим интерфейсом, реализованный на C++ с использованием Qt. Калькулятор поддерживает основные арифметические операции, тригонометрические функции и специальные математические операции.

Диаграмма классов

calculatorwindow_8h__incl

Функциональность

Основные операции:

  • Арифметические операции: сложение, вычитание, умножение, деление
  • Скобки: поддержка приоритета операций с помощью скобок
  • Унарный минус: работа с отрицательными числами

Специальные функции:

  • Квадратный корень (√)
  • Обратное число (1/x)
  • Тригонометрические функции: sin, cos, tg, ctg

Интерфейс:

image
  • Графический интерфейс на Qt с современным дизайном
  • Подсветка ошибок с понятными сообщениями
  • Форматирование чисел с удалением лишних нулей

Полная структура проекта

OOP_lab3/
├── core/ # Основные классы ядра
│ ├── calculationerror.h
│ ├── calculator.h/cpp
│ ├── calculatorfacade.h/cpp
│ └── numberformatter.h/cpp
├── commands/ # Паттерн Command
│ ├── command.h
│ └── commands.h
├── ui/ # Пользовательский интерфейс
│ ├── calculatorwindow.h/cpp
│ └── calculatorwindow.ui
├── OOP_lab3.pro # Файл проекта qmake
└── main.cpp

Ключевые компоненты системы

Основные классы:

  • Calculator - ядро калькулятора с алгоритмом обработки выражений
  • CalculatorFacade - фасад для упрощенного взаимодействия с калькулятором
  • CalculationError - класс для обработки математических ошибок

Паттерн Command:

  • Command - абстрактный базовый класс команд
  • AppendCommand - добавление символов в выражение
  • CalculateCommand - вычисление выражения
  • ClearCommand - очистка дисплея
  • DeleteCommand - удаление последнего символа
  • Специальные команды: SquareRootCommand, ReciprocalCommand, SineCommand, CosineCommand, TangentCommand, CotangentCommand

Вспомогательные классы:

  • NumberFormatter - форматирование чисел для отображения
  • CalculatorWindow - главное окно приложения с интерфейсом

Математические возможности

Поддерживаемые операции:

  • Базовые: +, -, *, /
  • Унарный минус: -5, -(2+3)
  • Приоритет операций: * и / > + и -
  • Скобки: (2 + 3) * 4

Тригонометрические функции:

  • Синус: sin(x)
  • Косинус: cos(x)
  • Тангенс: tg(x)
  • Котангенс: ctg(x)

Специальные функции:

  • Квадратный корень: √x
  • Обратное число: 1/x

Обработка ошибок

Калькулятор обрабатывает следующие ошибки:

  • Деление на ноль
  • Квадратный корень из отрицательного числа
  • Неправильная последовательность операторов
  • Непарные скобки
  • Некорректный формат чисел
  • Неопределенные тригонометрические значения

Технические особенности

Алгоритм вычислений:

  • Использует алгоритм сортировочной станции (Shunting-yard)
  • Поддерживает унарные и бинарные операторы
  • Корректно обрабатывает приоритет операций

Форматирование чисел:

  • Автоматическое удаление лишних нулей после десятичной точки
  • Поддержка очень больших и очень малых чисел
  • Научная нотация для экстремальных значений

Интерфейс:

  • Современный дизайн с тенями и цветовым кодированием
  • Группировка кнопок по функциональности
  • Интуитивно понятное управление

Требования

  • C++17 или новее
  • Qt 5 или новее
  • Компилятор с поддержкой C++17

Сборка и запуск

Сборка с помощью qmake:

qmake OOP_lab3.pro
make
./OOP_lab3
Использование
Ввод чисел: Нажмите цифровые кнопки 0-9

Операции: Используйте кнопки +, -, *, /

Скобки: Для приоритета используйте ( и )

Функции: Нажмите соответствующую кнопку функции (√, 1/x, sin, etc.)

Вычисление: Нажмите = для получения результата

Очистка: C - полная очистка, ⌫ - удаление символа

Примеры выражений
Простое: 2 + 3 * 4 = 14

Со скобками: (2 + 3) * 4 = 20

С функциями: √16 + sin(0) = 4

Комплексное: (1/2) * √9 + cos(0) = 2.5

Архитектурные паттерны
Facade: CalculatorFacade предоставляет упрощенный интерфейс

Command: Каждое действие представлено объектом-командой

Exception Handling: Единая система обработки ошибок

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages