bogdanNiculeasa

Afisare fractii reductibile ordonate crescator

Jan 18th, 2023
984
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.51 KB | None | 0 0
  1. #include <iostream>
  2. #include<string.h>
  3. #include <ctype.h>
  4. using namespace std;
  5.  
  6.  
  7. struct fractie {
  8.     int numarator;
  9.     int numitor;
  10. } f1, f2;
  11.  
  12. int aflaCMMDC(int a, int b);
  13. int comparaFractii(struct fractie f1, struct fractie f2);
  14. void sorteazaSirDeFractii(struct fractie fractii[], int n);
  15. void simplificaFractiileDinSir(struct fractie fractii[], int n);
  16. fractie simplificareFractie(struct fractie f1);
  17.  
  18. // 3/6 2/8 2/20
  19. int main()
  20. {
  21.     int n;
  22.     cout << "Cate fractii doriti sa introduceti: ";
  23.     cin >> n;
  24.     struct fractie fractii[50];
  25.     int i = 0;
  26.     while (i < n && i < 50) {
  27.         cout << "Introduceti numaratorul pentru fractia #" << (i + 1) << ": ";
  28.         cin >> fractii[i].numarator;
  29.         cout << "Introduceti numitorul pentru fractia #" << (i + 1) << ": ";
  30.         cin >> fractii[i].numitor;
  31.         i++;
  32.     }
  33.  
  34.     simplificaFractiileDinSir(fractii, n);
  35.     sorteazaSirDeFractii(fractii, n);
  36.  
  37.     for (int i = 0; i < n; i++) {
  38.         cout << "Fractia #" << (i + 1) << ": ";
  39.         cout << fractii[i].numarator << " / " << fractii[i].numitor << endl;
  40.     }
  41.     return 0;
  42. }
  43. void sorteazaSirDeFractii(struct fractie fractii[], int n) {
  44.     for (int i = 0; i < n; i++) {
  45.         for (int j = 0; j < n-1; j++) {
  46.             if (comparaFractii(fractii[j], fractii[j + 1]) == 1) {
  47.                 struct fractie aux = fractii[j];
  48.                 fractii[j] = fractii[j + 1];
  49.                 fractii[j + 1] = aux;
  50.             }
  51.         }
  52.     }
  53. }
  54.  
  55. void simplificaFractiileDinSir(struct fractie fractii[], int n) {
  56.     for (int i = 0; i < n; i++) {
  57.         fractii[i] = simplificareFractie(fractii[i]);
  58.     }
  59. }
  60.  
  61. fractie simplificareFractie(struct fractie f1) {
  62.     int cmmdc = aflaCMMDC(f1.numarator, f1.numitor);
  63.     f1.numarator = f1.numarator / cmmdc;
  64.     f1.numitor = f1.numitor / cmmdc;
  65.  
  66.     return f1;
  67. }
  68.  
  69.  
  70. /*
  71. * Daca f1 > f2 => returnam 1
  72. * Daca f1 < f2 => returnam -1
  73. * Daca sunt egale, returnam 0
  74. * Similar cu mecanismul din strcmp
  75. */
  76. int comparaFractii(struct fractie f1, struct fractie f2) {
  77.     double rezultatFractie1 = 1.0 * f1.numarator / f1.numitor;
  78.     double rezultatFractie2 = 1.0 * f2.numarator / f2.numitor;
  79.     if (rezultatFractie1 > rezultatFractie2) {
  80.         return 1;
  81.     }
  82.     else if (rezultatFractie1 < rezultatFractie2) {
  83.         return -1;
  84.     }
  85.     else {
  86.         return 0;
  87.     }
  88. }
  89.  
  90. int aflaCMMDC(int a, int b) {
  91.     int rest;
  92.     while (b != 0) {
  93.         rest = a % b;
  94.         a = b;
  95.         b = rest;
  96.     }
  97.     return a;
  98. }
  99.  
  100.  
Advertisement
Add Comment
Please, Sign In to add comment