C++ Calculator.h

от автора

Доброго времени суток. Насколько тяжело создать, ну скажем, консольный калькулятор? Не тот, где пользователь вводит сначала первое число потом второе, а затем пишет что он с ними хочет сделать, а «боевой» калькулятор, где пользователь вводит формулу и получает ответ.

Ну вот я и решил создать заголовочный файл в котором будет основная функция, решающая формулы следующего содержания… формула может содержать неопределенное количество чисел, как положительных так и отрицательных, может работать со:

сложением(-);
вычитанием(+);
умножением(*);
делением(/);
возведением в ступень(^);
скобками( () );
квадратными корнями(√, ввести данный символ можно зажав ALT и набрав 251 на клавишах цифровой клавиатуры).

Также в пространстве имен Calculator есть функция нахождения факториала fact(N), которая поддерживает дробовые числа. Почему то я поленился добавить ее поддержку, ох уж эта прокрастинация. Да и вообще в пространстве имен Calculator есть много полезных и не очень функций.

Давайте же посмотрим насколько это просто… После добавления файлов в ваш проект (Я надеюсь вы умете добавлять заголовочные файлы в свой проект) мы пишем следующий код:

#include <iostream> #include "Calculator.h"  using namespace std;  int main() {     cout << calculator("2 + 2") << endl;     return 0; } 

Но согласитесь это на уровне «hello world!» давайте сделаем что-то более серьезное…

Вот наш следующий пример:

#include <iostream> #include <string> #include "Calculator.h"  using namespace std;  int main() {     string input;      while(true)     {         cout << ">";         getline(cin, input);         cout << ">";          results res = calculator(input);         if(res.error == true)             cout << "error" << endl;         else             cout << res.result << endl;     }      return 0; } 

Подобных заголовочных файлов я еще видел, но я подозреваю что они есть. Если кто знает — пишите будет интересно.

На мой взгляд получилось немного сыровато, можно добавить математические константы, поддержку нескольких операторов и функций. Также не помешали бы проверки входных формул на их корректность, хотя бы try catch. Пишите как бы вы хотели улучшить данный код, какие ошибки нашли, будем улучшать и исправлять.

Обратите внимание: на github есть файл readme в котором есть дополнительная информация.

Также хотел спросить: правильно ли я выражаюсь когда говорю «заголовочный файл», ведь весь код не только в заголовочном файле?

Прошу не ругать меня за мою неграмотность в файлах проекта. Сам знаю что нужно бы все проверить.

Ссылка на код


ссылка на оригинал статьи https://habr.com/ru/post/461701/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *