Aplicatii de Fizica in C++

Sa inveti despre Aplicatii de Fizica in C++

Atom 1

Concept 1

šŸ’” De ce rezolvam probleme de fizica cu C++?

Fizica este plina de formule matematice. Cand ai de calculat aceeasi formula de 10 ori cu date diferite, un program C++ face treaba in cateva secunde. Imaginea-ti ca esti inginer si trebuie sa calculezi distanta de franare pentru 50 de masini diferite - nu vei face asta manual!

In aceasta lectie vom transforma formulele pe care le inveti la fizica in programe C++. Procesul este mereu acelasi:

1 Identifica variabilele - ce date ai nevoie? (masa, viteza, timp, etc.)

2 Declara variabilele - foloseste float pentru valori cu zecimale

3 Citeste datele - cu cin de la tastatura

4 Aplica formula - traduce formula matematica in C++

5 Afiseaza rezultatul - cu unitatea de masura corecta

šŸ’” Sfat important

Foloseste mereu float sau double pentru variabilele de fizica, nu int. Valorile fizice au aproape intotdeauna zecimale (de exemplu: 9.8 m/s², 3.14, 0.5 secunde). Daca folosesti int, pierzi precizia si rezultatele vor fi gresite.

Programarea este folosita in fizica la toate nivelurile: de la simulari simple ca cele din aceasta lectie, pana la modelarea vremii, proiectarea avioanelor sau simularea Big Bang-ului. NASA foloseste programe C++ pentru a calcula traiectoriile rachetelor. Fiecare program incepe exact ca al tau: variabile, formule, afisare.

In aceasta lectie vom acoperi 6 formule esentiale: MRU (distanta), MRUV (acceleratie), energia cinetica, caderea libera, conversia de temperatura si energia potentiala. Pentru fiecare formula vei vedea codul complet, o executie pas cu pas si sfaturi practice.

šŸš€ Miscare rectilinie uniforma (MRU)

Miscarea rectilinie uniforma inseamna ca un obiect se deplaseaza in linie dreapta cu viteza constanta. Gandeste-te la un tren care merge cu 100 km/h pe o cale dreapta, fara sa accelereze sau sa franeze.

Formula:

d = v * t

d = distanta (metri), v = viteza (m/s), t = timp (secunde)

Din aceasta formula putem extrage: v = d / t si t = d / v

Iata programul complet care calculeaza distanta parcursa:

#include <iostream> using namespace std; int main() { float viteza, timp, distanta; cout << "Viteza (m/s): "; cin >> viteza; cout << "Timpul (s): "; cin >> timp; distanta = viteza * timp; cout << "Distanta parcursa: " << distanta << " metri" << endl; return 0; }

Executie pas cu pas - daca introducem viteza = 15 si timp = 4:

PasActiunevitezatimpdistanta
1Declarare variabile???
2cin >> viteza (15)15??
3cin >> timp (4)154?
4distanta = 15 * 415460
5Afiseaza: "60 metri"15460
šŸš€ Ruleaza pe OnlineGDB

šŸ’” Observatie importanta

Din formula d = v * t putem extrage celelalte doua formule prin operatii inverse. Daca vrem viteza, impartim distanta la timp: v = d / t. Daca vrem timpul, impartim distanta la viteza: t = d / v. In C++ putem scrie un program care calculeaza oricare dintre cele trei, in functie de ce date are utilizatorul. Aceasta flexibilitate este unul dintre avantajele programarii fata de calculul manual.

šŸŽÆ Miscare rectilinie uniform variata (MRUV)

MRUV descrie o miscare in linie dreapta unde viteza creste sau scade uniform. De exemplu, o masina care accelereaza de la semafor sau o minge care se rostogoleste si incetineste din cauza frecarii.

Formula distantei:

d = v0 * t + (a * t2) / 2

v0 = viteza initiala (m/s), a = acceleratia (m/s2), t = timp (s)

Atentie la traducerea formulei in C++. In matematica scriem t2, dar in C++ nu exista operator de ridicare la putere cu ^. Trebuie sa scriem t * t:

#include <iostream> using namespace std; int main() { float v0, a, t, d; cout << "Viteza initiala (m/s): "; cin >> v0; cout << "Acceleratia (m/s^2): "; cin >> a; cout << "Timpul (s): "; cin >> t; d = v0 * t + (a * t * t) / 2; cout << "Distanta parcursa: " << d << " m" << endl; // Bonus: calculam si viteza finala float vf = v0 + a * t; cout << "Viteza finala: " << vf << " m/s" << endl; return 0; }

Exemplu concret: O masina porneste de pe loc (v0 = 0) si accelereaza cu a = 2 m/s2 timp de t = 5 secunde:

VariabilaValoareCalcul
v00 m/scitit de la tastatura
a2 m/s2citit de la tastatura
t5 scitit de la tastatura
d25 m0*5 + (2*5*5)/2 = 0 + 50/2 = 25
vf10 m/s0 + 2*5 = 10

⚠ Greseala frecventa

Multi elevi scriu a * t^2 in loc de a * t * t. In C++, operatorul ^ este XOR (operatie pe biti), NU ridicare la putere! Rezultatul va fi complet gresit. Mereu scrie t * t pentru t2.

Un caz special de MRUV este franarea. Cand o masina franeaza, acceleratia este negativa (incetineste). De exemplu, daca o masina merge cu 20 m/s si franeaza cu a = -4 m/s2, dupa 5 secunde va avea viteza: vf = 20 + (-4)*5 = 0 m/s (s-a oprit). Distanta de franare: d = 20*5 + (-4*5*5)/2 = 100 - 50 = 50 m.

Aceasta informatie este utila in viata reala: distanta de franare creste cu patratul vitezei. O masina care merge de doua ori mai repede are nevoie de de patru ori mai mult spatiu pentru a se opri. De aceea limitele de viteza in oras sunt mai mici.

šŸ’” Energia cinetica

Energia cinetica este energia pe care o are un corp datorita miscarii. Cu cat un obiect este mai greu si se misca mai repede, cu atat are mai multa energie cinetica. De aceea un camion care merge cu 80 km/h este mult mai periculos decat o bicicleta la aceeasi viteza.

Formula:

Ec = (m * v2) / 2

m = masa (kg), v = viteza (m/s), Ec = energie cinetica (Jouli)

#include <iostream> using namespace std; int main() { float masa, viteza, energie; cout << "Masa (kg): "; cin >> masa; cout << "Viteza (m/s): "; cin >> viteza; energie = (masa * viteza * viteza) / 2; cout << "Energia cinetica: " << energie << " Jouli" << endl; // Comparatie: este energie mare sau mica? if (energie < 100) cout << "Energie mica (jucarie, minge)" << endl; else if (energie < 10000) cout << "Energie medie (biciclist, alergator)" << endl; else cout << "Energie mare (masina, camion)" << endl; return 0; }

Observa cum am adaugat o structura if-else pentru a clasifica energia. Combinarea formulelor cu decizii este un pas important in programare - nu doar calculam, ci si interpretam rezultatul.

Executie pas cu pas - daca introducem masa = 2 si viteza = 10:

PasActiunemasavitezaenergie
1Declarare variabile???
2cin >> masa (2)2??
3cin >> viteza (10)210?
4energie = (2*10*10)/2210100
5100 < 10000 => "medie"210100

Observa ca viteza conteaza mai mult decat masa: daca dublezi masa, energia se dubleaza, dar daca dublezi viteza, energia se cvadrupleaza (pentru ca viteza este la patrat). Un obiect mic dar rapid poate avea mai multa energie decat unul mare dar lent.

🌠 Caderea libera

Caderea libera este miscarea unui corp care cade sub actiunea gravitatiei, fara alte forte (fara frecarea aerului). Pe Pamant, acceleratia gravitationala este g = 9.8 m/s2. Aceasta inseamna ca in fiecare secunda, viteza corpului creste cu 9.8 m/s.

Formulele caderii libere:

d = (g * t2) / 2

v = g * t

g = 9.8 m/s2 (constanta gravitationala), t = timp (s)

#include <iostream> using namespace std; int main() { const float g = 9.8; // constanta gravitationala float t, d, v; cout << "Timpul de cadere (s): "; cin >> t; d = (g * t * t) / 2; // distanta parcursa v = g * t; // viteza la impact cout << "Distanta de cadere: " << d << " m" << endl; cout << "Viteza la impact: " << v << " m/s" << endl; return 0; }

Cat de repede cade un obiect? Iata cateva exemple:

Timp (s)Distanta (m)Viteza (m/s)Echivalent
14.99.8Un etaj de bloc
219.619.6~5 etaje
344.129.4~11 etaje
5122.549.0~30 etaje

šŸ’” Ce inseamna const?

Cuvantul const declara o constanta - o valoare care nu se schimba niciodata in program. Gravitatia este mereu 9.8, deci o declaram const. Daca incerci sa modifici o constanta, compilatorul va da eroare. Este o practica buna sa folosesti const pentru valori fixe.

In realitate, caderea libera perfecta nu exista decat in vid (fara aer). In atmosfera, frecarea aerului incetineste caderea. De aceea o frunza cade mult mai incet decat o piatra, chiar daca gravitatia actioneaza la fel asupra ambelor. Totusi, pentru obiecte mici si dense (o minge, o piatra), formulele sunt suficient de precise.

Un experiment celebru: pe Luna (unde nu exista atmosfera), astronautul David Scott a lasat sa cada simultan un ciocan si o pana de pasare. Ambele au ajuns la sol in acelasi timp! Pe Pamant, pana ar fi cazut mult mai incet din cauza rezistentei aerului.

Pe Luna, gravitatia este de doar 1.62 m/s2 (de circa 6 ori mai mica decat pe Pamant). Modifica constanta g in program si observa diferentele - un obiect ar cadea mult mai incet pe Luna!

🌔 Conversie Celsius - Fahrenheit

In Romania si in cea mai mare parte a lumii folosim grade Celsius. In SUA si cateva alte tari se folosesc grade Fahrenheit. Cand citesti stiri din America si scrie "temperatura de 100°F", trebuie sa convertesti ca sa intelegi - sunt 37.8°C, adica foarte cald!

Formulele de conversie:

F = C * 9/5 + 32

C = (F - 32) * 5/9

Puncte de referinta: 0°C = 32°F (inghet), 100°C = 212°F (fierbere apa)

#include <iostream> using namespace std; int main() { float celsius, fahrenheit; cout << "Temperatura in Celsius: "; cin >> celsius; fahrenheit = celsius * 9.0 / 5.0 + 32; cout << celsius << "°C = " << fahrenheit << "°F" << endl; // Interpretam temperatura if (celsius < 0) cout << "Sub zero - ger!" << endl; else if (celsius < 15) cout << "Frig - ia geaca!" << endl; else if (celsius < 25) cout << "Temperatura placuta" << endl; else cout << "Cald!" << endl; return 0; }

⚠ Atentie la impartirea intreaga!

Scrie 9.0 / 5.0 si nu 9 / 5. In C++, daca imparti doua numere intregi, rezultatul este tot intreg: 9 / 5 = 1 (nu 1.8!). Adaugand .0 forteaza impartirea cu zecimale.

Tabel de referinta rapida:

CelsiusFahrenheitSemnificatie
-40-40Punctul unde C = F
032Apa ingheata
2068Temperatura camerei
3798.6Temperatura corpului
100212Apa fierbe

Un fapt interesant: la -40 de grade, Celsius si Fahrenheit sunt egale! Poti verifica: -40 * 9/5 + 32 = -72 + 32 = -40. Acesta este singurul punct unde cele doua scari coincid.

šŸ“ˆ Energia potentiala gravitationala

Energia potentiala gravitationala este energia pe care o are un corp datorita inaltimii la care se afla. O carte pe raft are energie potentiala - cand cade, aceasta energie se transforma in energie cinetica (miscare). Cu cat obiectul este mai greu si mai sus, cu atat are mai multa energie potentiala.

Formula:

Ep = m * g * h

m = masa (kg), g = 9.8 m/s2, h = inaltime (m)

const float g = 9.8; float masa, inaltime, ep; cout << "Masa (kg): "; cin >> masa; cout << "Inaltimea (m): "; cin >> inaltime; ep = masa * g * inaltime; cout << "Energia potentiala: " << ep << " J" << endl;

Exemplu practic: Un elev de 50 kg urca pe un munte de 100 m inaltime. Energia potentiala acumulata este: 50 * 9.8 * 100 = 49000 Jouli = 49 kJ. Aceasta este suficienta energie pentru a aprinde un bec de 100 W timp de 8 minute!

šŸ’” Legatura intre Ec si Ep

Cand un obiect cade de la inaltimea h, toata energia potentiala se transforma in energie cinetica. Deci Ep = Ec la momentul impactului: m * g * h = (m * v * v) / 2. Din aceasta relatie putem calcula viteza de impact fara sa stim timpul de cadere: v = sqrt(2 * g * h). Aceasta demonstreaza cum formulele fizice se leaga intre ele si cum programarea ne ajuta sa le combinam.

🌠 Rezumat: Traducerea formulelor in C++

Iata regulile de baza pentru a transforma orice formula de fizica in cod C++:

MatematicaC++Explicatie
x2x * xNu exista operator ^ pentru putere
a/b (cu zecimale)a / b cu floatFoloseste float, nu int
constanta (g, pi)const float g = 9.8;Declara cu const
radical (√x)sqrt(x)Include <cmath>
|x| (modul)abs(x)Include <cmath>

šŸ’” Sfat pentru teste

Cand rezolvi probleme de fizica in C++, verifica mereu rezultatul cu un calcul manual pe o valoare simpla. De exemplu, pentru MRU cu v=10 si t=5, distanta trebuie sa fie 50. Daca programul afiseaza altceva, ai o eroare in formula.

⚠ Top 3 greseli la probleme de fizica

1. Tipul de date gresit: Folosesti int in loc de float si pierzi zecimalele.

2. Operatorul ^ pentru putere: t^2 nu face ridicare la putere, ci XOR pe biti. Scrie t*t.

3. Impartirea intreaga: 9/5 = 1, nu 1.8. Foloseste 9.0/5.0 pentru rezultat corect.

šŸŽÆ PRACTICA

Exerseaza Formule de Fizica

Cursul te invata. Practica te face expert.

0/5
P1. Calculeaza viteza Usor

Citeste distanta d (metri) si timpul t (secunde), apoi calculeaza si afiseaza viteza folosind formula v = d / t. Afiseaza rezultatul cu unitatea de masura "m/s".

Exemple:
Input 100 20
Output Viteza: 5 m/s
Input 150 10
Output Viteza: 15 m/s
Formula: viteza = distanta / timp; - Foloseste tipul float pentru precizie!
šŸš€ OnlineGDB
P2. Celsius la Fahrenheit Usor

Citeste temperatura in grade Celsius si transforma in Fahrenheit folosind formula F = C * 9/5 + 32. Afiseaza rezultatul cu ambele unitati.

Exemple:
Input 0
Output 0°C = 32°F
Input 100
Output 100°C = 212°F
fahrenheit = celsius * 9.0 / 5.0 + 32; - Foloseste 9.0/5.0 pentru rezultat zecimal!
šŸš€ OnlineGDB
P3. Energia cinetica Mediu

Citeste masa m (kg) si viteza v (m/s), apoi calculeaza energia cinetica folosind formula Ec = (m * v2) / 2. Clasifica energia: sub 100 J = "mica", 100-10000 J = "medie", peste 10000 J = "mare".

Exemple:
Input 10 5
Output Ec = 125 J (medie)
Input 1000 20
Output Ec = 200000 J (mare)
energie = (masa * viteza * viteza) / 2; - viteza^2 se scrie ca viteza * viteza. Apoi foloseste if-else pentru clasificare.
šŸš€ OnlineGDB
P4. Simulator cadere libera Mediu

Citeste inaltimea h (metri) de la care cade un obiect. Calculeaza: timpul de cadere (t = sqrt(2*h/g)) si viteza la impact (v = g*t). Include <cmath> pentru functia sqrt().

Exemple:
Input 19.6
Output Timp: 2 s, Viteza: 19.6 m/s
Input 122.5
Output Timp: 5 s, Viteza: 49 m/s
Include #include <cmath>, apoi: float t = sqrt(2 * h / g); si float v = g * t;
šŸš€ OnlineGDB
šŸš€ Mini-Proiect: Calculator de fizica Proiect

Creeaza un program cu meniu care permite utilizatorului sa aleaga ce formula vrea sa calculeze. Urmeaza pasii:

1 Afiseaza un meniu: 1-MRU (distanta), 2-Energie cinetica, 3-Cadere libera, 4-Conversie C/F, 5-Iesire
2 Citeste optiunea utilizatorului si cere datele necesare pentru formula aleasa
3 Calculeaza si afiseaza rezultatul cu unitatea de masura corecta
4 Foloseste do-while ca meniul sa se repete pana cand utilizatorul alege 5 (Iesire)
Foloseste do { cout << "Meniu..."; cin >> opt; switch(opt) { case 1: /* MRU */ break; case 2: /* Ec */ break; ... } } while(opt != 5);

Practica

Nivel Minim

Exercitiu minim: Descrie pe scurt ce ai invatat in aceasta lectie.

Nivel Standard

Exercitiu standard: Aplica conceptele din lectie intr-un exemplu practic.

Nivel Performanta

Exercitiu performanta: Creeaza un proiect care demonstreaza cunostintele dobandite.

Recapitulare

Ce am invatat:

  • Am invatat despre Aplicatii de Fizica in C++