Загрузка данных
// main.cpp
#include "FormulaCalculator.h"
#include <QCoreApplication>
#include <QTextStream>
#include <iostream>
void printResult(const CalculationResult& result) {
if (result.hasTable()) {
std::cout << "\nResult: " << result.getValue() << std::endl;
std::cout << "\n" << result.getTable().toStdString() << std::endl;
} else {
std::cout << "Result: " << result.getValue() << std::endl;
}
}
void printHelp() {
std::cout << "\n=== Formula Calculator ===\n";
std::cout << "Supported operations: +, -, *, /, ^\n";
std::cout << "Supported functions: sin, cos, tan, sqrt, exp, log, log10, ceil, floor\n";
std::cout << "Commands: table (generate table), clear (clear variables)\n";
std::cout << "Variables: any name starting with letter\n";
std::cout << "Examples:\n";
std::cout << " 2+3*4\n";
std::cout << " sin(30)\n";
std::cout << " x=10\n";
std::cout << " x+5 table\n";
std::cout << " clear\n";
std::cout << " exit - to quit\n";
std::cout << "========================\n\n";
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
FormulaCalculator calculator;
QTextStream qtin(stdin);
QTextStream qtout(stdout);
printHelp();
// Демонстрация работы модуля
std::cout << "Demonstrating module functionality:\n\n";
// 1. Простые вычисления
std::cout << "1. Simple calculations:\n";
CalculationResult result = calculator.parseAndCalculate("2+3*4");
printResult(result);
result = calculator.parseAndCalculate("(2+3)*4");
printResult(result);
// 2. Использование функций
std::cout << "\n2. Using math functions:\n";
result = calculator.parseAndCalculate("sin(3.14159/2)");
printResult(result);
result = calculator.parseAndCalculate("sqrt(144)");
printResult(result);
// 3. Работа с переменными
std::cout << "\n3. Working with variables:\n";
calculator.setVariable("x", 10);
calculator.setVariable("y", 20);
result = calculator.parseAndCalculate("x+y");
printResult(result);
result = calculator.parseAndCalculate("x*y");
printResult(result);
// 4. Генерация таблицы
std::cout << "\n4. Generating value table:\n";
result = calculator.parseAndCalculate("sin(x) table");
printResult(result);
// 5. Интерактивный режим
std::cout << "\n5. Interactive mode (type 'exit' to quit):\n";
QString input;
while (true) {
std::cout << "> ";
std::cout.flush();
input = qtin.readLine();
if (input == "exit" || input == "quit") {
break;
}
if (input.contains('=')) {
// Присваивание переменной
QStringList parts = input.split('=');
if (parts.size() == 2) {
QString varName = parts[0].trimmed();
bool ok;
double value = parts[1].trimmed().toDouble(&ok);
if (ok) {
calculator.setVariable(varName, value);
std::cout << varName.toStdString() << " = " << value << std::endl;
} else {
std::cout << "Invalid value" << std::endl;
}
}
} else {
try {
CalculationResult res = calculator.parseAndCalculate(input);
printResult(res);
} catch (const std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
}
}
}
std::cout << "\nProgram terminated.\n";
return 0;
}