PS:
///----------------------------------------------------------------------------|
данный проект репроектился тут https://github.com/BDOTimer/Calculattor-2024.Apr
///----------------------------------------------------------------------------|
...
Итак, ... тик-так,
Цель: уменьшить время, которое я провожу фо флейме.
Напишу ка, я тут, обычный(хз, или необычный) калькулятор.
Сразу о том, что это будет за калькулятор,
он будет НЕ КНОПОЧНЫЙ, а СТРОЧНЫЙ.
на вход подаётся строка текста,
на выходе результат вычисления.
всё просто.
1.
да,
я видел калькулятор у страуструпа,
и чуть ранее писал свои,
и даже пару написал своих.
2.
хочу исправить тамошние недостатки, такие как, например,
- парсинг и вычисление в одной и той же процедуре кода.
- негодность для рисования графиков.
- неочевидная легкость(т.е. сложность) добавления новых операторов.
- ...
3.
В релизе,
собсно форма, на которой два контрола:
- Control ввода строки текта
- Control вывода(рисования) графика
- ...(контролы масштаба и тп..)
4.
не будет никакого дедлайна - т.е. я не буду торопиться.
но я по опыту(возможно кривому) уже знаю, что у меня тут есть только 15 страниц.
в эти 15 страниц я обязуюсь уложиться))
(тутошнюю верстку я обсуждать не буду)
5.
заявить, что я пишу этот журнал для тех кто изучает С++,
будет брехня, ибо С++ ради С++ меня ваще никогда не интересовал,
однако, возможно оно и будет кому то полезно, я не возражаю.
в общем то эти записи чисто ради моего личного фана,
поддержания тонуса, и ясного осознания моей социальной животности.
...
Итого,
конечный желаемый результат разделю на две части:
1.
Сам консольный калькулятор.
2.
Демо вариантов его использования.
Ссылки на инструменты:
версия для винды(то что буду юзать я):
1. Редактор кода: Code::Blocks
2. С++17 компилятор(i686-posix-dwarf-gcc-13.1.0-mingw-w64msvcrt-11).
Вместо хеллоуворлда:
///----------------------------------------------------------------------------| /// -std=c++17 /// Исходник в utf-8 ///----------------------------------------------------------------------------: #include <iostream> #include <string> ///----------------------------------------------------------------------------| /// Calculator. ///----------------------------------------------------------------------------: namespace Calculator { using T = double; struct Instance { Instance() = default; Instance( std::string_view s){ parse( s); } ///---------------------| /// Парсинг строки. | ///---------------------: void parse( std::string_view s) { /// TODO ... } ///---------------------| /// Само вычисление. | ///---------------------: T calc( ) { /// TODO ... return 0; } ///---------------------| /// Тест. | ///---------------------: static bool test( std::string_view s, T r) { Instance instance; instance.parse( s); return instance.calc ( ) == r; } private: }; } #define TEST( a) Calculator::Instance::test( #a, a) ///-----------------------------| /// Тесты. | ///-----------------------------: bool tests( ) { bool isgood = true; isgood &= TEST( 3 - 3); isgood &= TEST( 4 * 5); return isgood; } ///----------------------------------------------------------------------------| /// main. ///----------------------------------------------------------------------------: int main( ) { setlocale( 0, ""); std::wcout << L"Привет, я ваш Calculator!\n\n"; std::wcout << L"Тесты: " << ( tests( ) ? L"ОТЛИЧНO" : L"ПЛОХО\a") << '\n'; }