Ce vei învăța astăzi?
Vom implementa formule pentru volumele corpurilor tridimensionale și vom folosi structura switch pentru a crea un calculator de volume.
Dicționar: Matematică ↔ C++ (Volumele)
| Simbol matematic | Cum se citește | În C++ | Observație |
|---|---|---|---|
| l | „l la puterea a treia" | l*l*l | sau pow(l,3) |
| r | „r pătrat" | r*r | sau pow(r,2) |
| π | „pi" (3.14159...) | M_PI sau const double PI=3.14159265; | <cmath> |
| 4/3 | „patru treimi" | 4.0/3 | 4/3 = 1 (int)! |
| √(r+h) | „radical din r+h" | sqrt(r*r + h*h) | generatoarea conului |
| 2πr(r+h) | „2 pi r ori (r+h)" | 2*PI*r*(r+h) | suprafața cilindrului |
De ce studiem volumele?
Analogie: Cât lichid încape?
Volumul ne spune „cât spațiu ocupă" un corp. Aplicații practice: cât apă încape într-un rezervor cilindric, cât aer are un balon sferic, sau cât beton trebuie turnat într-o fundație (paralelipiped). Un program care calculează volume e un instrument util în inginerie!
Formulele volumelor
| Corp | Formulă volum | Formulă suprafață | Parametri | Exemplu |
|---|---|---|---|---|
| Cub | V = l | S = 6l | l = latura | l=3 → V=27, S=54 |
| Paralelipiped | V = L·l·h | S = 2(Ll + Lh + lh) | L, l, h | 2×3×4 → V=24 |
| Sferă | V = 4/3 · π · r | S = 4πr | r = raza | r=2 → V≈33.51 |
| Cilindru | V = π · r · h | S = 2πr(r+h) | r, h | r=3, h=5 → V≈141.37 |
| Con | V = π · r · h / 3 | S = πr(r+g), g=√(r+h) | r, h, g=generatoare | r=3, h=5 → V≈47.12 |
Fiecare formulă în C++:
Relație importantă: Cilindru vs. Con
Un con are exact 1/3 din volumul cilindrului cu aceeași rază și înălțime. V_con = V_cilindru / 3. Dacă turnăm apă din 3 conuri identice, umplem exact 1 cilindru!
Constanta π: În C++ folosim const double PI = 3.14159265358979; sau M_PI din <cmath>.
Calculator de volume cu switch
Algoritmul (Pseudocod):
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14159265358979;
int main() {
int opt;
double l, L, h, r;
do {
cout << "\n=== CALCULATOR DE VOLUME ===" << endl;
cout << "1. Cub" << endl;
cout << "2. Paralelipiped" << endl;
cout << "3. Sfera" << endl;
cout << "4. Cilindru" << endl;
cout << "5. Con" << endl;
cout << "0. Iesire" << endl;
cout << "Alege: ";
cin >> opt;
switch(opt) {
case 1:
cout << "Latura cubului: "; cin >> l;
if(l <= 0) { cout << "Eroare: latura trebuie sa fie pozitiva!" << endl; break; }
cout << "Volumul = " << l*l*l << endl;
cout << "Suprafata = " << 6*l*l << endl;
break;
case 2:
cout << "Lungime, latime, inaltime: ";
cin >> L >> l >> h;
cout << "Volumul = " << L*l*h << endl;
cout << "Suprafata = " << 2*(L*l + L*h + l*h) << endl;
break;
case 3:
cout << "Raza sferei: "; cin >> r;
if(r <= 0) { cout << "Eroare: raza trebuie sa fie pozitiva!" << endl; break; }
cout << "Volumul = " << (4.0/3)*PI*r*r*r << endl;
cout << "Suprafata = " << 4*PI*r*r << endl;
break;
case 4:
cout << "Raza si inaltimea cilindrului: ";
cin >> r >> h;
cout << "Volumul = " << PI*r*r*h << endl;
cout << "Suprafata = " << 2*PI*r*(r+h) << endl;
break;
case 5: {
cout << "Raza si inaltimea conului: ";
cin >> r >> h;
cout << "Volumul = " << PI*r*r*h/3 << endl;
double g = sqrt(r*r + h*h);
cout << "Suprafata = " << PI*r*(r+g) << endl;
break;
}
case 0:
cout << "La revedere!" << endl;
break;
default:
cout << "Optiune invalida!" << endl;
}
} while(opt != 0);
return 0;
}
Urmărire: V_sferă (r=2)
| Pas | Operație manuală | Expresie C++ | Valoare |
|---|---|---|---|
| 1 | r = 2 = 8 | r*r*r | 8 |
| 2 | 4/3 = 1.333... | 4.0/3 | 1.333 |
| 3 | 1.333 × π × 8 | (4.0/3)*PI*8 | 33.51 |
Cu 4/3 (fără .0): 1 × 3.14 × 8 = 25.13 — GREȘIT! Pierdem 25% din volum!
Greșeli frecvente și cum le eviți
| Corp | Formulă C++ | Greșeală frecventă | Corect |
|---|---|---|---|
| Cub | l*l*l | pow(l,3) fără <cmath> | Include <cmath> sau folosește l*l*l |
| Sferă | (4.0/3)*PI*r*r*r | 4/3*PI*r*r*r → 4/3=1! | Scrie 4.0/3 |
| Cilindru | PI*r*r*h | Uită h (confuzie cu aria cercului) | Verifică: cilindru = cerc × h |
| Con | PI*r*r*h/3 | Scrie PI*r*r/3*h (greșit!) | Operațiile se execută stânga→dreapta |
Capcana 4/3: 4/3 = 1 în C++ deoarece ambii sunt int. Soluția: 4.0/3 sau (double)4/3. Testează mereu cu valori cunoscute (ex: r=1 → V_sferă ≈ 4.189).
Validarea datelor: Raza și dimensiunile trebuie să fie pozitive. Adaugă if(r <= 0) înainte de calcul.
Verificare cunoștințe
1. Ce valoare are 4/3 în C++ (cu int)?
2. Volumul unui cilindru cu r=2, h=5 este:
3. Relația dintre V_cilindru și V_con cu aceleași r și h:
4. Volumul sferei cu r=1 este aproximativ:
5. Cum declari PI corect în C++?
6. Suprafața sferei de rază r este:
Întrebări frecvente (FAQ)
Formula V = 4πr/3 vine din integrare (calcul integral). Intuitiv: sfera ocupă circa 52% din cubul care o înconjoară (2r × 2r × 2r = 8r, iar 4πr/3 ≈ 4.19r ≈ 52% din 8r).
Da, dar r*r*r e mai rapid pentru puteri mici. pow() e util la puteri mari sau fracționare. Nu uita #include <cmath> dacă folosești pow!
Generatoarea este linia oblică de la vârf la baza cercului. Se calculează cu Pitagora: g = √(r + h), unde r e raza bazei și h e înălțimea. E necesară pentru suprafața laterală a conului.
Intuitiv: conul e „ascuțit" — secțiunile sale transversale se micșorează de la bază la vârf. Matematic, se demonstrează prin integrare. La fel, piramida = prismă / 3 (cu aceeași bază și înălțime).
PbInfo - Volumul cubului
Formula l^3
Enunț:
Cerință: Se citeste latura unui cub. Afiseaza volumul.
Date de intrare:
l.
Date de ieșire:
Volumul cubului.
Exemplu:
Intrare:
3
Ieșire:
27
Explicație: 3^3=27.
Cum gândim soluția:
- Citim l.
- Calculam l*l*l.
- Afisam rezultatul.
Tip: Pentru l intreg, rezultatul poate fi intreg.
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
double l;
cin >> l;
cout << l * l * l;
}
PbInfo - Volumul cilindrului
Formula pi*r*r*h
Enunț:
Cerință: Se citesc raza si inaltimea cilindrului. Afiseaza volumul cu doua zecimale.
Date de intrare:
r h.
Date de ieșire:
Volumul cilindrului.
Exemplu:
Intrare:
2 5
Ieșire:
62.83
Explicație: pi*2*2*5=62.83.
Cum gândim soluția:
- Definim pi=3.14159.
- Calculam pi*r*r*h.
- Afisam cu doua zecimale.
Tip: Include <iomanip> pentru fixed si setprecision(2), adica afisare cu doua zecimale.
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
const double pi = 3.14159;
double r, h;
cin >> r >> h;
// Enuntul cere doua zecimale: 62.8318 devine 62.83.
cout << fixed << setprecision(2) << pi * r * r * h;
}
PbInfo - Calculator de volume
Switch pentru corpuri
Enunț:
Cerință: Se citeste un cod: 1 cub, 2 sfera, 3 cilindru, 4 con. Afiseaza volumul.
Date de intrare:
Codul corpului si dimensiunile cerute.
Date de ieșire:
Volumul calculat.
Exemplu:
Intrare:
4 3 6
Ieșire:
56.55
Explicație: Pentru con: pi*r*r*h/3.
Cum gândim soluția:
- Citim codul.
- Cu switch alegem formula.
- Citim doar dimensiunile necesare.
- Afisam volumul.
Tip: Pentru meniuri, switch este mai clar decat multe if-uri.
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
const double pi = 3.14159;
int op;
cin >> op;
double r, h, l, V = 0;
switch (op) {
case 1:
cin >> l;
V = l * l * l;
break;
case 2:
cin >> r;
V = (4.0 / 3) * pi * r * r * r;
break;
case 3:
cin >> r >> h;
V = pi * r * r * h;
break;
case 4:
cin >> r >> h;
V = pi * r * r * h / 3;
break;
}
// Afisam cu doua zecimale deoarece exemplele de volum sunt zecimale.
cout << fixed << setprecision(2) << V;
}
Exercițiul Practic: Volume și suprafețe
Aplică formulele volumelor și suprafețelor pentru corpuri regulate, cu comparații și sortări simple. Poți lucra în calculatorul cu meniu sau în programe separate mai mici.
Mai multe variante corecte: dacă scopul este să verifici formula, un program separat este suficient. Dacă scopul este să exersezi meniul, folosește switch. În ambele variante, explică prin nume de variabile clare ce reprezintă r, h, g, V și S.
Sarcina 1: Suprafața totală completă
Completează programul pentru a afișa și suprafața totală la corpurile lucrate. Poți completa toate corpurile sau poți alege 2-3 corpuri și să explici formulele foarte clar.
Pași de rezolvare:
- La fiecare case, după afișarea volumului, adaugă calcul suprafață
- Cub:
6*l*l; Sferă:4*PI*r*r - Cilindru:
2*PI*r*(r+h); Con:PI*r*(r+g)cug=sqrt(r*r+h*h)
De ce funcționează? Suprafața totală = suma tuturor fețelor. La cub: 6 fețe identice de l. La sferă: formula 4πr (dată). La cilindru: 2 cercuri (baze) + dreptunghiul lateral desfășurat = 2πr + 2πrh = 2πr(r+h). La con: cercul bazei + suprafața laterală desfășurată = πr(r+g), unde g = generatoarea (ipotenuza triunghiului r,h).
// La fiecare case, dupa volum, adaugi suprafata totala:
case 1: // Cub: 6 fete identice de l*l
cout << "Suprafata = " << 6*l*l << endl; break;
case 3: // Sfera: formula 4*PI*r^2
cout << "Suprafata = " << 4*PI*r*r << endl; break;
case 4: // Cilindru: 2 cercuri + suprafata laterala
// S = 2*PI*r*r + 2*PI*r*h = 2*PI*r*(r+h)
cout << "Suprafata = " << 2*PI*r*(r+h) << endl; break;
case 5: { // Con: cerc baza + suprafata laterala
double g = sqrt(r*r + h*h); // generatoarea (Pitagora!)
// S = PI*r*r + PI*r*g = PI*r*(r+g)
cout << "Suprafata = " << PI*r*(r+g) << endl; break;
}
Sarcina 2: Comparație volume
Citește r și h, calculează volumele sferei, cilindrului și conului, apoi afișează-le crescător. Poți sorta cu trei if-uri și swap, cu un vector mic, sau poți afișa manual dacă observi relațiile dintre valori.
Pași de rezolvare:
- Citește r și h
- Calculează:
vs=(4.0/3)*PI*r*r*r,vc=PI*r*r*h,vn=PI*r*r*h/3 - Sortează cele 3 volume (cu swap) și afișează crescător
De ce funcționează? Conul are MEREU volumul cel mai mic (= cilindru/3). Sfera vs. cilindru depinde de raportul h/r. Sortarea cu 3 comparații + swap este Bubble Sort pentru 3 elemente — simplu și garantat corect. Folosim 4.0/3 (nu 4/3) pentru a evita împărțirea întreagă (4/3=1 în C++!).
#include <iostream>
#include <cmath>
using namespace std;
int main(){
const double PI = 3.14159265;
double r, h;
cin >> r >> h;
// Calculam cele 3 volume
double vs = (4.0/3)*PI*r*r*r; // sfera (4.0/3 nu 4/3!)
double vc = PI*r*r*h; // cilindru
double vn = PI*r*r*h/3; // con (= cilindru / 3)
// Sortare 3 valori cu metoda bulelor (3 swap-uri)
double a=vs, b=vc, c=vn;
if(a > b) swap(a,b); // pas 1: pune minimul in a
if(b > c) swap(b,c); // pas 2: pune maximul in c
if(a > b) swap(a,b); // pas 3: verifica din nou a vs b
cout << a << " < " << b << " < " << c;
return 0;
}