#include int pgcd(int a,int b) { while(b && (a%=b)) b%=a; return a+b;} typedef struct{int num,den;} frac; int reduit(int *a,int *b) { int p=pgcd(*a,*b); if((*b^p)<0) p=-p; *a/=p, *b/=p; return p; } frac somme(frac a,frac b) { int p=reduit(&a.den,&b.den); frac c={a.num*b.den+a.den*b.num,a.den*b.den}; reduit(&c.num,&p); c.den*=p; return c; } frac diffe(frac a,frac b) { int p=reduit(&a.den,&b.den); frac c={a.num*b.den-a.den*b.num,a.den*b.den}; reduit(&c.num,&p); c.den*=p; return c; } frac produit(frac a,frac b) { reduit(&a.num,&b.den); reduit(&b.num,&a.den); a.num*=b.num, a.den*=b.den; return a; } frac quotient(frac a,frac b) { reduit(&a.num,&b.num); reduit(&b.den,&a.den); a.num*=b.den, a.den*=b.num; return a; } void affiche(frac a) { printf("(%d/%d)",a.num,a.den); } void lire(frac *a) { scanf("%d%d",&a->num,&a->den); } int main() { int a,b,c,d,i; frac ef={0,1}; for(a=1;a<=2;a++) for(b=1;a+b<=3;b++) for(c=1;c<=2;c++) for(d=1;c+d<=3;d++) { frac ab={a,b}, cd={c,d}; affiche(ab), printf(" + "), affiche(cd), printf(" = "), affiche(somme (ab,cd)), printf("\n"); affiche(ab), printf(" - "), affiche(cd), printf(" = "), affiche(diffe (ab,cd)), printf("\n"); affiche(ab), printf(" * "), affiche(cd), printf(" = "), affiche(produit (ab,cd)), printf("\n"); affiche(ab), printf(" / "), affiche(cd), printf(" = "), affiche(quotient(ab,cd)), printf("\n"); } for(i=1;i<=100;i++) ef=somme(ef,(frac){1,i*(i+1)*(i+2)*(i+3)}), printf("%2d ",i), affiche(ef), printf(" = %f\n",ef.num*1.0/ef.den); getchar(); return 0; }