De ce contează?
La o pizza tăiată în 12 felii, mănânci 8. Câtă pizza ai mâncat? 8/12. Dar e mai simplu de spus „2/3" — aceeași cantitate, cu numere mai mici. Simplificarea fracțiilor este exact asta: exprimi același raport în forma cea mai clară posibilă.
Cum se simplifică o fracție?
O fracție p/q se simplifică împărțind atât numărătorul, cât și numitorul cu CMMDC(p, q):
12/18:
CMMDC(12, 18) = 6
12/6 = 2, 18/6 = 3
Forma ireductibilă: 2/3Rezultatul este ireductibil deoarece după împărțire CMMDC(p/d, q/d) = 1 — nu mai există factor comun.
Dacă CMMDC(p, q) = 1, fracția e deja ireductibilă. Împărțirea cu 1 o lasă neschimbată — nu trebuie tratat separat acest caz. Codul funcționează corect indiferent.
Implementare C++
#include <iostream>
using namespace std;
int cmmdc(int a, int b) {
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
int p, q;
cin >> p >> q;
int d = cmmdc(p, q);
cout << p / d << "/" << q / d << endl;
return 0;
}Exemplu: Input 12 18 → 2/3
Cazuri speciale — fracții negative
// Conventie: semnul negativ la numarator, numitor pozitiv
if (q < 0) { p = -p; q = -q; }
int d = cmmdc(abs(p), q);
cout << p / d << "/" << q / d;Complexitate
| Caz | Timp | Spațiu |
|---|---|---|
| Simplificare fracție | O(log(min(p,q))) | O(1) |
Greșeala 1: Simplifici cu un număr oarecare, nu cu CMMDC. Dacă simplifici 12/18 cu 2 obții 6/9 — reducție parțial corectă, dar nu ireductibilă. Trebuie neapărat CMMDC pentru forma finală.
Greșeala 2: Împarți doar numărătorul sau doar numitorul. Dacă schimbi unul fără celălalt, modifici valoarea fracției — nu mai e echivalentă cu originalul.
Greșeala 3: Aplici cmmdc direct pe numere negative. a % b în C++ poate fi negativ pentru a < 0. Lucrează cu abs(p) și asigură-te că q > 0.