Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@

/*

!*.cpp
!*.h
!*.hpp
!*.vcxproj
!*.vcxproj.filters
!*.sln
!*.dll
!CMakeLists.txt
!README.md
!.gitignore

!plugins/
!/plugins/**
!calculator/
!/calculator/**

# Visual Studio
.vs/
*.vcxproj.user
*.suo
*.user
*.userosscache
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Build results
Debug/
Release/
x64/
x86/
*.obj
*.exe
*.pdb
*.idb
*.ilk
*.log

# CMake
CMakeFiles/
CMakeCache.txt
cmake_install.cmake
Makefile

# Temporary files
*.tmp
*.log
*.tlog
*.ipch
*.aps
*.ncb
*.opensdf

# Misc
*.lib
*.exp
*.manifest
*.opendb
*.ipdb
49 changes: 47 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,47 @@
# Lab_C_plus
Лабораторные работы по C++
# Калькулятор с системой плагинов

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

## Возможности

- **Базовые операции**: +, -, *, /, ^, ()
- **Динамическая система плагинов**: Загрузка математических функций из DLL во время выполнения
- **Расширяемая архитектура**: Добавление новых функций без перекомпиляции основного приложения
- **Обработка ошибок**
## Доступные функции

### Базовые функции
- `sqrt` - Квадратный корень
- `log` - Десятичный логарифм (основание 10)
- `ln` - Натуральный логарифм (основание e)
- `abs` - Модуль числа

### Тригонометрические функции (градусы)
- `sin` - Синус
- `cos` - Косинус
- `tan` - Тангенс
- `ctg` - Котангенс

## Ввод выражения
Введите выражение с пробелами между функциями/числами (отрицательными и положительными) и операторами

Пример:

Enter expression :
> 3 + 2 * sin(45) - abs(-4) * ln(2)
= 1.64162484013331

## Выход из приложения
Введите `exit` для выхода из калькулятора.

# Создание и сборка проекта
Удалите папку build (в репозитории, так как требовалось в него добавлять файлы: .dll, .cpp, .h, .vcxproj, .vcxproj.filters, .sln.)
mkdir build
cd build
cmake ..
cmake --build . --config Release

# Запуск приложения
Calculator.exe (будет находиться в calculator\build\Release)


31 changes: 31 additions & 0 deletions calculator.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35818.85 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calculator", "calculator\calculator.vcxproj", "{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Debug|x64.ActiveCfg = Debug|x64
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Debug|x64.Build.0 = Debug|x64
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Debug|x86.ActiveCfg = Debug|Win32
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Debug|x86.Build.0 = Debug|Win32
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Release|x64.ActiveCfg = Release|x64
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Release|x64.Build.0 = Release|x64
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Release|x86.ActiveCfg = Release|Win32
{09864CFE-2C9F-4DD9-801B-DDA96ADEB7F3}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5CFB7981-7B25-4993-9FFD-F1ADDC7EA13E}
EndGlobalSection
EndGlobal
56 changes: 56 additions & 0 deletions calculator/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
cmake_minimum_required(VERSION 3.15)
project(Calculator)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

add_executable(Calculator main.cpp Calculator.cpp Plugin.cpp)

function(add_plugin name)
add_library(${name} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/plugins/${name}.cpp)
target_include_directories(${name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
endfunction()

add_plugin(funcabs)
add_plugin(funccos)
add_plugin(funcctg)
add_plugin(funcln)
add_plugin(funclog)
add_plugin(funcsin)
add_plugin(funcsqrt)
add_plugin(functan)

if(WIN32)
set_target_properties(Calculator PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)

foreach(plugin IN ITEMS funcabs funccos funcctg funcln funclog funcsin funcsqrt functan)
set_target_properties(${plugin} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)
endforeach()
endif()

add_custom_command(TARGET Calculator POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/plugins"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funcabs>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funccos>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funcctg>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funcln>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funclog>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funcsin>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:funcsqrt>" "${CMAKE_BINARY_DIR}/plugins/"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:functan>" "${CMAKE_BINARY_DIR}/plugins/"
COMMENT "Creating plugins directory and copying DLLs"
)
Loading