diff --git a/08_calculator/calculator-events.js b/08_calculator/calculator-events.js new file mode 100644 index 0000000..68fb550 --- /dev/null +++ b/08_calculator/calculator-events.js @@ -0,0 +1,29 @@ +const display = document.getElementById('display'); +let currentInput = ''; + +document.querySelectorAll('.btn').forEach(button => { + button.addEventListener('click', () => handleButtonClick(button.innerText)); +}); + +function handleButtonClick(value) { + switch (value) { + case 'C': + currentInput = ''; + break; + case '←': + currentInput = currentInput.slice(0, -1); + break; + case '=': + try { + currentInput = eval(currentInput).toString(); + } catch (error) { + currentInput = 'Error'; + } + break; + default: + currentInput += value; + break; + } + + display.innerText = currentInput; +} diff --git a/08_calculator/calculator.js b/08_calculator/calculator.js index c22e8d2..ed2227e 100644 --- a/08_calculator/calculator.js +++ b/08_calculator/calculator.js @@ -1,33 +1,27 @@ -const add = function() { - +const calculator = { + add: function (a, b) { + return a + b; + }, + subtract: function (a, b) { + return a - b; + }, + sum: function (array) { + return array.reduce((total, current) => total + current, 0); + }, + multiply: function (...args) { + return args.reduce((product, current) => product * current, 1); + }, + power: function (a, b) { + return Math.pow(a, b); + }, + factorial: function (n) { + if (n === 0) return 1; + let product = 1; + for (let i = n; i > 0; i--) { + product *= i; + } + return product; + }, }; -const subtract = function() { - -}; - -const sum = function() { - -}; - -const multiply = function() { - -}; - -const power = function() { - -}; - -const factorial = function() { - -}; - -// Do not edit below this line -module.exports = { - add, - subtract, - sum, - multiply, - power, - factorial -}; +module.exports = calculator; diff --git a/08_calculator/calculator.test.js b/08_calculator/calculator.test.js new file mode 100644 index 0000000..90abf60 --- /dev/null +++ b/08_calculator/calculator.test.js @@ -0,0 +1,77 @@ +const calculator = require('./calculator'); // Asegúrate de que la ruta sea correcta + +describe('add', () => { + test('adds 0 and 0', () => { + expect(calculator.add(0, 0)).toBe(0); + }); + + test('adds 2 and 2', () => { + expect(calculator.add(2, 2)).toBe(4); + }); + + test('adds positive numbers', () => { + expect(calculator.add(2, 6)).toBe(8); + }); +}); + +describe('subtract', () => { + test('subtracts numbers', () => { + expect(calculator.subtract(10, 4)).toBe(6); + }); +}); + +describe('sum', () => { + test('computes the sum of an empty array', () => { + expect(calculator.sum([])).toBe(0); + }); + + test('computes the sum of an array of one number', () => { + expect(calculator.sum([7])).toBe(7); + }); + + test('computes the sum of an array of two numbers', () => { + expect(calculator.sum([7, 11])).toBe(18); + }); + + test('computes the sum of an array of many numbers', () => { + expect(calculator.sum([1, 3, 5, 7, 9])).toBe(25); + }); +}); + +describe('multiply', () => { + test('multiplies two numbers', () => { + expect(calculator.multiply(2, 4)).toBe(8); + }); + + test('multiplies several numbers', () => { + expect(calculator.multiply(2, 4, 6, 8, 10, 12, 14)).toBe(645120); + }); +}); + +describe('power', () => { + test('raises one number to the power of another number', () => { + expect(calculator.power(4, 3)).toBe(64); // 4 to the third power is 64 + }); +}); + +describe('factorial', () => { + test('computes the factorial of 0', () => { + expect(calculator.factorial(0)).toBe(1); // 0! = 1 + }); + + test('computes the factorial of 1', () => { + expect(calculator.factorial(1)).toBe(1); + }); + + test('computes the factorial of 2', () => { + expect(calculator.factorial(2)).toBe(2); + }); + + test('computes the factorial of 5', () => { + expect(calculator.factorial(5)).toBe(120); + }); + + test('computes the factorial of 10', () => { + expect(calculator.factorial(10)).toBe(3628800); + }); +}); \ No newline at end of file diff --git a/08_calculator/index.html b/08_calculator/index.html new file mode 100644 index 0000000..38fdf94 --- /dev/null +++ b/08_calculator/index.html @@ -0,0 +1,42 @@ + + + + + + Simple Calculator + + + +
+
0
+
+ + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/08_calculator/style.css b/08_calculator/style.css new file mode 100644 index 0000000..3db5314 --- /dev/null +++ b/08_calculator/style.css @@ -0,0 +1,55 @@ +body { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #f0f0f0; + margin: 0; +} + +.calculator { + background-color: #f0f0f0; /* Cambiamos el fondo a un gris más claro */ + border-radius: 10px; /* Aumentamos el radio del borde para hacerlo más suave */ + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); + text-align: center; + width: 350px; /* Aumentamos el ancho para dar más espacio a los botones */ + padding: 20px; /* Agregamos un poco de espacio alrededor del contenido */ + margin-top: 20px; /* Añadimos margen superior para centrar en la pantalla */ +} + +.display { + font-size: 36px; /* Aumentamos el tamaño del texto en el display */ + padding: 10px; + border: 1px solid #ccc; /* Cambiamos el borde inferior a un borde completo */ + margin-bottom: 10px; /* Agregamos margen inferior para separar del contenido de los botones */ + background-color: #fff; /* Fondo blanco para el display */ +} + +.buttons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; /* Agregamos espacio entre los botones */ +} + +.btn { + font-size: 24px; /* Aumentamos el tamaño del texto en los botones */ + padding: 20px 0; + cursor: pointer; + border: 1px solid #ccc; /* Agregamos un borde a los botones */ + background-color: #fff; /* Fondo blanco para los botones */ +} + +.btn:hover { + background-color: #eee; /* Cambiamos el color de fondo al pasar el ratón */ +} + +#equals { + grid-column: span 4; + background-color: #ff6600; + color: white; + font-weight: bold; +} + +#equals:hover { + background-color: #cc5500; +}