468,512 Members | 1,147 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,512 developers. It's quick & easy.

simplify fractions

AmLegacy
I'm having a hard time figuring out how to simplify the fractions. Can anyone look at this code and see if you can see something I don't.

Expand|Select|Wrap|Line Numbers
  1. //This is the fraction adding function
  2. void add_fractions (int a, int b, int c, int d, int *ansn, int *ansd)
  3. {
  4.     //int e, x, y, rem, gcd;
  5.     a = a*d; //numerator 1 * denominator 2
  6.     c = c*b; //numerator 2 * denominator 1
  7.     b = b*d; // denominator 1 * denominator 2
  8.     d = b;  //denominator 2 = denominator 1
  9.     //e = c + a;
  10.     if ( d == 0 && b == 0)
  11.     {
  12.     printf ("Answer is undefined \n");//denominator = to 0 case
  13.     }
  14.  
  15.     *ansn = a + c;
  16.     *ansd = d;
  17. }
  18.  
  19. //This is the fraction subtraction function
  20.  
  21. void subtract_fractions (int a, int b, int c, int d, int *ansn, int *ansd)
  22. {
  23.     a = a*d; //numerator 1 * denominator 2
  24.     c = c*b; //numerator 2 * denominator 1
  25.     b = b*d;  // denominator 1 * denominator 2    
  26.     d = b; //denominator 2 = denominator 1
  27.  
  28.     if ( d == 0 && b == 0)
  29.     {
  30.     printf ("Answer is undefined \n");//denomiator = to 0 case
  31.     }
  32.  
  33.     *ansn = a - c;
  34.     *ansd = d;
  35. }
  36.  
  37.  
  38. //This is the fraction multiplication function
  39.  
  40. void multiply_fractions (int a, int b, int c, int d, int *ansn, int *ansd)
  41. {
  42.     a = a*c; //numerator 1 * numerator 2
  43.     c = a; // numerator 2 = numerator 1
  44.     b = b*d; //denominator 1 * denominator 2
  45.     d = b; //denominator 2 = denominator 1
  46.  
  47.     if ( d == 0 && b == 0)
  48.     {
  49.     printf ("Answer is undefined \n");
  50.     }
  51.  
  52.     *ansn = a;
  53.     *ansd = b;
  54.  
  55. }
  56.  
  57. //This is the fraction division function
  58. void divide_fractions (int a, int b, int c, int d, int *ansn, int *ansd)
  59. {
  60.     a = a*d; //numerator 1 * denominator 2
  61.     d = a;  //denominator 2 = to numerator 1
  62.     b = b*c; //denominator 1 * numerator 2
  63.     c = b;  // numerator 2 = denominator 1
  64.  
  65.     if ( d == 0 && b == 0)
  66.     {
  67.     printf ("Answer is undefined \n");
  68.     }
  69.  
  70.     *ansn = a;
  71.     *ansd = b;
  72.  
  73. }
  74.  
  75.  
  76.  
  77.  
  78. int main ()
  79. {
  80.     int a_num, b_denom, c_num, d_denom;
  81.     int ans1, ans2;
  82.     int operation;
  83.     int simplify; 
  84.     int x,y;
  85.     int rem, gcd;
  86.  
  87.  
  88.  
  89.     printf ("Please enter the first numerator> \n");
  90.     scanf ("%d", &a_num);
  91.  
  92.     printf ("Please enter the first denominator> \n ");
  93.     scanf ("%d", &b_denom);
  94.  
  95.     printf ("Please enter the second numerator> \n ");
  96.     scanf ("%d", &c_num);
  97.  
  98.     printf ("Please enter the second denominator> \n ");
  99.     scanf ("%d", &d_denom);
  100.  
  101.  
  102.     printf ("Please enter 1 for addition, 2 for subtraction, 3 for multiplication, or 4 for division> \n");
  103.     scanf ("%d", &operation);
  104.  
  105.  
  106.  
  107.     if (operation == 1)
  108.  
  109.     { 
  110.  
  111.     add_fractions (a_num, b_denom, c_num, d_denom, &ans1, &ans2);
  112.  
  113.     printf ("Your answer is %d/%d \n\n", ans1, ans2);
  114.  
  115.     }
  116.  
  117.     else
  118.     if (operation == 2)
  119.  
  120.     {
  121.  
  122.     subtract_fractions (a_num, b_denom, c_num, d_denom, &ans1, &ans2);
  123.  
  124.     printf ("Your answer is %d/%d \n", ans1, ans2);
  125.  
  126.     }
  127.  
  128.     else
  129.     if (operation == 3)
  130.  
  131.     {
  132.  
  133.     multiply_fractions (a_num, b_denom, c_num, d_denom, &ans1, &ans2);
  134.  
  135.     printf ("Your answer is %d/%d \n", ans1, ans2);
  136.  
  137.     }
  138.  
  139.     else
  140.     if (operation == 4)
  141.  
  142.     {
  143.  
  144.     divide_fractions (a_num, b_denom, c_num, d_denom, &ans1, &ans2);
  145.  
  146.     printf ("Your answer is %d/%d \n", ans1, ans2);
  147.  
  148.     }
  149.  
  150.  
  151.     else
  152.  
  153.     {
  154.  
  155.     printf ("No Real Solutions \n");
  156.  
  157.     }
  158.  
  159.     printf("Do you want to reduce the fraction? \n Press 1 for yes and 2 for no> \n");
  160.     scanf ("%d", &simplify);
  161.  
  162.     if (simplify == 1)
  163.  
  164.     {if (y==0)
  165.     gcd = x;
  166.     else
  167.     {
  168.         do
  169.         {
  170.         rem = x%y;
  171.         x = y;
  172.         y = rem;
  173.  
  174.  
  175.         }
  176.         while (y!=0);
  177.         gcd = x;
  178.  
  179.         printf ("%d", &x);
  180.     }
  181.  
  182. }
  183.  
  184.     if (simplify == 2)
  185.     {
  186.     printf("Your answer is %d/%d", ans1, ans2);
  187. }
  188. }
Feb 19 '08 #1
1 5324
Ganon11
3,652 Expert 2GB
At the very end, I see you using printf() to print an integer (%d), but you give it &x, which will point the address of x. Aside from this, I don't see any place where you use the greatest common denominator to reduce the fraction. You might clean up that code by writing a gcd() function - it would certainly look nicer.
Feb 19 '08 #2

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

2 posts views Thread by karp | last post: by
33 posts views Thread by selowitch | last post: by
5 posts views Thread by Steffen | last post: by
2 posts views Thread by Mori | last post: by
5 posts views Thread by gubbachchi | last post: by
reply views Thread by Paddy | last post: by
reply views Thread by NPC403 | last post: by
1 post views Thread by fmendoza | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.