#include #include #include "fraction.h" Fraction addFraction(Fraction f, Fraction f2) { int commonDenom = getCommonDenom(f,f2); return newFraction(((commonDenom/f->denom) * f->num)+((commonDenom/f2->denom) * f2->num),commonDenom); } Fraction divideFraction(Fraction f, Fraction f2) { Fraction temp = getReciprocal(f2); Fraction divideFraction = multiplyFraction(f,temp); deleteFraction(temp); return divideFraction; } Fraction subFraction(Fraction f, Fraction f2) { int commonDenom = getCommonDenom(f,f2); return newFraction(((commonDenom/f->denom) * f->num)-((commonDenom/f2->denom) * f2->num),commonDenom); } Fraction getReciprocal(Fraction f) { return newFraction(f->denom,f->num); } Fraction multiplyFraction(Fraction f,Fraction f2) { return newFraction(f->num * f2->num,f->denom * f2->denom); } Fraction newFraction(int x,int y) { Fraction f = malloc(sizeof(Fraction)); f && y != 0 ? f->num = x, f->denom = y : printf("Error in init, denominator = %d numerator = %d",x,y); return f; } void deleteFraction(Fraction f) { free(f); } void fractionToDecimal(Fraction f) { printf("%f\n",(double)f->num /(double)f->denom); } int getCommonDenom(Fraction f, Fraction f2) { return f->denom * f2->denom; } void printFraction(Fraction f,int mode) { mode == 0 ? printf("%d/%d\n",f->num,f->denom) : f->denom == 1 ? printf("%d\n",f->num) : f->num > f->denom ? printf("%d %d/%d\n",f->num / f-denom,f->num - ((f->num / f->denom) * f->denom),f->denom) : printFraction(f,0); }