Данный проект является частью учебной программы Школы 21. В его рамках была реализована расширенная версия калькулятора на языке программирования Си с использованием структурного подхода. Помимо базовых арифметических операций, как плюс-минус и умножить-поделить, калькулятор имеет возможность вычисления арифметических выражений с учетом приоритетов, а так же некоторыми математическими функциями (синус, косинус, логарифм и т.д.). Помимо вычисления выражений калькулятор так же поддерживает использование переменной x и построение графика соответствующей функции. Также встроен кредитный и депозитные калькулятор. Проект написан с использованием паттерна MVC. Логика и графический интерфейс были разделены, все модули покрыты тестами. Для визуальной части проекта был использован фреймворк Qt.
Для установки вам потребуются следующие утилиты gcc
, make
и qmake
-
install
Устанавливает калькулятор в папку build и на рабочий стол -
uninstall
Удаляет калькулятор -
dvi
Открывает документацию по проекту -
dist
Генерирует дистрибутив.tgz
с исполняемым файлом и необходимой документацией -
test
Запуск тестирования модулей калькулятора и его контроллера. Отчет можно посмотреть в папке /tests/logs -
gcov_report
Генерирует html отчет с отображением покрытия всех функций тестами -
valgrind_check
Инициализирует проверку проекта valgrind, после этого создаются лог файлы с отчетами
Вся логика программы (модель) и графический интерфейс были разделены и связаны через smart_calc_controller.
Модель является независимой и каждый ее модуль покрыт тестами.
-
Программа должна быть разработана на языке Си стандарта 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):
- Вход: сумма вклада, срок размещения, процентная ставка, налоговая ставка, периодичность выплат, капитализация процентов, список пополнений, список частичных снятий
- Выход: начисленные проценты, сумма налога, сумма на вкладе к концу срока