Asked by j

Necesito una calculadora para la clase de
a.
historia
b.
matemáticas
c.
español

All Answers 1

Answered by GPT-5 mini AI
Perfecto — te dejo una calculadora práctica que puedes usar para las tres clases (Historia, Matemáticas y Español). Es un archivo HTML/JavaScript que puedes guardar en tu PC (por ejemplo, como calculadora_clases.html) y abrir con cualquier navegador. Tiene:

- Historia: calculadora de diferencia entre fechas (años, meses, días).
- Matemáticas: evaluador de expresiones (soporta + - * / ^, funciones básicas como sqrt, sin, cos).
- Español: contador de palabras, caracteres, sílabas (heurístico), palabras con acento y tiempo de lectura estimado.

Copia todo esto en un archivo .html y ábrelo:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Calculadora para Historia / Matemáticas / Español</title>
<style>
body { font-family: Arial, sans-serif; max-width:900px; margin:20px auto; line-height:1.4; }
.tab { margin:10px 0; }
.panel { border:1px solid #ccc; padding:12px; margin-top:8px; display:none; }
.panel.active { display:block; }
input, textarea, select, button { font-size:14px; padding:6px; margin:4px 0; }
textarea { width:100%; height:120px; }
.row{margin:8px 0;}
.result{background:#f9f9f9; padding:8px; border:1px solid #eee; white-space:pre-wrap;}
</style>
</head>
<body>
<h2>Calculadora para clase: Historia / Matemáticas / Español</h2>

<div class="tab">
<select id="mode" onchange="showPanel()">
<option value="historia">a) Historia</option>
<option value="matematicas">b) Matemáticas</option>
<option value="espanol">c) Español</option>
</select>
</div>

<!-- HISTORIA -->
<div id="historia" class="panel">
<h3>Historia — Calculadora de fechas</h3>
<div class="row">
Fecha inicio: <input type="date" id="h_start"> &nbsp; Fecha fin: <input type="date" id="h_end">
</div>
<div class="row">
<button onclick="calcFecha()">Calcular diferencia</button>
<button onclick="calcEdad()">Calcular edad (nac. → fecha)</button>
</div>
<div class="row">
<div id="h_result" class="result"></div>
</div>
<p>Nota: el control date usa calendario gregoriano y no soporta años BCE en el control. Para fechas históricas muy antiguas puedes introducir años manualmente (pídeme ayuda si necesitas convertir BCE).</p>
</div>

<!-- MATEMATICAS -->
<div id="matematicas" class="panel">
<h3>Matemáticas — Evaluador de expresiones</h3>
<div class="row">
Escribe una expresión (usa ^ para potencia, p. ej. 2^3, o funciones como sqrt(2), sin(PI/2)):
</div>
<div class="row">
<input type="text" id="m_expr" style="width:70%" placeholder="Ej: (3+4)*2 - 5^2 / sqrt(9)">
<button onclick="evalMath()">Evaluar</button>
</div>
<div class="row">
<button onclick="insertAtExpr(' + ')">+</button>
<button onclick="insertAtExpr(' - ')">-</button>
<button onclick="insertAtExpr(' * ')">*</button>
<button onclick="insertAtExpr(' / ')">/</button>
<button onclick="insertAtExpr(' ^ ')">^</button>
<button onclick="insertAtExpr(' Math.PI ')">PI</button>
<button onclick="insertAtExpr(' sqrt(')">sqrt(</button>
<button onclick="insertAtExpr(' sin(')">sin(</button>
<button onclick="insertAtExpr(' cos(')">cos(</button>
<button onclick="insertAtExpr(' tan(')">tan(</button>
</div>
<div class="row">
<div id="m_result" class="result"></div>
</div>
<p>Precaución: la evaluación usa funciones estándar de JavaScript (Math). Para potencias se acepta ^ (se transforma internamente a **). No uses expresiones no numéricas.</p>
</div>

<!-- ESPAÑOL -->
<div id="espanol" class="panel">
<h3>Español — Contador de texto</h3>
<div class="row">
<textarea id="s_text" placeholder="Pega aquí tu texto..."></textarea>
</div>
<div class="row">
<button onclick="analizarTexto()">Analizar texto</button>
<button onclick="document.getElementById('s_text').value=''">Borrar</button>
</div>
<div class="row">
<div id="s_result" class="result"></div>
</div>
<p>La cuenta de sílabas usa un método heurístico (agrupa vocales para aproximar sílabas). Es útil para estimaciones (fácil, lectura, poesía) pero no garantiza acentuación correcta en casos complejos.</p>
</div>

<script>
// mostrar panel correcto
function showPanel(){
var mode = document.getElementById('mode').value;
['historia','matematicas','espanol'].forEach(id=>{
document.getElementById(id).classList.remove('active');
});
document.getElementById(mode).classList.add('active');
}
showPanel();

// HISTORIA
function daysBetween(a,b){
const _MS_PER_DAY = 1000*60*60*24;
return Math.floor((b-a)/_MS_PER_DAY);
}
function dateYMD(start, end){
// devuelve años, meses, dias completos entre dos Date (start <= end)
if (end < start) return null;
var y = end.getFullYear() - start.getFullYear();
var m = end.getMonth() - start.getMonth();
var d = end.getDate() - start.getDate();
if (d < 0) { m -= 1;
// tomar días del mes anterior
var prev = new Date(end.getFullYear(), end.getMonth(), 0);
d += prev.getDate();
}
if (m < 0) { y -= 1; m += 12; }
return {y:y, m:m, d:d};
}
function calcFecha(){
var s = document.getElementById('h_start').value;
var e = document.getElementById('h_end').value;
var out = document.getElementById('h_result');
if (!s || !e){ out.textContent = 'Introduce ambas fechas.'; return; }
var ds = new Date(s);
var de = new Date(e);
if (de < ds){ out.textContent = 'La fecha fin es anterior a la inicio.'; return; }
var diff = dateYMD(ds, de);
var dias = daysBetween(ds,de);
out.textContent = `Diferencia completa: ${diff.y} años, ${diff.m} meses, ${diff.d} días\nTotal de días: ${dias} días`;
}
function calcEdad(){
var s = document.getElementById('h_start').value; // nacimiento
var e = document.getElementById('h_end').value || new Date().toISOString().slice(0,10);
var out = document.getElementById('h_result');
if (!s){ out.textContent = 'Introduce fecha de nacimiento.'; return; }
var dn = new Date(s);
var de = new Date(e);
if (de < dn){ out.textContent = 'La fecha de referencia es anterior a la de nacimiento.'; return; }
var diff = dateYMD(dn, de);
out.textContent = `Edad: ${diff.y} años, ${diff.m} meses, ${diff.d} días.`;
}

// MATEMÁTICAS
function insertAtExpr(t){
var el = document.getElementById('m_expr');
el.value = el.value + t;
el.focus();
}
function evalMath(){
var expr = document.getElementById('m_expr').value.trim();
var out = document.getElementById('m_result');
if (!expr){ out.textContent = 'Introduce una expresión.'; return; }
try {
// reemplazar ^ por ** para potencia
var safe = expr.replace(/\^/g,'**');
// permitir Math. funciones y algunas constantes: PI, E
// transformar PI y E si se usan sin Math.
safe = safe.replace(/\bPI\b/g,'Math.PI').replace(/\bE\b/g,'Math.E');
// evaluación con función (mejor que eval directo)
var f = new Function('return ('+safe+');');
var res = f();
out.textContent = 'Resultado: ' + String(res);
} catch(err){
out.textContent = 'Error en la expresión: ' + err;
}
}

// ESPAÑOL
function analizarTexto(){
var s = document.getElementById('s_text').value || '';
var out = document.getElementById('s_result');
var trimmed = s.trim();
if (!trimmed){ out.textContent = 'Texto vacío.'; return; }
// palabras
var words = trimmed.split(/\s+/).filter(Boolean);
var nWords = words.length;
// caracteres (sin contar espacios)
var nChars = s.replace(/\s/g,'').length;
var nCharsWithSpaces = s.length;
// sílabas aproximadas: contar grupos de vocales (aeiou + tildes + ü)
var textLower = s.toLowerCase();
var syllGroups = textLower.match(/[aeiouáéíóúü]+/g);
var nSyll = syllGroups ? syllGroups.length : 0;
// palabras con tilde (áéíóú)
var acc = s.match(/[áéíóúÁÉÍÓÚ]/g);
var nAcent = acc ? acc.length : 0;
// oraciones (aprox) contar puntos, signos de exclamación/ interrogación como finales
var sentences = s.split(/[.!?]+/).map(x=>x.trim()).filter(Boolean);
var nSent = sentences.length;
// lectura estimada: 200 palabras/minuto
var readMin = (nWords / 200);
// índice lectura Flesch adaptado (aprox) para español:
// Flesch-Español ~ 206.84 - 62.3*(syllables/words) - (words/sentences)
var flesch = null;
if (nWords>0 && nSent>0){
flesch = 206.84 - 62.3 * (nSyll / nWords) - (nWords / nSent);
flesch = Math.round(flesch*10)/10;
}
var res = '';
res += `Palabras: ${nWords}\n`;
res += `Caracteres (sin espacios): ${nChars}\n`;
res += `Caracteres (con espacios): ${nCharsWithSpaces}\n`;
res += `Sílabas (aprox.): ${nSyll}\n`;
res += `Palabras con tilde (contadas por vocales acentuadas): ${nAcent}\n`;
res += `Oraciones (aprox.): ${nSent}\n`;
res += `Tiempo de lectura aprox.: ${readMin.toFixed(2)} minutos (~${Math.ceil(readMin*60)} seg)\n`;
if (flesch !== null) res += `Índice Flesch (aprox. español): ${flesch}\n`;
out.textContent = res;
}

</script>
</body>
</html>

Qué más puedo hacer por ti?
- Puedo adaptar la calculadora (por ejemplo: soporte BCE/CE para Historia, funciones avanzadas para Matemáticas como gráficos, o una comprobación ortográfica/acentuación más precisa para Español).
- Si prefieres una versión en Google Sheets / Excel, también te doy las fórmulas listas para pegar. ¿Qué formato prefieres?