Skip to content

Demonrux/NumConverter

Repository files navigation

Конвертер систем счисления

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

Проект представляет собой конвертер систем счисления с графическим интерфейсом, позволяющий преобразовывать числа между различными системами счисления (от 2 до 36). Приложение поддерживает работу с дополнительным кодом для отрицательных чисел и предоставляет удобный интерфейс для копирования результатов.

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

Основные возможности:

  • Конвертация чисел между системами счисления от 2 до 36
  • Поддержка дополнительного кода для работы с отрицательными числами
  • Валидация ввода - проверка корректности введенных данных
  • Копирование результатов в буфер обмена
  • Обмен системами счисления между исходной и целевой
  • Очистка полей ввода/вывода

Поддерживаемые системы счисления:

  • Двоичная (2)
  • Восьмеричная (8)
  • Десятичная (10)
  • Шестнадцатеричная (16)
  • И другие системы от 2 до 36

Структура проекта

OP_lab1/
├── core/ # Основные модули
│ ├── appcontext.h # Структура контекста приложения
│ ├── entrypoint.h/cpp # Точка входа операций
│ └── logic.h/cpp # Бизнес-логика конвертации
├── ui/ # Пользовательский интерфейс
│ ├── mainwindow.h/cpp # Главное окно
│ └── mainwindow.ui # Qt Designer форма
├── OP_lab1.pro # Файл проекта qmake
└── main.cpp # Точка входа приложения

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

Структура AppContext:

struct AppContext {
    long value = DEFAULT_VALUE;
    short inputStatus = ONLINE;
    short addStatus = OFLINE;
    unsigned currentBase = DEFAULT_BASE;
    unsigned toBase = DEFAULT_BASE;
    char result[LEN] = DEFAULT_STR;
    char inputStr[LEN] = DEFAULT_STR;
    char saveInBufStr[LEN] = DEFAULT_STR;
};

Операции конвертера:

enum Operation {
    Convert,           // Основная конвертация
    Save,              // Сохранение в буфер
    Initialization,    // Инициализация
    Validation,        // Валидация ввода
    Swap,              // Обмен системами
    ConvertAddCode,    // Конвертация с доп. кодом
    ChekingAddCode     // Проверка доп. кода
};

Интерфейс:

image

Алгоритмы конвертации:

Обычная конвертация:

  • Используется стандартная функция strtol()
  • Поддерживает числа в любой системе счисления
  • Автоматическое определение знака числа

Конвертация с дополнительным кодом:

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

Валидация ввода:

  • Проверка символов на соответствие алфавиту системы счисления
  • Контроль переполнения числовых типов
  • Проверка длины входной строки

Пример работы:

Ввод:       "255"
Из:         10 (десятичная)
В:          16 (шестнадцатеричная)
Результат:  "ff"

Особенности реализации:

Безопасность:

  • Проверка границ буферов
  • Обработка ошибок ввода
  • Защита от переполнения

Производительность:

  • Оптимизированные алгоритмы конвертации
  • Минимальное копирование данных
  • Эффективное использование памяти

Совместимость:

  • Поддержка Windows API для буфера обмена
  • Кроссплатформенная основа Qt
  • Стандартные библиотеки C++

Технические ограничения:

Буферы:

  • Максимальная длина чисел: 32 символа
  • Поддержка систем счисления: 2-36
  • Алфавит: "0123456789abcdefghijklmnopqrstuvwxyz"

Числовые типы:

  • long для основных вычислений
  • long long для проверки переполнения
  • Беззнаковые типы для дополнительного кода

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

Требования:

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

Сборка:

qmake OP_lab1.pro
make
./OP_lab1

Примеры конвертации

Обычные числа:

10 → 2:    "1010"
10 → 16:   "a"
255 → 16:  "ff"
-10 → 2:   "11111111111111111111111111110110"

Дополнительный код:

Двоичный доп. код: "11111111111111111111111111110110" → -10
Шестнадцатеричный: "fffffff6" → -10

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

Приложение обрабатывает:

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors