Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

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 de boiustef
3

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:

Răspuns de CinevaFaraNume
2

#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.

 \text{La adunare:}\\ \\ \text{Fie }e = cmmmc(b,d)\\ \\ \dfrac{a}{b} + \dfrac{c}{d} = \dfrac{a^*e/b + c^*e/d}{e}\\ \\ \text{Apoi impartim numaratorul si numitorul la cel mai}\\ \text{mare divizor comun sa obtinem fractia ireductibila.}

 \text{La inmultire:}\\ \\ \dfrac{a}{b}\cdot \dfrac{c}{d} = \dfrac{ac}{bd} \\ \\ \text{La fel, impartim la cmmdc}

\text{Nota:} cmmmc(a,b) = \dfrac{ab}{cmmdc(a,b)}

Alte întrebări interesante