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' } } } }); }