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"> 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?
- 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"> 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?
Submit Your Answer
We prioritize human answers over AI answers.
If you are human, and you can answer this question, please submit your answer.