Răspuns :
ASTA E CEA MAI RAPIDA SOLUTIE!
#include<iostream>
#include<fstream>
using namespace std;
int main(){
int n, a1, b1, ai, bi; //n este numarul de fractii (perechi de numere ai-numarator, bi-numitor), a1 si b1 sunt numaratorul, respectiv numitorul primei fractii, iar ai si bi sunt numaratorul, respectiv numitorul fractiei i
ifstream f("fractii.in"); //se deschide fisierul "fractii.in" pentru a se citi date din el
f>>n>>a1>>b1; //citeste numarul de fractii, numaratorul si numitorul primei fractii
for(int i=2;i<=n;i++){ //aici se citesc cele n fractii, i fiind indicele perechii de numere (ai, bi); i incepe de la 2 deoarece ai=1 si bi=1 au fost citite
f>>ai>>bi; //aici citeste efectiv perechile de numere
//urmatorii doi pasi aduna restul fractiilor citite la prima fractie
a1=a1*bi+ai*b1; //se amplifica numaratorul primei fractii cu numitorul fractiei i si se aduca cu numaratorul fractiei i amplificat cu numitorul fractiei 1
b1=b1*bi; //se aduce fractia 1 la acelasi numitor cu fractia i
//pasii anteriori se repeta pana cand au fost citite cele n fractii, adica se vor aduna toate fractiile la prima si se va aduce la acelasi numitor de fiecare data
}
f.close(); //se inchise fisierul din care se citeste
int ca1=a1, cb1=b1; //fac o copie a rezultatului final al adunarii fractiilor; ca1=copia numaratorului final, cb1=copia numitorului final
//urmatorul while afla cel mai mare divizor comun pentru a aduce fractia la o forma ireductibila; se numeste algoritmul lui Euclid prin impartiri repetate
while(cb1!=0){
int r=ca1%cb1;
ca1=cb1;
cb1=r;
}
cout<<(float)(a1/ca1)/(b1/ca1); //se afiseaza fractia la forma ireductibila prin impartirea numaratorului si a numitorului la cmmdc-ul lor
}