rendered paste body#include <stdio.h>
#include <stdlib.h>
#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);
}