76 lines
2.0 KiB
C++
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;
|
|
} |