Skill: integrals
Integrals & FTC Practice
Undo the derivative: antiderivatives rebuild a function from its rate of change. The Fundamental Theorem of Calculus turns area problems into antiderivative evaluations — with net area keeping honest count below the axis.
1 Practice
Type your answer and press Check answer (or Enter). A wrong answer earns a hint; a second miss earns a stronger hint; a third miss walks you through the full solution. Scores and streaks are session-only.
2 What you’ll practice
Every problem is generated fresh from templates across several question types — a problem never repeats until its whole pool is used up.
Power-rule antiderivative
Term-by-term + C, then differentiate back to check.
FTC evaluation
Antiderivative at top minus bottom.
Negative powers
Rewrite 1/xⁿ as x⁻ⁿ first.
Trig antiderivative
Work backwards from the derivative.
Exponential
∫aeᵇˣdx = (a/b)eᵇˣ + C.
Riemann sum
Left sum: Δx times left-endpoint values.
Net area
Below the axis counts negative.
3 Watch out for these
The mistakes students make most often on these problems.
Indefinite integrals name a whole family: ∫2x dx = x² + C, never just x².
The integral is net area — symmetric regions cancel. Total area is a separate computation.
∫x³dx = x⁴/4 + C. Always differentiate your answer to check.
(function(){ function $(id){ return document.getElementById(id); } var session = SF_API.newSession((Date.now() % 2147483647) + 7); var current = null, attempts = 0, locked = false, mcqSel = -1;
function renderFields(prob){ var h = ''; for (var i = 0; i < prob.answer.labels.length; i++){ h += '
'; } return h; } function renderMcq(prob){ var h = '
'; } function newProblem(){ current = session.next(); attempts = 0; locked = false; mcqSel = -1; $('promptTag').textContent = current.tag; $('promptEl').innerHTML = current.prompt; var area = $('answerArea'); if (current.kind === 'mcq'){ area.innerHTML = renderMcq(current); wireMcq(); } else if (current.kind === 'fields'){ area.innerHTML = renderFields(current); } else { var ph = (current.kind === 'frac') ? 'e.g. 3/4 or 0.75' : 'your answer'; area.innerHTML = '
'; var inp = $('ansInput'); inp.addEventListener('keydown', function(e){ if (e.key === 'Enter') doCheck(); }); } $('fb').className = 'fb'; $('fb').textContent = ''; $('hintBox').className = 'hintbox'; $('hintBox').innerHTML = ''; $('whyBox').className = 'whybox'; $('whyBox').innerHTML = ''; $('checkBtn').disabled = false; var f0 = $('fld0'); if (f0) f0.focus(); else { var ai = $('ansInput'); if (ai) ai.focus(); } } function wireMcq(){ var btns = document.querySelectorAll('#mcqOpts button'); for (var i = 0; i < btns.length; i++){ (function(b, idx){ b.addEventListener('click', function(){ for (var j = 0; j < btns.length; j++) btns[j].className = ''; b.className = 'sel'; mcqSel = idx; doCheck(); }); })(btns[i], i); } } function collect(){ if (current.kind === 'mcq') return String(mcqSel); if (current.kind === 'fields'){ var out = []; for (var i = 0; i < current.answer.labels.length; i++) out.push($('fld' + i).value); return out; } return $('ansInput').value; } function showHint(){ var hb = $('hintBox'); hb.innerHTML = '
' + current.hint; hb.className = 'hintbox show'; } function showHint2(){ var hb = $('hintBox'); hb.innerHTML = '
' + current.hint + '
' + current.hint2; hb.className = 'hintbox show'; } function showSolution(){ var wb = $('whyBox'); wb.innerHTML = '
' + current.solution; wb.className = 'whybox show'; } function doCheck(){ if (locked || !current) return; if (!(!(current.kind === 'mcq') || !(mcqSel < 0))) return; var res = SF_API.check(current, collect()); var fb = $('fb'); if (res.ok){ fb.className = 'fb ok'; fb.textContent = (attempts === 0 ? 'Correct on the first try.' : 'Correct.') + ' Press "Try another" for the next problem.'; if (attempts === 0){ session.score++; } session.streak++; locked = true; $('checkBtn').disabled = true; showSolution(); } else { attempts++; session.streak = 0; fb.className = 'fb no'; if (attempts === 1){ fb.textContent = 'Not quite \u2014 read the hint and try again.'; showHint(); } else if (attempts === 2){ fb.textContent = 'Still not it \u2014 here is a stronger hint.'; showHint2(); } else { fb.textContent = 'Here is the full solution. Press "Try another" to keep going.'; showSolution(); locked = true; $('checkBtn').disabled = true; } } $('statsLine').innerHTML = 'Score ' + session.score + ' · Streak ' + session.streak + ' · Problem ' + session.n + ''; } $('checkBtn').addEventListener('click', doCheck); $('anotherBtn').addEventListener('click', newProblem); $('showSolBtn').addEventListener('click', function(){ showSolution(); }); newProblem(); })();