Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- int cmmdc(int x, int y)
- {
- int r;
- while (y)
- {
- r = x % y;
- x = y;
- y = r;
- }
- return x;
- }
- int cmmmc(int x, int y)
- {
- return x * y / cmmdc(x, y);
- }
- struct Fractie
- {
- int numarator, numitor;
- void citireFractie()
- {
- std::cin >> numarator >> numitor;
- }
- void afisareFractie()
- {
- std::cout << numarator << "/" << numitor << " ";
- }
- void reductieFractie()
- {
- int aux = numarator;
- numarator = numarator / cmmdc(numarator, numitor);
- numitor = numitor / cmmdc(aux, numitor);
- }
- void formaZecimala()
- {
- std::cout << (float)numarator / numitor << " ";
- }
- Fractie adunare(Fractie F)
- {
- Fractie sum = { 0,1 };
- sum.numitor = cmmmc(numitor, F.numitor);
- sum.numarator = numarator * (sum.numitor / numitor) + F.numarator * (sum.numitor / F.numitor);
- return sum;
- }
- Fractie scadere(Fractie F)
- {
- Fractie dif = { 0,1 };
- dif.numitor = cmmmc(numitor, F.numitor);
- dif.numarator = numarator * (dif.numitor / numitor) - F.numarator * (dif.numitor / F.numitor);
- return dif;
- }
- Fractie inmultire(Fractie F)
- {
- Fractie prod = { 0,1 };
- prod.numarator = numarator * F.numarator;
- prod.numitor = numitor * F.numitor;
- return prod;
- }
- Fractie impartire(Fractie F)
- {
- Fractie div = { 0,1 };
- div.numarator = numarator * F.numitor;
- div.numitor = numitor * F.numarator;
- return div;
- }
- };
- Fractie* citire(int& nrFractii)
- {
- std::cin >> nrFractii;
- Fractie* vectorFractii = new Fractie[nrFractii];
- for (int index = 0; index < nrFractii; ++index)
- vectorFractii[index].citireFractie();
- return vectorFractii;
- }
- void afisare(Fractie* vectorFractii, int nrFractii)
- {
- for (int index = 0; index < nrFractii; ++index)
- vectorFractii[index].afisareFractie();
- std::cout << std::endl;
- }
- void reductie(Fractie* vectorFractii, int nrFractii)
- {
- for (int index = 0; index < nrFractii; ++index)
- vectorFractii[index].reductieFractie();
- }
- void transformareInZecimal(Fractie* vectorFractii, int nrFractii)
- {
- for (int index = 0; index < nrFractii; ++index)
- vectorFractii[index].formaZecimala();
- std::cout << std::endl;
- }
- bool comparator(Fractie F1, Fractie F2)
- {
- F1 = F1.scadere(F2);
- return (F1.numarator < 0);
- }
- Fractie sumaFractii(Fractie* vectorFractii, int nrFractii)
- {
- Fractie suma = vectorFractii[0];
- for (int index = 1; index < nrFractii; ++index)
- suma = suma.adunare(vectorFractii[index]);
- return suma;
- }
- int main()
- {
- int nrFractii;
- Fractie* vectorFractii = citire(nrFractii);
- std::cout << "Fractiile aduse la forma ireductibila: \n";
- reductie(vectorFractii, nrFractii);
- afisare(vectorFractii, nrFractii);
- std::cout << "\nSortarea crescatoare a fractiilor: \n";
- std::sort(vectorFractii, vectorFractii + nrFractii, comparator);
- afisare(vectorFractii, nrFractii);
- transformareInZecimal(vectorFractii, nrFractii);
- std::cout << "\nSuma fractiilor: ";
- Fractie suma = sumaFractii(vectorFractii, nrFractii);
- suma.reductieFractie();
- suma.afisareFractie();
- suma.formaZecimala();
- delete[]vectorFractii;
- return 0;
- }
Add Comment
Please, Sign In to add comment