Graphic Calculator: FIDocalcus
Проект трёх первокурсников (по инженерному практикуму в первом семестре) по созданию графического калькулятора на FLTK C++
Loading...
Searching...
No Matches
function.h
Go to the documentation of this file.
1#pragma once
2
3// std libs
4#include <functional>
5#include <string>
6#include <vector>
7
8// utility
10
11namespace Math_func {
12
13/// @brief Математическая функция
14class function {
15 public:
16 function() = default;
17
18 /**
19 * @brief Инициализирует новый экземпляр function
20 * @param _func_str: строка, представляющая собой мат. функцию
21 */
22 function(std::string _func_str);
23
24 function(const function&);
25
26 ~function() = default;
27
28 // methods:
29
30 // TODO: избавиться от лямбд как от полей
31
32 /// @brief Значение мат. функции
33 const std::function<double(double)> calculate = [this](double x) {
34 return calc(x);
35 };
36
37 /**
38 * @brief: Значение мат. функции
39 * @param x
40 * @return double
41 */
42 inline double operator()(double x) const { return calc(x); }
43
44 /// @brief Значение производной мат. функции
45 const std::function<double(double)> differentiate = [this](double x) {
46 return (calc(x + Backend_consts::delta_x) -
49 };
50
51 // нету подходящего оператора для удобного получения производной :(
52
53 bool has_var() const;
54
55 /**
56 * @brief Возвращает значение мат. функции в виде строки
57 * @return std::string: строка
58 */
59 inline std::string get_func_str() const { return func_str; }
60
62
63 // ~methods:
64
65 private:
66 // vars:
67
68 /// @brief Мат. функция в виде строки
69 std::string func_str;
70
71 /// @brief Вектор лексем от мат. функции
72 std::vector<std::string> lexs;
73
74 /// @brief Вектор лексем, записанный в обратной польской нотации
75 std::vector<std::string> rev_pol;
76
77 // ~vars:
78
79 // methods:
80
81 /**
82 * @brief Проверяет мат. функцию в виде строки, на валидность
83 * @details Правильное кол-во скобок, отсутствие лишних символов, правильное
84 * использование знаков, точек, цифр)
85 * @throw std::invalid_argument: в том случае, если ввод инвалиден
86 */
87 void func_str_validation() const;
88
89 /**
90 * @brief Проверяет вектор лексем от мат. функции на валидность
91 * @details Правильное использование элементарной мат. функций (типа exp, sin,
92 * ln), отсутствие лишних переменных
93 * @throw std::invalid_argument: в том случае, если ввод инвалиден
94 */
95 void func_lexs_validation() const;
96
97 std::vector<std::string> lexemes() const;
98
99 std::vector<std::string> reverse_polish() const;
100
101 /**
102 * @brief Значение мат. функции
103 * @param x
104 * @return double
105 */
106 double calc(double x) const;
107
108 // ~methods:
109};
110
111} // namespace Math_func
Математическая функция
Definition function.h:14
std::string get_func_str() const
Возвращает значение мат. функции в виде строки
Definition function.h:59
void func_str_validation() const
Проверяет мат. функцию в виде строки, на валидность
Definition function_validation.cpp:21
std::vector< std::string > rev_pol
Вектор лексем, записанный в обратной польской нотации
Definition function.h:75
std::vector< std::string > reverse_polish() const
Definition function.cpp:116
const std::function< double(double)> differentiate
Значение производной мат. функции
Definition function.h:45
const std::function< double(double)> calculate
Значение мат. функции
Definition function.h:33
std::vector< std::string > lexemes() const
Definition function.cpp:40
std::string func_str
Мат. функция в виде строки
Definition function.h:69
bool has_var() const
Definition function.cpp:38
void func_lexs_validation() const
Проверяет вектор лексем от мат. функции на валидность
Definition function_validation.cpp:135
std::vector< std::string > lexs
Вектор лексем от мат. функции
Definition function.h:72
double calc(double x) const
Значение мат. функции
Definition function.cpp:223
double operator()(double x) const
: Значение мат. функции
Definition function.h:42
function & operator=(const function &)
Definition function.cpp:28
constexpr double delta_x
"Сколь угодно малое" приращение x
Definition constants.h:34
Definition expose_func_str.cpp:17