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 domeniul | Ce descrie cerința? | nume de variabile clare |
| Aleg formula | Care este relația matematică? | expresii aritmetice |
| Validez datele | Există cazuri imposibile? | if, else if, else |
| Calculez | Am tipuri potrivite? | double, sqrt, constante |
| Afișez | Utilizatorul î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ști | Alegi |
|---|---|---|
| o formulă directă | pași în ordine fixă | cod liniar |
| cuvinte ca "dacă" sau "altfel" | ramuri | if/else |
| mai multe variante | meniu | switch |
| aceeași acțiune de multe ori | repetare | for sau while |
- Scrie pe scurt ce reprezintă datele de intrare.
- Notează formula sau regula din domeniul respectiv.
- Marchează valorile care trebuie refuzate sau tratate separat.
- Alege structura C++ care exprimă cel mai clar decizia.
- Testează cu un exemplu ușor, unul la limită și unul invalid.
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.
| Caz | Interpretare | Răspuns |
|---|---|---|
a != 0 | ecuație obișnuită | calculezi -b/a |
a == 0 și b == 0 | egalitate adevărată mereu | infinit de soluții |
a == 0 și b != 0 | egalitate imposibilă | fără soluție |
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.
| Delta | Ce înseamnă | Ce face programul |
|---|---|---|
delta < 0 | nu sunt soluții reale | nu folosește sqrt |
delta == 0 | o soluție dublă | calculează -b/(2*a) |
delta > 0 | două soluții reale | calculează ambele valori |
- Citești coeficienții
a,bșic. - Verifici dacă
aeste diferit de zero. - Calculezi discriminantul.
- Alegi ramura după semnul discriminantului.
- Afișezi un mesaj diferit pentru fiecare caz.
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ă.
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.
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.
| Calcul | Ai nevoie de | Ai grijă la |
|---|---|---|
| distanță | două puncte | sqrt și double |
| perimetru | trei distanțe | ordine corectă a punctelor |
| arie Heron | trei laturi valide | radical din valoare nenegativă |
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.
- Afișezi opțiunile: distanță, perimetru triunghi, arie, coliniaritate, clasificare, ieșire.
- Citești alegerea într-o variabilă întreagă.
- În fiecare ramură citești doar punctele necesare pentru calculul ales.
- Calculezi laturile cu funcția de distanță atunci când ai nevoie de ele.
- Afișezi rezultatul cu text clar, de exemplu
Distanta = ...sauPunctele sunt coliniare.
| Opțiune | Idee de calcul | Ai grijă la |
|---|---|---|
| Distanță | sqrt(dx*dx + dy*dy) | <cmath> și double |
| Perimetru | suma celor trei laturi | laturile se obțin din puncte |
| Arie Heron | sqrt(s*(s-a)*(s-b)*(s-c)) | triunghi valid înainte de radical |
| Coliniaritate | arie/determinant egal cu zero | pentru 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.
| Corp | Formula | Verificare |
|---|---|---|
| Cub | l*l*l | l > 0 |
| Sferă | 4.0/3 * PI * r*r*r | r > 0 |
| Cilindru | PI * r*r * h | r > 0, h > 0 |
| Con | PI * r*r * h / 3 | r > 0, h > 0 |
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șiwhile. - Poți transforma o formulă într-o expresie C++ cu paranteze corecte.
- Poți afișa rezultate cu text, nu doar cu numere izolate.