Recapitulare generală I

Recapitulare extinsă pentru lecțiile 27-33: formule, validări, capcane și organizare în C++

50 minute
Modulul 5
Partea 1 din 2
Sigla liceului
RECAPITULARE EXTINSĂ - LECȚIILE 27-33

De ce avem această recapitulare

Ora 41 este prima parte a recapitulării finale pentru Modulul 5. Ea reia lecțiile 27-33, adică zona în care am legat programarea de matematică, geometrie și formule cu validări. Scopul nu este să memorăm bucăți de cod, ci să înțelegem cum se construiește un program corect pornind de la o cerință din alt domeniu.

Într-o lecție interdisciplinară, calculatorul nu ghicește sensul formulei. Elevul trebuie să transforme formula în pași, să aleagă tipurile de date, să verifice situațiile limită și să afișeze un rezultat ușor de citit. Această recapitulare insistă exact pe aceste puncte, pentru ca proiectul final să fie mai ușor de gândit.

Prima regulă este simplă: înainte să scrii cod, spui în cuvinte ce se întâmplă. A doua regulă este la fel de importantă: înainte să aplici formula, verifici dacă datele permit formula. De aici apar ramurile if, meniurile cu switch, calculele cu double și funcțiile matematice din <cmath>.

Harta comună a lecțiilor 27-33

Toate lecțiile din această parte pot fi citite cu aceeași hartă mentală. Mai întâi identifici domeniul: ecuație, coordonate, arie sau volum. Apoi extragi formula. După formulă cauți valorile care pot strica algoritmul: coeficient zero, radical negativ, dimensiune negativă, opțiune inexistentă sau împărțire întreagă făcută din greșeală.

PasÎntrebare utilăCe apare în C++
Înțeleg domeniulCe descrie cerința?nume de variabile clare
Aleg formulaCare este relația matematică?expresii aritmetice
Validez dateleExistă cazuri imposibile?if, else if, else
CalculezAm tipuri potrivite?double, sqrt, constante
AfișezUtilizatorul înțelege rezultatul?cout cu text explicativ

Idee centrală: un program bun nu este doar o formulă scrisă în C++. Este o formulă pusă într-un context sigur, cu verificări și mesaje clare.

Lecția 27: Interdisciplinaritate și structuri de control

Lecția 27 a arătat de ce programarea poate fi folosită în mai multe discipline. O formulă din matematică, fizică sau chimie poate deveni un algoritm, iar algoritmul poate deveni un program. Diferența dintre a ști formula și a scrie programul este ordinea pașilor: citire, verificare, calcul, afișare.

Structurile de control sunt uneltele prin care programul se adaptează. Dacă ai o singură formulă, codul este liniar. Dacă ai cazuri diferite, folosești if/else. Dacă ai opțiuni numerotate, switch este natural. Dacă ai de repetat o citire sau un calcul, apare for sau while.

Observi în cerințăGândeștiAlegi
o formulă directăpași în ordine fixăcod liniar
cuvinte ca "dacă" sau "altfel"ramuriif/else
mai multe variantemeniuswitch
aceeași acțiune de multe orirepetarefor sau while
  1. Scrie pe scurt ce reprezintă datele de intrare.
  2. Notează formula sau regula din domeniul respectiv.
  3. Marchează valorile care trebuie refuzate sau tratate separat.
  4. Alege structura C++ care exprimă cel mai clar decizia.
  5. Testează cu un exemplu ușor, unul la limită și unul invalid.
Capcană: codul copiat fără înțelegere se blochează la prima cerință schimbată. Dacă poți spune în cuvinte de ce ai ales o structură, poți reface codul și fără model în față.

Lecția 28: Ecuația de gradul I

Ecuația de gradul I are forma ax + b = 0. Formula x = -b / a este utilă, dar nu este întregul algoritm. Înainte de împărțire, trebuie să verifici coeficientul a. Dacă a este zero, expresia nu mai are termen cu x, deci ecuația devine o egalitate constantă.

Această lecție este importantă fiindcă arată diferența dintre formula matematică și programul complet. Matematic, în caiet, poți scrie formula repede. În C++, dacă împarți la zero, rezultatul nu mai are sens. De aceea programul trebuie să decidă: caz normal, infinit de soluții sau fără soluție.

CazInterpretareRăspuns
a != 0ecuație obișnuităcalculezi -b/a
a == 0 și b == 0egalitate adevărată mereuinfinit de soluții
a == 0 și b != 0egalitate imposibilăfără soluție
Schelet de gândire
if (a == 0) {
    if (b == 0) {
        cout << "Infinit de solutii";
    } else {
        cout << "Fara solutie";
    }
} else {
    double x = -b / a;
    cout << x;
}

În proiecte, această idee revine des: nu calculezi înainte să verifici. Verificarea este parte din algoritm, nu un detaliu opțional.

Lecția 29: Algoritmul ecuației de gradul II

Ecuația de gradul II are forma ax^2 + bx + c = 0, iar discriminantul delta = b*b - 4*a*c decide numărul soluțiilor reale. Lecția 29 a pus accent pe algoritm, adică pe ordinea corectă a deciziilor. Nu se pornește de la radical, ci de la verificarea coeficientului a.

Dacă a este zero, nu mai avem ecuație de gradul II. Putem trata separat situația sau putem anunța că datele nu descriu o ecuație de gradul II. După această verificare, calculăm delta și alegem ramura după semnul ei.

DeltaCe înseamnăCe face programul
delta < 0nu sunt soluții realenu folosește sqrt
delta == 0o soluție dublăcalculează -b/(2*a)
delta > 0două soluții realecalculează ambele valori
  1. Citești coeficienții a, b și c.
  2. Verifici dacă a este diferit de zero.
  3. Calculezi discriminantul.
  4. Alegi ramura după semnul discriminantului.
  5. Afișezi un mesaj diferit pentru fiecare caz.
Capcană: sqrt(delta) este corect numai când delta nu este negativ. Programul trebuie să ajungă la radical doar pe ramura sigură.

Lecția 30: Implementarea ecuației de gradul II

Lecția 30 a transformat algoritmul în cod C++. Aici contează detaliile de sintaxă și tipuri de date. Se folosește #include <cmath> pentru sqrt, double pentru coeficienți și rezultate reale, plus paranteze clare în formule.

O eroare foarte des întâlnită este folosirea operatorului ^ pentru pătrat. În C++, ^ nu înseamnă ridicare la putere, ci alt operator. Pentru pătrat, cea mai simplă formă este b*b. Pentru numitor, parantezele sunt importante: 2*a trebuie calculat ca produs, nu lăsat într-o expresie neclară.

Ordine robustă
if (a == 0) {
    cout << "Nu este ecuatie de gradul II";
} else {
    double delta = b*b - 4*a*c;
    if (delta < 0) {
        cout << "Nu exista solutii reale";
    } else if (delta == 0) {
        double x = -b / (2*a);
        cout << x;
    } else {
        double x1 = (-b - sqrt(delta)) / (2*a);
        double x2 = (-b + sqrt(delta)) / (2*a);
        cout << x1 << " " << x2;
    }
}

Pentru afișare, nu este suficient să arunci două numere pe ecran. Un mesaj de forma x1 = ... și x2 = ... face programul mai ușor de verificat. În proiectul final, claritatea afișării contează aproape la fel de mult ca formula.

Lecția 31: Distanța dintre două puncte

Distanța dintre două puncte leagă coordonatele de teorema lui Pitagora. Dacă punctele sunt A(x1,y1) și B(x2,y2), diferența pe axa X este x2-x1, iar diferența pe axa Y este y2-y1. Distanța este radicalul sumei pătratelor acestor diferențe.

În C++, formula se scrie cel mai clar cu variabile intermediare. Acest lucru ajută și la verificare, și la citirea codului. Dacă ai dx și dy, formula finală devine scurtă și greu de confundat.

Traducere directă
double dx = x2 - x1;
double dy = y2 - y1;
double distanta = sqrt(dx*dx + dy*dy);

Din aceeași idee poți construi perimetrul unui triunghi, calculând cele trei distanțe dintre puncte. Pentru arie, formula lui Heron cere semiperimetrul și o verificare implicită: cele trei lungimi trebuie să formeze un triunghi valid.

CalculAi nevoie deAi grijă la
distanțădouă punctesqrt și double
perimetrutrei distanțeordine corectă a punctelor
arie Herontrei laturi valideradical din valoare nenegativă
Capcană: două puncte identice au distanța zero. Nu este o eroare pentru distanță, dar poate strica o construcție care așteaptă un triunghi.

Lecția 32: Calculator geometric

Calculatorul geometric a introdus ideea de aplicație mică, cu meniu. În loc să scrii un program separat pentru fiecare calcul, poți grupa mai multe operații într-un singur fișier: distanța dintre două puncte, perimetrul unui triunghi, aria prin formula lui Heron, coliniaritatea și clasificarea triunghiului.

Această lecție pregătește direct proiectul final. Un proiect bun pentru începători nu are nevoie de interfață grafică. Are nevoie de meniu clar, opțiuni puține, validări și rezultate explicate. Meniul poate fi repetat cu while, iar alegerea poate fi tratată cu switch.

  1. Afișezi opțiunile: distanță, perimetru triunghi, arie, coliniaritate, clasificare, ieșire.
  2. Citești alegerea într-o variabilă întreagă.
  3. În fiecare ramură citești doar punctele necesare pentru calculul ales.
  4. Calculezi laturile cu funcția de distanță atunci când ai nevoie de ele.
  5. Afișezi rezultatul cu text clar, de exemplu Distanta = ... sau Punctele sunt coliniare.
OpțiuneIdee de calculAi grijă la
Distanțăsqrt(dx*dx + dy*dy)<cmath> și double
Perimetrusuma celor trei laturilaturile se obțin din puncte
Arie Heronsqrt(s*(s-a)*(s-b)*(s-c))triunghi valid înainte de radical
Coliniaritatearie/determinant egal cu zeropentru double folosești toleranță

Un meniu bine scris este ușor de extins. Poți începe cu trei forme, apoi adaugi una nouă fără să rescrii tot programul. Aceasta este o lecție de organizare, nu doar de formule.

Lecția 33: Volumele corpurilor regulate

Volumele corpurilor regulate continuă ideea de formule traduse în cod. Cubul, sfera, cilindrul și conul folosesc relații scurte, dar cer atenție la valori reale. Dimensiunile trebuie să fie pozitive, iar constantele trebuie scrise astfel încât C++ să facă împărțiri reale.

Cel mai cunoscut exemplu este volumul sferei. Dacă scrii 4/3, C++ interpretează expresia ca împărțire întreagă și obține 1. Forma sigură este 4.0/3 sau 4.0 / 3.0. Această diferență mică schimbă complet rezultatul.

CorpFormulaVerificare
Cubl*l*ll > 0
Sferă4.0/3 * PI * r*r*rr > 0
CilindruPI * r*r * hr > 0, h > 0
ConPI * r*r * h / 3r > 0, h > 0
Capcană: o formulă corectă pe hârtie poate deveni greșită în C++ dacă tipurile de date nu sunt alese corect.

Afișarea cu zecimale: nu punem fixed << setprecision(2) peste tot. Îl folosim doar când enunțul cere explicit două zecimale, de exemplu la probleme de tip „afișează volumul cu două zecimale”.

Sinteză pentru finalul orei 41

După primele șapte lecții, elevul ar trebui să vadă un tipar comun: formula este miezul, dar programul complet are și protecții. Ecuațiile cer ramuri pentru cazuri speciale. Geometria cere double, sqrt și valori pozitive. Calculatoarele cu meniu cer organizare și mesaje clare.

  • Poți explica în cuvinte ce face fiecare variabilă.
  • Poți spune ce se verifică înainte de formulă.
  • Poți alege între if, switch, for și while.
  • Poți transforma o formulă într-o expresie C++ cu paranteze corecte.
  • Poți afișa rezultate cu text, nu doar cu numere izolate.