import { useState } from 'react'; import { Button } from '../../ui/Button'; import { Input } from '../../ui/Input'; import { Card, CardHeader } from '../../ui/Card'; interface Ejercicio { id: number; titulo: string; descripcion: string; i1: number; i2: number; q1: number; q2: number; unidadI: string; unidadQ: string; } const ejercicios: Ejercicio[] = [ { id: 1, titulo: "Cálculo de Elasticidad Ingreso", descripcion: "Cuando el ingreso mensual de una familia aumenta de $2,000 a $2,500, su consumo de carne aumenta de 8 kg a 12 kg mensuales.", i1: 2000, i2: 2500, q1: 8, q2: 12, unidadI: "$/mes", unidadQ: "kg" }, { id: 2, titulo: "Elasticidad Ingreso - Producto Tecnológico", descripcion: "El ingreso promedio de consumidores sube de $1,500 a $1,800 mensuales, y las ventas de smartphones premium aumentan de 50 a 80 unidades.", i1: 1500, i2: 1800, q1: 50, q2: 80, unidadI: "$/mes", unidadQ: "unidades" }, { id: 3, titulo: "Elasticidad Ingreso - Transporte", descripcion: "Cuando el ingreso familiar aumenta de $3,000 a $4,000 mensuales, el uso de transporte público disminuye de 40 a 25 viajes mensuales.", i1: 3000, i2: 4000, q1: 40, q2: 25, unidadI: "$/mes", unidadQ: "viajes" } ]; interface Respuesta { valor: string; esCorrecta: boolean | null; } interface FormulaElasticidadIngresoProps { ejercicioId: string; onComplete?: (puntuacion: number) => void; } export function FormulaElasticidadIngreso({ ejercicioId: _ejercicioId, onComplete }: FormulaElasticidadIngresoProps) { const [ejercicioActual, setEjercicioActual] = useState(0); const [respuestas, setRespuestas] = useState>({}); const [mostrarSolucion, setMostrarSolucion] = useState>({}); const [mostrarFormula, setMostrarFormula] = useState(false); const ejercicio = ejercicios[ejercicioActual]; const calcularElasticidad = (ej: Ejercicio) => { const deltaQ = ej.q2 - ej.q1; const deltaI = ej.i2 - ej.i1; const qPromedio = (ej.q1 + ej.q2) / 2; const iPromedio = (ej.i1 + ej.i2) / 2; const porcentajeQ = (deltaQ / qPromedio) * 100; const porcentajeI = (deltaI / iPromedio) * 100; return porcentajeQ / porcentajeI; }; const verificarRespuesta = () => { const respuesta = respuestas[ejercicio.id]; if (!respuesta) return; const valorCorrecto = calcularElasticidad(ejercicio); const valorIngresado = parseFloat(respuesta.valor); const esCorrecta = Math.abs(valorIngresado - valorCorrecto) <= 0.05; setRespuestas(prev => ({ ...prev, [ejercicio.id]: { ...respuesta, esCorrecta } })); if (esCorrecta && ejercicioActual === ejercicios.length - 1 && onComplete) { onComplete(100); } }; const handleRespuesta = (valor: string) => { setRespuestas(prev => ({ ...prev, [ejercicio.id]: { valor, esCorrecta: null } })); }; const toggleSolucion = () => { setMostrarSolucion(prev => ({ ...prev, [ejercicio.id]: !prev[ejercicio.id] })); }; const siguienteEjercicio = () => { if (ejercicioActual < ejercicios.length - 1) { setEjercicioActual(prev => prev + 1); } }; const resultado = calcularElasticidad(ejercicio); const respuestaActual = respuestas[ejercicio.id]; return (

{ejercicio.titulo}

{ejercicio.descripcion}

I₁

{ejercicio.i1.toLocaleString()} {ejercicio.unidadI}

I₂

{ejercicio.i2.toLocaleString()} {ejercicio.unidadI}

Q₁

{ejercicio.q1} {ejercicio.unidadQ}

Q₂

{ejercicio.q2} {ejercicio.unidadQ}

Fórmula del método del punto medio:

{mostrarFormula && (

Ei = (%ΔQ) / (%ΔI)

Donde:

• %ΔQ = [(Q₂ - Q₁) / ((Q₁ + Q₂) / 2)] × 100

• %ΔI = [(I₂ - I₁) / ((I₁ + I₂) / 2)] × 100

)}

Calcule la elasticidad ingreso (Ei):

handleRespuesta(e.target.value)} className="w-48" placeholder="Respuesta" />
{respuestaActual?.esCorrecta !== null && (
{respuestaActual.esCorrecta ? '¡Correcto!' : 'Incorrecto. Revisa tus cálculos.'}
)} {mostrarSolucion[ejercicio.id] && (

Desarrollo:

ΔQ = {ejercicio.q2} - {ejercicio.q1} = {ejercicio.q2 - ejercicio.q1}

ΔI = {ejercicio.i2} - {ejercicio.i1} = {ejercicio.i2 - ejercicio.i1}

Q̄ = ({ejercicio.q1} + {ejercicio.q2}) / 2 = {((ejercicio.q1 + ejercicio.q2) / 2).toFixed(1)}

Ī = ({ejercicio.i1} + {ejercicio.i2}) / 2 = {((ejercicio.i1 + ejercicio.i2) / 2).toFixed(1)}

%ΔQ = ({ejercicio.q2 - ejercicio.q1} / {((ejercicio.q1 + ejercicio.q2) / 2).toFixed(1)}) × 100 = {(((ejercicio.q2 - ejercicio.q1) / ((ejercicio.q1 + ejercicio.q2) / 2)) * 100).toFixed(2)}%

%ΔI = ({ejercicio.i2 - ejercicio.i1} / {((ejercicio.i1 + ejercicio.i2) / 2).toFixed(1)}) × 100 = {(((ejercicio.i2 - ejercicio.i1) / ((ejercicio.i1 + ejercicio.i2) / 2)) * 100).toFixed(2)}%

Ei = {(((ejercicio.q2 - ejercicio.q1) / ((ejercicio.q1 + ejercicio.q2) / 2)) * 100).toFixed(2)} / {(((ejercicio.i2 - ejercicio.i1) / ((ejercicio.i1 + ejercicio.i2) / 2)) * 100).toFixed(2)} = {resultado.toFixed(2)}

)}
{ejercicioActual < ejercicios.length - 1 ? ( ) : (
{respuestaActual?.esCorrecta ? '¡Ejercicios completados!' : ''}
)}
); } export default FormulaElasticidadIngreso;