File size: 2,250 Bytes
1cf9796
19d2497
898b6f4
1cf9796
19d2497
 
1cf9796
58cac9f
19d2497
 
 
58cac9f
19d2497
 
898b6f4
 
 
19d2497
 
 
 
58cac9f
898b6f4
 
 
 
 
 
 
 
 
 
 
 
 
19d2497
 
 
898b6f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

let display = document.getElementById('display');
let chart;

function appendValue(value) {
    display.value += value;
}

function clearDisplay() {
    display.value = '';
}

function calculate() {
    try {
        let expression = display.value;
        let result = evaluateExpression(expression);
        display.value = result;
    } catch (error) {
        display.value = 'Error';
    }
}

function evaluateExpression(expression) {
    // Basic implementation, more robust parsing needed for complex expressions
    expression = expression.replace(/[^-()\d/*+.]/g, ''); // Remove invalid characters
    expression = expression.replace(/(\d+\.\d+)/g, parseFloat); // clean floats
    expression = expression.replace(/(\d+)/g, parseInt); // clean integers
    try {
        return new Function('return ' + expression)();
    } catch (e) {
        return 'Error';
    }
}


function deleteLast() {
    display.value = display.value.slice(0, -1);
}

function plotGraph() {
    const equation = document.getElementById('equation').value;
    const xValues = [];
    const yValues = [];

    for (let x = -10; x <= 10; x += 0.5) {
        xValues.push(x);
        try {
            // Replace x in the equation and evaluate
            let y = evaluateExpression(equation.replace(/x/g, x));
            yValues.push(y);
        } catch (error) {
            alert("Invalid equation!");
            return;
        }
    }

    // Destroy previous chart if it exists
    if (chart) {
        chart.destroy();
    }

    const ctx = document.getElementById('myChart').getContext('2d');
    chart = new Chart(ctx, {
        type: 'line',
        data: {
            labels: xValues,
            datasets: [{
                label: equation,
                data: yValues,
                borderColor: 'blue',
                fill: false
            }]
        },
        options: {
            scales: {
                x: {
                    type: 'linear',
                    position: 'bottom'
                },
                y: {
                   type: 'linear',
                   position: 'left'
                }
            }
        }
    });
}