Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <stdlib.h>
- typedef struct fraction{
- int numerator , denominator ;
- } Fraction ;
- Fraction add(Fraction num1,Fraction num2);
- Fraction subtract(Fraction num1,Fraction num2);
- Fraction multiply(Fraction num1,Fraction num2);
- Fraction divide(Fraction num1,Fraction num2);
- int GCD(int a, int b);
- int min (int a,int b);
- void printRational(Fraction num1, Fraction num2,Fraction result,char operation);
- int main(void)
- {
- Fraction num1,num2,result;
- char operation;
- do
- {
- printf("Please Enter two Valid Rational Numbers: \n");
- scanf("%d/%d %c %d/%d",&num1.numerator,&num1.denominator,&operation,&num2.numerator,&num2.denominator);
- }
- while(num1.denominator == 0 || num2.denominator == 0);
- switch(operation)
- {
- case '+':
- result = add(num1,num2);
- break;
- case '-':
- result = subtract(num1,num2);
- break;
- case '*':
- result = multiply(num1,num2);
- break;
- case '/':
- result = divide(num1,num2);
- break;
- default:
- printf("Error! Unsupported Operation");
- return 1;
- }
- printRational(num1,num2,result,operation);
- return 0;
- }
- int min(int a,int b)
- {
- if(abs(a)>=abs(b))
- {
- return abs(b);
- }
- return abs(a);
- }
- int GCD(int a , int b)
- {
- int counter = min(a,b);
- for(counter ; counter > 0 ; counter--)
- {
- if(a % counter == 0 && b % counter == 0)
- {
- return counter;
- }
- }
- return 1;
- }
- Fraction add(Fraction num1,Fraction num2)
- {
- Fraction result;
- result.numerator = num1.numerator * num2.denominator + num2.numerator * num1.denominator;
- result.denominator = num1.denominator * num2.denominator;
- int gcd = GCD(result.numerator,result.denominator);
- result.numerator /= gcd;
- result.denominator /= gcd;
- return result;
- }
- Fraction subtract(Fraction num1 , Fraction num2)
- {
- num2.numerator = -num2.numerator ;
- return add(num1,num2);
- }
- Fraction multiply(Fraction num1,Fraction num2)
- {
- Fraction result;
- result.numerator = num1.numerator * num2.numerator;
- result.denominator = num1.denominator * num2.denominator;
- int gcd = GCD(result.numerator,result.denominator);
- result.numerator /= gcd;
- result.denominator /= gcd;
- return result;
- }
- Fraction divide(Fraction num1,Fraction num2)
- {
- int temp = num2.denominator;
- num2.denominator = num2.numerator;
- num2.numerator = temp;
- return multiply(num1,num2);
- }
- void printRational(Fraction num1, Fraction num2,Fraction result,char operation)
- {
- if(result.denominator == 0)
- {
- printf("Error! Division By Zero");
- }
- else if(result.numerator == 0)
- {
- printf("%d/%d %c %d/%d = 0",num1.numerator,num1.denominator,operation,num2.numerator,num2.denominator);
- }
- else if(result.denominator == 1)
- {
- printf("%d/%d %c %d/%d = %d",num1.numerator,num1.denominator,operation,num2.numerator,num2.denominator,result.numerator);
- }
- else
- {
- printf("%d/%d %c %d/%d = %d/%d",num1.numerator,num1.denominator,operation,num2.numerator,num2.denominator,result.numerator,result.denominator);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement