Skip to content

Latest commit

 

History

History
126 lines (89 loc) · 11.8 KB

README_RUS.md

File metadata and controls

126 lines (89 loc) · 11.8 KB

SmartCalc v1.0

Данный проект является частью учебной программы Школы 21. В его рамках была реализована расширенная версия калькулятора на языке программирования Си с использованием структурного подхода. Помимо базовых арифметических операций, как плюс-минус и умножить-поделить, калькулятор имеет возможность вычисления арифметических выражений с учетом приоритетов, а так же некоторыми математическими функциями (синус, косинус, логарифм и т.д.). Помимо вычисления выражений калькулятор так же поддерживает использование переменной x и построение графика соответствующей функции. Также встроен кредитный и депозитные калькулятор. Проект написан с использованием паттерна MVC. Логика и графический интерфейс были разделены, все модули покрыты тестами. Для визуальной части проекта был использован фреймворк Qt.

SmartCalc

Содержание

  1. Установка и команды
  2. Обзор калькулятора
  3. MVC модель
  4. Тесты
  5. Техническое задание

Установка

Для установки вам потребуются следующие утилиты gcc, make и qmake

Makefile цели:
  • install
    Устанавливает калькулятор в папку build и на рабочий стол

  • uninstall
    Удаляет калькулятор

  • dvi
    Открывает документацию по проекту

  • dist
    Генерирует дистрибутив .tgz с исполняемым файлом и необходимой документацией

  • test
    Запуск тестирования модулей калькулятора и его контроллера. Отчет можно посмотреть в папке /tests/logs

  • gcov_report
    Генерирует html отчет с отображением покрытия всех функций тестами

  • valgrind_check
    Инициализирует проверку проекта valgrind, после этого создаются лог файлы с отчетами

Обзор калькулятора

SmartCalc

MVC модель

Вся логика программы (модель) и графический интерфейс были разделены и связаны через smart_calc_controller.
Модель является независимой и каждый ее модуль покрыт тестами.

SmartCalc

Тесты

  • Тесты были написаны с использованием библиотеки check // отчет о покрытии при помощи LCOV

SmartCalc

Техническое задание

  • Программа должна быть разработана на языке Си стандарта C11 с использованием компилятора gcc. Допустимо использование дополнительных библиотек и модулей QT

  • Код программы должен находиться в папке src

  • Сборка программы должна быть настроена с помощью Makefile со стандартным набором целей для GNU-программ: all, install, uninstall, clean, dvi, dist, test, gcov_report. Установка должна вестись в любой другой произвольный каталог

  • Программа должна быть разработана в соответствии с принципами структурного программирования

  • При написании кода необходимо придерживаться Google Style

  • Должно быть обеспечено покрытие unit-тестами модулей, связанных с вычислением выражений, с помощью библиотеки Check

  • Реализация с графическим пользовательским интерфейсом, на базе любой GUI-библиотеки с API для C89/C99/C11
    Для Linix: GTK+, CEF, Qt
    Для Mac: GTK+, Nuklear, raygui, microui, libagar, libui, IUP, LCUI, CEF, Qt

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

  • Вычисление должно производиться после полного ввода вычисляемого выражения и нажатия на символ =

  • Вычисление произвольных скобочных арифметических выражений в инфиксной нотации

  • Вычисление произвольных скобочных арифметических выражений в инфиксной нотации с подстановкой значения переменной x в виде числа

  • Построение графика функции, заданной с помощью выражения в инфиксной нотации с переменной x (с координатными осями, отметкой используемого масштаба и сеткой с адаптивным шагом)

    • Не требуется предоставлять пользователю возможность менять масштаб РЕАЛИЗОВАНО
  • Область определения и область значения функций ограничиваются по крайней мере числами от -1000000 до 1000000

    • Для построения графиков функции необходимо дополнительно указывать отображаемые область определения и область значения
  • Проверяемая точность дробной части - минимум 7 знаков после запятой

  • У пользователя должна быть возможность ввода до 255 символов

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

    • Арифметические операторы:

      Название оператора Инфиксная нотация
      (Классическая)
      Префиксная нотация
      (Польская нотация)
      Постфиксная нотация
      (Обратная польская нотация)
      Скобки (a + b) (+ a b) a b +
      Сложение a + b + a b a b +
      Вычитание a - b - a b a b -
      Умножение a * b * a b a b *
      Деление a / b / a b a b \
      Возведение в степень a ^ b ^ a b a b ^
      Остаток от деления a mod b mod a b a b mod
      Унарный плюс +a +a a+
      Унарный минус -a -a a-

      Обратите внимание, что оператор умножения содержит обязательный знак *. Обработка выражения с опущенным знаком * является необязательной и остается на усмотрение разработчика

    • Функции:

      Описание функции Функция
      Вычисляет косинус cos(x)
      Вычисляет синус sin(x)
      Вычисляет тангенс tan(x)
      Вычисляет арккосинус acos(x)
      Вычисляет арксинус asin(x)
      Вычисляет арктангенс atan(x)
      Вычисляет квадратный корень sqrt(x)
      Вычисляет натуральный логарифм ln(x)
      Вычисляет десятичный логарифм log(x)

Дополнительно. Кредитный калькулятор

Предусмотреть специальный режим "кредитный калькулятор" (за образец можно взять сайты banki.ru и calcus.ru):

  • Вход: общая сумма кредита, срок, процентная ставка, тип (аннуитетный, дифференцированный)
  • Выход: ежемесячный платеж, переплата по кредиту, общая выплата

Дополнительно. Депозитный калькулятор

Предусмотреть специальный режим "калькулятор доходности вкладов" (за образец можно взять сайты banki.ru и calcus.ru):

  • Вход: сумма вклада, срок размещения, процентная ставка, налоговая ставка, периодичность выплат, капитализация процентов, список пополнений, список частичных снятий
  • Выход: начисленные проценты, сумма налога, сумма на вкладе к концу срока