Загрузка данных


// 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;
}