All pastes #925240 Raw Edit

LaRoza - Fraction

public text v1 · immutable
·published 2008-03-02 04:41 UTC
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);
}