Tucancitto

Lab1 - Pb5

Mar 3rd, 2021 (edited)
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. int cmmdc(int x, int y)
  5. {
  6.     int r;
  7.     while (y)
  8.     {
  9.         r = x % y;
  10.         x = y;
  11.         y = r;
  12.     }
  13.     return x;
  14. }
  15.  
  16. int cmmmc(int x, int y)
  17. {
  18.     return x * y / cmmdc(x, y);
  19. }
  20.  
  21. struct Fractie
  22. {
  23.     int numarator, numitor;
  24.  
  25.     void citireFractie()
  26.     {
  27.         std::cin >> numarator >> numitor;
  28.     }
  29.     void afisareFractie()
  30.     {
  31.         std::cout << numarator << "/" << numitor << "  ";
  32.     }
  33.  
  34.  
  35.     void reductieFractie()
  36.     {
  37.         int aux = numarator;
  38.         numarator = numarator / cmmdc(numarator, numitor);
  39.         numitor = numitor / cmmdc(aux, numitor);
  40.     }
  41.     void formaZecimala()
  42.     {
  43.         std::cout << (float)numarator / numitor << "  ";
  44.     }
  45.  
  46.  
  47.     Fractie adunare(Fractie F)
  48.     {
  49.         Fractie sum = { 0,1 };
  50.         sum.numitor = cmmmc(numitor, F.numitor);
  51.         sum.numarator = numarator * (sum.numitor / numitor) + F.numarator * (sum.numitor / F.numitor);
  52.         return sum;
  53.     }
  54.     Fractie scadere(Fractie F)
  55.     {
  56.         Fractie dif = { 0,1 };
  57.         dif.numitor = cmmmc(numitor, F.numitor);
  58.         dif.numarator = numarator * (dif.numitor / numitor) - F.numarator * (dif.numitor / F.numitor);
  59.         return dif;
  60.     }
  61.     Fractie inmultire(Fractie F)
  62.     {
  63.         Fractie prod = { 0,1 };
  64.         prod.numarator = numarator * F.numarator;
  65.         prod.numitor = numitor * F.numitor;
  66.         return prod;
  67.     }
  68.     Fractie impartire(Fractie F)
  69.     {
  70.         Fractie div = { 0,1 };
  71.         div.numarator = numarator * F.numitor;
  72.         div.numitor = numitor * F.numarator;
  73.         return div;
  74.     }
  75.  
  76. };
  77.  
  78. Fractie* citire(int& nrFractii)
  79. {
  80.     std::cin >> nrFractii;
  81.     Fractie* vectorFractii = new Fractie[nrFractii];
  82.  
  83.     for (int index = 0; index < nrFractii; ++index)
  84.         vectorFractii[index].citireFractie();
  85.     return vectorFractii;
  86. }
  87.  
  88. void afisare(Fractie* vectorFractii, int nrFractii)
  89. {
  90.     for (int index = 0; index < nrFractii; ++index)
  91.         vectorFractii[index].afisareFractie();
  92.     std::cout << std::endl;
  93. }
  94.  
  95. void reductie(Fractie* vectorFractii, int nrFractii)
  96. {
  97.     for (int index = 0; index < nrFractii; ++index)
  98.         vectorFractii[index].reductieFractie();
  99. }
  100.  
  101. void transformareInZecimal(Fractie* vectorFractii, int nrFractii)
  102. {
  103.     for (int index = 0; index < nrFractii; ++index)
  104.         vectorFractii[index].formaZecimala();
  105.     std::cout << std::endl;
  106. }
  107.  
  108. bool comparator(Fractie F1, Fractie F2)
  109. {
  110.     F1 = F1.scadere(F2);
  111.     return (F1.numarator < 0);
  112. }
  113.  
  114. Fractie sumaFractii(Fractie* vectorFractii, int nrFractii)
  115. {
  116.     Fractie suma = vectorFractii[0];
  117.     for (int index = 1; index < nrFractii; ++index)
  118.         suma = suma.adunare(vectorFractii[index]);
  119.     return suma;
  120. }
  121.  
  122. int main()
  123. {
  124.     int nrFractii;
  125.     Fractie* vectorFractii = citire(nrFractii);
  126.  
  127.     std::cout << "Fractiile aduse la forma ireductibila: \n";
  128.     reductie(vectorFractii, nrFractii);
  129.     afisare(vectorFractii, nrFractii);
  130.  
  131.     std::cout << "\nSortarea crescatoare a fractiilor: \n";
  132.     std::sort(vectorFractii, vectorFractii + nrFractii, comparator);
  133.     afisare(vectorFractii, nrFractii);
  134.  
  135.     transformareInZecimal(vectorFractii, nrFractii);
  136.  
  137.     std::cout << "\nSuma fractiilor: ";
  138.     Fractie suma = sumaFractii(vectorFractii, nrFractii);
  139.     suma.reductieFractie();
  140.     suma.afisareFractie();
  141.     suma.formaZecimala();
  142.  
  143.     delete[]vectorFractii;
  144.     return 0;
  145. }
Add Comment
Please, Sign In to add comment