{"id":2529,"date":"2026-02-18T20:44:10","date_gmt":"2026-02-18T18:44:10","guid":{"rendered":"https:\/\/science-x.net\/?page_id=2529"},"modified":"2026-02-18T20:45:11","modified_gmt":"2026-02-18T18:45:11","slug":"heat-capacity-calculator-q-m%c2%b7c%c2%b7%ce%b4t","status":"publish","type":"page","link":"https:\/\/science-x.net\/?page_id=2529","title":{"rendered":"Heat Capacity Calculator (Q = m\u00b7c\u00b7\u0394T)"},"content":{"rendered":"\n<div class=\"eco-tool wp-block-group\" id=\"eco-tool-heatcap\">\n  <div class=\"eco-tool__header\">\n    <h2 class=\"eco-tool__title\">Heat Capacity Calculator (Q = m\u00b7c\u00b7\u0394T)<\/h2>\n    <p class=\"eco-tool__lead\">\n      Solve for heat energy, mass, specific heat, or temperature change. Includes common material presets.\n    <\/p>\n  <\/div>\n\n  <form class=\"eco-tool__form\" novalidate>\n    <div class=\"eco-tool__grid3\">\n\n      <!-- Unknown -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Solve for (unknown)<\/label>\n        <select class=\"eco-tool__input\" data-hc=\"unknown\">\n          <option value=\"q\" selected>Heat energy (Q)<\/option>\n          <option value=\"m\">Mass (m)<\/option>\n          <option value=\"c\">Specific heat (c)<\/option>\n          <option value=\"dt\">Temperature change (\u0394T)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Fill the other three values.<\/div>\n      <\/div>\n\n      <!-- Material preset -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Material preset (c)<\/label>\n        <select class=\"eco-tool__input\" data-hc=\"preset\">\n          <option value=\"\" selected>Custom<\/option>\n          <option value=\"water\">Water \u2014 4186 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"ice\">Ice \u2014 2090 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"steam\">Steam \u2014 2010 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"aluminum\">Aluminum \u2014 900 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"copper\">Copper \u2014 385 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"iron\">Iron \u2014 450 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"steel\">Steel \u2014 490 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"glass\">Glass \u2014 840 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"wood\">Wood (avg) \u2014 1700 J\/(kg\u00b7\u00b0C)<\/option>\n          <option value=\"air\">Air (approx) \u2014 1005 J\/(kg\u00b7\u00b0C)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Sets c automatically (you can still edit it).<\/div>\n      <\/div>\n\n      <!-- Heat Q -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Heat energy (Q)<\/label>\n        <div class=\"eco-tool__row\">\n          <input class=\"eco-tool__input\" data-hc=\"q\" type=\"number\" step=\"any\" placeholder=\"e.g., 50000\" inputmode=\"decimal\" \/>\n          <select class=\"eco-tool__input eco-tool__unit\" data-hc=\"qUnit\">\n            <option value=\"j\" selected>J<\/option>\n            <option value=\"kj\">kJ<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"eco-tool__hint\">Energy added (+) or removed (\u2212).<\/div>\n      <\/div>\n\n      <!-- Mass -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Mass (m)<\/label>\n        <div class=\"eco-tool__row\">\n          <input class=\"eco-tool__input\" data-hc=\"m\" type=\"number\" step=\"any\" placeholder=\"e.g., 2\" inputmode=\"decimal\" \/>\n          <select class=\"eco-tool__input eco-tool__unit\" data-hc=\"mUnit\">\n            <option value=\"kg\" selected>kg<\/option>\n            <option value=\"g\">g<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"eco-tool__hint\">Mass of the material.<\/div>\n      <\/div>\n\n      <!-- Specific heat -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Specific heat (c) J\/(kg\u00b7\u00b0C)<\/label>\n        <input class=\"eco-tool__input\" data-hc=\"c\" type=\"number\" step=\"any\" placeholder=\"e.g., 4186\" inputmode=\"decimal\" \/>\n        <div class=\"eco-tool__hint\">Use a preset or enter a custom value.<\/div>\n      <\/div>\n\n      <!-- Delta T -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Temperature change (\u0394T)<\/label>\n        <div class=\"eco-tool__row\">\n          <input class=\"eco-tool__input\" data-hc=\"dt\" type=\"number\" step=\"any\" placeholder=\"e.g., 10\" inputmode=\"decimal\" \/>\n          <select class=\"eco-tool__input eco-tool__unit\" data-hc=\"dtUnit\">\n            <option value=\"c\" selected>\u00b0C<\/option>\n            <option value=\"k\">K<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"eco-tool__hint\">\u0394T is the difference, so \u00b0C and K are equivalent in size.<\/div>\n      <\/div>\n\n      <!-- Formula -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Formula<\/label>\n        <div class=\"eco-tool__noteBox\">\n          Q = m \u00b7 c \u00b7 \u0394T<br>\n          m in kg, c in J\/(kg\u00b7\u00b0C), \u0394T in \u00b0C (or K)\n        <\/div>\n        <div class=\"eco-tool__hint\">All calculations converted to SI internally.<\/div>\n      <\/div>\n\n    <\/div>\n\n    <div class=\"eco-tool__actions\">\n      <button type=\"button\" class=\"wp-element-button eco-tool__btn\" data-hc=\"calc\">Calculate<\/button>\n      <button type=\"button\" class=\"wp-element-button eco-tool__btn eco-tool__btn--ghost\" data-hc=\"reset\">Reset<\/button>\n      <div class=\"eco-tool__error\" data-hc=\"error\" aria-live=\"polite\"><\/div>\n    <\/div>\n  <\/form>\n\n  <div class=\"eco-tool__result\" data-hc=\"result\" hidden>\n    <h3 class=\"eco-tool__subtitle\">Results<\/h3>\n\n    <div class=\"eco-tool__cards\">\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Heat (Q)<\/div>\n        <div class=\"eco-tool__metric-value\" data-hc=\"outQ\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\">J<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Mass (m)<\/div>\n        <div class=\"eco-tool__metric-value\" data-hc=\"outM\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\">kg<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Specific heat (c)<\/div>\n        <div class=\"eco-tool__metric-value\" data-hc=\"outC\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\">J\/(kg\u00b7\u00b0C)<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Temperature change (\u0394T)<\/div>\n        <div class=\"eco-tool__metric-value\" data-hc=\"outDT\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\">\u00b0C (or K)<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"eco-tool__card eco-tool__card--wide\">\n      <div class=\"eco-tool__metric-label\">Equation used<\/div>\n      <div class=\"eco-tool__metric-sub\" data-hc=\"eq\">\u2014<\/div>\n      <div class=\"eco-tool__metric-sub eco-tool__muted\">Sign: negative Q gives negative \u0394T (cooling).<\/div>\n    <\/div>\n\n    <p class=\"eco-tool__note\">\n      This calculator ignores phase changes (melting\/boiling). For those, you\u2019d need latent heat.\n    <\/p>\n  <\/div>\n<\/div>\n\n<style>\n.eco-tool{border:1px solid rgba(0,0,0,.12);border-radius:12px;padding:16px}\n.eco-tool__grid3{display:grid;grid-template-columns:1fr;gap:16px}\n@media (min-width:860px){.eco-tool__grid3{grid-template-columns:1fr 1fr 1fr}}\n.eco-tool__field{display:flex;flex-direction:column;gap:6px}\n.eco-tool__label{font-weight:600}\n.eco-tool__input{height:44px;padding:0 8px;border:1px solid rgba(0,0,0,.2);border-radius:10px;background:#fff;font:inherit;box-sizing:border-box}\n.eco-tool__hint{font-size:.92em;opacity:.78;min-height:34px}\n.eco-tool__noteBox{border:1px solid rgba(0,0,0,.12);border-radius:12px;padding:12px;background:rgba(0,0,0,.02)}\n.eco-tool__row{display:flex;gap:10px}\n.eco-tool__unit{max-width:110px}\n\n.eco-tool__actions{display:flex;gap:10px;margin-top:16px;align-items:center;flex-wrap:wrap}\n.eco-tool__btn{padding:10px 22px}\n.eco-tool__btn--ghost{background:transparent!important;border:1px solid rgba(0,0,0,.2)!important}\n.eco-tool__btn--ghost:hover,.eco-tool__btn--ghost:focus{background:rgba(0,0,0,.06)!important;border-color:rgba(0,0,0,.35)!important}\n.eco-tool__error{font-weight:600;min-height:1.2em;flex:1 1 240px}\n\n.eco-tool__result{margin-top:16px}\n.eco-tool__subtitle{margin:0 0 10px}\n.eco-tool__cards{display:grid;gap:10px;grid-template-columns:1fr}\n@media (min-width:860px){.eco-tool__cards{grid-template-columns:1fr 1fr 1fr 1fr}}\n.eco-tool__card{border:1px solid rgba(0,0,0,.12);border-radius:12px;padding:12px}\n.eco-tool__card--wide{margin-top:10px}\n.eco-tool__metric-label{opacity:.85;font-weight:600}\n.eco-tool__metric-value{font-size:1.6em;font-weight:800;margin-top:6px;line-height:1.1}\n.eco-tool__metric-sub{opacity:.85;margin-top:6px}\n.eco-tool__muted{opacity:.8}\n.eco-tool__note{margin-top:10px;opacity:.9}\n<\/style>\n\n<script>\n(function(){\n  const root = document.getElementById(\"eco-tool-heatcap\");\n  if(!root) return;\n\n  const $ = (k)=>root.querySelector('[data-hc=\"'+k+'\"]');\n\n  const unkEl = $(\"unknown\");\n  const presetEl = $(\"preset\");\n\n  const qEl = $(\"q\");\n  const qUnitEl = $(\"qUnit\");\n\n  const mEl = $(\"m\");\n  const mUnitEl = $(\"mUnit\");\n\n  const cEl = $(\"c\");\n\n  const dtEl = $(\"dt\");\n  const dtUnitEl = $(\"dtUnit\");\n\n  const calcBtn = $(\"calc\");\n  const resetBtn = $(\"reset\");\n  const errEl = $(\"error\");\n\n  const resEl = $(\"result\");\n  const outQ = $(\"outQ\");\n  const outM = $(\"outM\");\n  const outC = $(\"outC\");\n  const outDT = $(\"outDT\");\n  const eqEl = $(\"eq\");\n\n  const presetC = {\n    water: 4186,\n    ice: 2090,\n    steam: 2010,\n    aluminum: 900,\n    copper: 385,\n    iron: 450,\n    steel: 490,\n    glass: 840,\n    wood: 1700,\n    air: 1005\n  };\n\n  function setError(msg){ errEl.textContent = msg || \"\"; }\n  function fmt(n){\n    if(!Number.isFinite(n)) return \"\u2014\";\n    const a=Math.abs(n);\n    if(a===0) return \"0\";\n    if(a<0.001 || a>=1e9) return n.toExponential(3);\n    return n.toLocaleString(undefined,{maximumFractionDigits:6});\n  }\n\n  function Q_to_J(Q, unit){\n    if(unit===\"j\") return Q;\n    if(unit===\"kj\") return Q*1000;\n    return NaN;\n  }\n  function m_to_kg(m, unit){\n    if(unit===\"kg\") return m;\n    if(unit===\"g\") return m\/1000;\n    return NaN;\n  }\n  function dT_to_C(dT, unit){\n    \/\/ \u0394T is same size in K and \u00b0C\n    if(unit===\"c\" || unit===\"k\") return dT;\n    return NaN;\n  }\n\n  function setDisabled(){\n    const u = unkEl.value;\n    qEl.disabled = (u===\"q\");\n    mEl.disabled = (u===\"m\");\n    cEl.disabled = (u===\"c\");\n    dtEl.disabled = (u===\"dt\");\n\n    [qEl,mEl,cEl,dtEl].forEach(inp => inp.style.opacity = inp.disabled ? \".7\" : \"1\");\n\n    setError(\"\");\n    resEl.hidden = true;\n  }\n\n  function applyPreset(){\n    const p = presetEl.value;\n    if(!p) return;\n    cEl.value = String(presetC[p]);\n    setError(\"\");\n    resEl.hidden = true;\n  }\n\n  function calculate(){\n    setError(\"\");\n\n    const u = unkEl.value;\n\n    const qRaw = Number(qEl.value);\n    const mRaw = Number(mEl.value);\n    const cRaw = Number(cEl.value);\n    const dtRaw = Number(dtEl.value);\n\n    let Q = Number.isFinite(qRaw) ? Q_to_J(qRaw, qUnitEl.value) : NaN;\n    let m = Number.isFinite(mRaw) ? m_to_kg(mRaw, mUnitEl.value) : NaN;\n    let c = Number.isFinite(cRaw) ? cRaw : NaN;\n    let dT = Number.isFinite(dtRaw) ? dT_to_C(dtRaw, dtUnitEl.value) : NaN;\n\n    function need(cond,msg){\n      if(!cond){ setError(msg); resEl.hidden=true; throw new Error(\"stop\"); }\n    }\n\n    try{\n      if(u===\"q\"){\n        need(Number.isFinite(m) && m>0, \"Enter a valid mass (m).\");\n        need(Number.isFinite(c) && c>0, \"Enter a valid specific heat (c).\");\n        need(Number.isFinite(dT) && dT!==0, \"Enter a valid temperature change (\u0394T).\");\n        Q = m*c*dT;\n        eqEl.textContent = `Q = m\u00b7c\u00b7\u0394T = ${fmt(m)}\u00d7${fmt(c)}\u00d7${fmt(dT)} = ${fmt(Q)} J`;\n      } else if(u===\"m\"){\n        need(Number.isFinite(Q), \"Enter a valid heat energy (Q).\");\n        need(Number.isFinite(c) && c>0, \"Enter a valid specific heat (c).\");\n        need(Number.isFinite(dT) && dT!==0, \"Enter a valid temperature change (\u0394T).\");\n        m = Q\/(c*dT);\n        eqEl.textContent = `m = Q\/(c\u00b7\u0394T) = ${fmt(Q)}\/(${fmt(c)}\u00d7${fmt(dT)}) = ${fmt(m)} kg`;\n      } else if(u===\"c\"){\n        need(Number.isFinite(Q), \"Enter a valid heat energy (Q).\");\n        need(Number.isFinite(m) && m>0, \"Enter a valid mass (m).\");\n        need(Number.isFinite(dT) && dT!==0, \"Enter a valid temperature change (\u0394T).\");\n        c = Q\/(m*dT);\n        eqEl.textContent = `c = Q\/(m\u00b7\u0394T) = ${fmt(Q)}\/(${fmt(m)}\u00d7${fmt(dT)}) = ${fmt(c)} J\/(kg\u00b7\u00b0C)`;\n      } else { \/\/ dt\n        need(Number.isFinite(Q), \"Enter a valid heat energy (Q).\");\n        need(Number.isFinite(m) && m>0, \"Enter a valid mass (m).\");\n        need(Number.isFinite(c) && c>0, \"Enter a valid specific heat (c).\");\n        dT = Q\/(m*c);\n        eqEl.textContent = `\u0394T = Q\/(m\u00b7c) = ${fmt(Q)}\/(${fmt(m)}\u00d7${fmt(c)}) = ${fmt(dT)} \u00b0C`;\n      }\n    } catch(e){\n      return;\n    }\n\n    outQ.textContent = fmt(Q);\n    outM.textContent = fmt(m);\n    outC.textContent = fmt(c);\n    outDT.textContent = fmt(dT);\n\n    resEl.hidden = false;\n  }\n\n  function reset(){\n    unkEl.value=\"q\";\n    presetEl.value=\"\";\n    qEl.value=\"\"; qUnitEl.value=\"j\";\n    mEl.value=\"\"; mUnitEl.value=\"kg\";\n    cEl.value=\"\";\n    dtEl.value=\"\"; dtUnitEl.value=\"c\";\n    setError(\"\");\n    resEl.hidden=true;\n    setDisabled();\n  }\n\n  unkEl.addEventListener(\"change\", setDisabled);\n  presetEl.addEventListener(\"change\", applyPreset);\n  calcBtn.addEventListener(\"click\", calculate);\n  resetBtn.addEventListener(\"click\", reset);\n\n  setDisabled();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Heat Capacity Calculator (Q = m\u00b7c\u00b7\u0394T) Solve for heat energy, mass, specific heat, or temperature change. Includes common material presets. Solve for (unknown) Heat energy (Q)Mass (m)Specific heat (c)Temperature change&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2354,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"_links":{"self":[{"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/pages\/2529"}],"collection":[{"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/science-x.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2529"}],"version-history":[{"count":2,"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/pages\/2529\/revisions"}],"predecessor-version":[{"id":2531,"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/pages\/2529\/revisions\/2531"}],"up":[{"embeddable":true,"href":"https:\/\/science-x.net\/index.php?rest_route=\/wp\/v2\/pages\/2354"}],"wp:attachment":[{"href":"https:\/\/science-x.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}