Advertisement
What_Ever

Untitled

Dec 11th, 2015
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. typedef struct fraction{
  5.     int numerator , denominator ;
  6.  
  7. } Fraction ;
  8. Fraction add(Fraction num1,Fraction num2);
  9. Fraction subtract(Fraction num1,Fraction num2);
  10. Fraction multiply(Fraction num1,Fraction num2);
  11. Fraction divide(Fraction num1,Fraction num2);
  12. int GCD(int a, int b);
  13. int min (int a,int b);
  14. void printRational(Fraction num1, Fraction num2,Fraction result,char operation);
  15. int main(void)
  16. {
  17.     Fraction num1,num2,result;
  18.     char operation;
  19.     do
  20.     {
  21.         printf("Please Enter two Valid Rational Numbers: \n");
  22.         scanf("%d/%d %c %d/%d",&num1.numerator,&num1.denominator,&operation,&num2.numerator,&num2.denominator);
  23.     }
  24.     while(num1.denominator == 0 || num2.denominator == 0);
  25.     switch(operation)
  26.     {
  27.     case '+':
  28.         result = add(num1,num2);
  29.         break;
  30.     case '-':
  31.         result = subtract(num1,num2);
  32.         break;
  33.     case '*':
  34.         result = multiply(num1,num2);
  35.         break;
  36.     case '/':
  37.         result = divide(num1,num2);
  38.         break;
  39.     default:
  40.         printf("Error! Unsupported Operation");
  41.         return 1;
  42.     }
  43.     printRational(num1,num2,result,operation);
  44.     return 0;
  45. }
  46. int min(int a,int b)
  47. {
  48.     if(abs(a)>=abs(b))
  49.     {
  50.         return abs(b);
  51.     }
  52.     return abs(a);
  53. }
  54. int GCD(int a , int b)
  55. {
  56.     int counter = min(a,b);
  57.     for(counter ; counter > 0 ; counter--)
  58.     {
  59.         if(a % counter == 0 && b % counter == 0)
  60.         {
  61.             return counter;
  62.         }
  63.     }
  64.     return 1;
  65. }
  66. Fraction add(Fraction num1,Fraction num2)
  67. {
  68.     Fraction result;
  69.     result.numerator = num1.numerator * num2.denominator + num2.numerator * num1.denominator;
  70.     result.denominator = num1.denominator * num2.denominator;
  71.     int gcd = GCD(result.numerator,result.denominator);
  72.     result.numerator /= gcd;
  73.     result.denominator /= gcd;
  74.     return result;
  75. }
  76. Fraction subtract(Fraction num1 , Fraction num2)
  77. {
  78.     num2.numerator = -num2.numerator ;
  79.     return add(num1,num2);
  80. }
  81. Fraction multiply(Fraction num1,Fraction num2)
  82. {
  83.     Fraction result;
  84.     result.numerator = num1.numerator * num2.numerator;
  85.     result.denominator = num1.denominator * num2.denominator;
  86.     int gcd = GCD(result.numerator,result.denominator);
  87.     result.numerator /= gcd;
  88.     result.denominator /= gcd;
  89.     return result;
  90. }
  91. Fraction divide(Fraction num1,Fraction num2)
  92. {
  93.     int temp = num2.denominator;
  94.     num2.denominator = num2.numerator;
  95.     num2.numerator = temp;
  96.     return multiply(num1,num2);
  97. }
  98. void printRational(Fraction num1, Fraction num2,Fraction result,char operation)
  99. {
  100.     if(result.denominator == 0)
  101.     {
  102.         printf("Error! Division By Zero");
  103.     }
  104.     else if(result.numerator == 0)
  105.     {
  106.         printf("%d/%d %c %d/%d = 0",num1.numerator,num1.denominator,operation,num2.numerator,num2.denominator);
  107.     }
  108.     else if(result.denominator == 1)
  109.     {
  110.         printf("%d/%d %c %d/%d = %d",num1.numerator,num1.denominator,operation,num2.numerator,num2.denominator,result.numerator);
  111.  
  112.     }
  113.     else
  114.     {
  115.         printf("%d/%d %c %d/%d = %d/%d",num1.numerator,num1.denominator,operation,num2.numerator,num2.denominator,result.numerator,result.denominator);
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement