Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<string.h>
- #include <ctype.h>
- using namespace std;
- struct fractie {
- int numarator;
- int numitor;
- } f1, f2;
- int aflaCMMDC(int a, int b);
- int comparaFractii(struct fractie f1, struct fractie f2);
- void sorteazaSirDeFractii(struct fractie fractii[], int n);
- void simplificaFractiileDinSir(struct fractie fractii[], int n);
- fractie simplificareFractie(struct fractie f1);
- // 3/6 2/8 2/20
- int main()
- {
- int n;
- cout << "Cate fractii doriti sa introduceti: ";
- cin >> n;
- struct fractie fractii[50];
- int i = 0;
- while (i < n && i < 50) {
- cout << "Introduceti numaratorul pentru fractia #" << (i + 1) << ": ";
- cin >> fractii[i].numarator;
- cout << "Introduceti numitorul pentru fractia #" << (i + 1) << ": ";
- cin >> fractii[i].numitor;
- i++;
- }
- simplificaFractiileDinSir(fractii, n);
- sorteazaSirDeFractii(fractii, n);
- for (int i = 0; i < n; i++) {
- cout << "Fractia #" << (i + 1) << ": ";
- cout << fractii[i].numarator << " / " << fractii[i].numitor << endl;
- }
- return 0;
- }
- void sorteazaSirDeFractii(struct fractie fractii[], int n) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n-1; j++) {
- if (comparaFractii(fractii[j], fractii[j + 1]) == 1) {
- struct fractie aux = fractii[j];
- fractii[j] = fractii[j + 1];
- fractii[j + 1] = aux;
- }
- }
- }
- }
- void simplificaFractiileDinSir(struct fractie fractii[], int n) {
- for (int i = 0; i < n; i++) {
- fractii[i] = simplificareFractie(fractii[i]);
- }
- }
- fractie simplificareFractie(struct fractie f1) {
- int cmmdc = aflaCMMDC(f1.numarator, f1.numitor);
- f1.numarator = f1.numarator / cmmdc;
- f1.numitor = f1.numitor / cmmdc;
- return f1;
- }
- /*
- * Daca f1 > f2 => returnam 1
- * Daca f1 < f2 => returnam -1
- * Daca sunt egale, returnam 0
- * Similar cu mecanismul din strcmp
- */
- int comparaFractii(struct fractie f1, struct fractie f2) {
- double rezultatFractie1 = 1.0 * f1.numarator / f1.numitor;
- double rezultatFractie2 = 1.0 * f2.numarator / f2.numitor;
- if (rezultatFractie1 > rezultatFractie2) {
- return 1;
- }
- else if (rezultatFractie1 < rezultatFractie2) {
- return -1;
- }
- else {
- return 0;
- }
- }
- int aflaCMMDC(int a, int b) {
- int rest;
- while (b != 0) {
- rest = a % b;
- a = b;
- b = rest;
- }
- return a;
- }
Advertisement
Add Comment
Please, Sign In to add comment