School-Coding-Cpp/sfusi/somma_tra_due_frazioni_con_...

76 lines
2.0 KiB
C++

#include <iostream>
#include <cmath> // For abs function
using namespace std;
typedef struct {
int numeratore;
int denominatore;
} frazione;
frazione somma(frazione frazione1, frazione frazione2);
frazione semplificazione(frazione frazione);
void stampaFrazione(frazione frazione);
int mcd(int a, int b);
int main(void) {
frazione frazione1;
frazione frazione2;
cout << "Inserisci il numeratore della prima frazione: ";
cin >> frazione1.numeratore;
cout << "Inserisci il denominatore della prima frazione: ";
cin >> frazione1.denominatore;
cout << endl;
cout << "Inserisci il numeratore della seconda frazione: ";
cin >> frazione2.numeratore;
cout << "Inserisci il denominatore della seconda frazione: ";
cin >> frazione2.denominatore;
cout << endl;
cout << "Prima frazione: ";
stampaFrazione(frazione1);
cout << "Seconda frazione: ";
stampaFrazione(frazione2);
cout << endl;
frazione sommaFrazione = somma(frazione1, frazione2);
frazione sommaSemplificata = semplificazione(sommaFrazione);
cout << "Somma delle due frazioni semplificata: ";
stampaFrazione(sommaSemplificata);
return 0;
}
frazione somma(frazione frazione1, frazione frazione2) {
int numeratore = frazione1.numeratore * frazione2.denominatore + frazione2.numeratore * frazione1.denominatore;
int denominatore = frazione1.denominatore * frazione2.denominatore;
return frazione {numeratore, denominatore};
}
frazione semplificazione(frazione frazione) {
int gcdValue = mcd(abs(frazione.numeratore), abs(frazione.denominatore));
frazione.numeratore /= gcdValue;
frazione.denominatore /= gcdValue;
return frazione;
}
int mcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
void stampaFrazione(frazione frazione) {
cout << frazione.numeratore << "/" << frazione.denominatore << endl;
}