Buna!
Ma poate ajuta cineva cu o problema? Nu inteleg deloc fractiile in c++ si cum sa ii aduc la forma irreductibila.
#390 SPFractii
Clasa a 9-a Algoritmi elementari Divizibilitate SPFractii
Etichete: Algoritmul lui Euclid
Enunț
Blockly
Soluții
Cerinţa
Se dau 4 numere naturale a b c d, reprezentând fracţiile a/b şi c/d. Calculaţi suma şi produsul celor două fracţii, aduse la forma ireductibilă.
Date de intrare
Programul citește de la tastatură numerele a b c d.
Date de ieşire
Programul afișează pe ecran numerele m n, reprezentând numărătorul şi numitorul sumei celor două fracţii, redusă la forma ireductibilă, iar pe a doua linie numerele p q, reprezentând numărătorul şi numitorul produsului celor două fracţii, redus la forma ireductibilă.
Restricţii şi precizări
1 ≤ a, b, c, d ≤ 10000
Exemplu
Intrare
1 2 4 3
Ieșire
11 6
2 3
Explicație
Suma fracţiilor 1/2 şi 4/3 este 11/6, iar produsul este 2/3.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int cmmdc(int m, int n)
{
int t, x;
if (m>n) { t=m; m=n; n=t; }
int r;
while(n!=0)
{
r=m%n;
m=n;
n=r;
}
x=m;
return x;
}
int main()
{
int a, b, c, d, ss, numitor, ps,
numaratorprodus, numitorprodus, numaratorsuma, numitorsuma;
cin >> a >> b >> c >> d;
ss=a*d+b*c; numitor=b*d; ps=a*c;
numaratorsuma=ss/cmmdc(ss,numitor);
numitorsuma= numitor/cmmdc(ss,numitor);
numaratorprodus=ps/cmmdc(ps,numitor);
numitorprodus=numitor/cmmdc(ps,numitor);
cout << numaratorsuma << " " << numitorsuma << endl;
cout << numaratorprodus << " " << numitorprodus << "\n";
return 0;
}
Explicație:
#include <iostream>
using namespace std;
unsigned long long int cmmdc(unsigned long long int a,unsigned long long int b){
unsigned long long int r;
while(b){
r = a%b;
a = b;
b = r;
}
return a;
}
int main(){
unsigned long long int a,b,c,d;
cin >> a >> b >> c >> d;
// pentru adunare
unsigned long long int frac_numitor = b*d/cmmdc(b,d);
unsigned long long int frac_numarator = a * frac_numitor / b + c * frac_numitor / d;
unsigned long long int cmmdc_frac = cmmdc(frac_numitor, frac_numarator);
frac_numitor /= cmmdc_frac;
frac_numarator /= cmmdc_frac;
cout << frac_numarator << ' ' << frac_numitor << '\n';
// pentru inmultire
frac_numitor = b*d;
frac_numarator = a*c;
cmmdc_frac = cmmdc(frac_numitor, frac_numarator);
frac_numitor /= cmmdc_frac;
frac_numarator /= cmmdc_frac;
cout << frac_numarator << ' ' << frac_numitor << '\n';
}
O fractie este ireductibila daca numitorul si numaratorul sunt numere prime intre ele.