Adding a series of fractions

+2 Patricia Ghann · January 6, 2015
Hello Bucky, Happy New Year. Please I want to write a program in c++ to add a series of fractions and am finding it difficult so I need your help please. I want to add for example 

1/3+3/5+5/7+7/9+9/11+...............+97/99.

Post a Reply

Replies

- page 2
Oldest  Newest  Rating
0 c student · January 7, 2015
if it's not too late, here is my functioning code written in C since i dont code in c++ however should be easy to translate across.  i have added comments to show psuedo code for better understanding:
#include <stdio.h>
#include <stdlib.h>

// define a struct for a fraction type to hold
// both numerator and denominator
typedef struct {
    int num;
    int den;
} fraction;

fraction fracAdd (fraction, fraction);

int main (void) {

    // request amount of fractions
    puts ("Please enter the amount of fractions");
    // acquire number of fractions to be calculated
    int amount = getchar()-48;
    // declare array of fraction types according to the previous line
    fraction frac[amount];
    // declare a resultant fraction
    fraction result;

    // loop to enter in each fraction
    for (int n = 0; n < amount; n++) {
        // request numerator for fraction n
        printf ("Please enter in the numerator for fraction %d\n", n+1);
        // input into fraction array n for numerator member
        scanf ("%d", &frac[n].num);
        // request denominator for fraction n
        printf ("Please enter in the denominator for fraction %d\n", n+1);
        // input into fraction array n for denominator member
        scanf ("%d", &frac[n].den);
if (frac[n].den == 0) {
fprintf (stderr, "Zero is not a valid denominator value");
exit (1);
}
        // this is just to place the first fraction into result
        if (n == 0) {
            result = frac[n];
        // then for the rest of the fractions, add them onto the result
        } else {
            result = fracAdd (result, frac[n]);
        }
    }

    // print result with numerator and denominator
    printf ("Result: %d/%d\n", result.num, result.den);

    return 0;

}

// function to add fractions
fraction fracAdd (fraction a, fraction b) {
    // declare resultant fraction
    fraction result;
    // adding numerators
    result.num = a.num*b.den+b.num*a.den;
    // adding common denominator
    result.den = a.den*b.den;

    // return resultant
    return result;
}

good luck
note: does not simplify fractions.  if you wish to simplify the fractions, just make a function to calculate gcd (i think).
0 Number Double07 · January 7, 2015
I'm trying to work it out but I'm having a problem.  It's giving me an answer more than the answer I want. 
0 Number Double07 · January 7, 2015
#include<iostream>
using namespace std;

int main()

{float num = 0;
float den = 0;
int numberOfFractionEntered = 0;
float fraction = 0;
float sum = 0;

while (num !=-1){

cout << "Enter numerator or enter -1 to quit: " <<endl;
cin >> num;


cout << "Enter denominator or enter -1 to quit " <<endl;
cin >> den;



numberOfFractionEntered ++;


fraction = (num / den);

sum = fraction + sum;
}





cout << "The sum of of the fractions entered is " << sum  << endl;


return 0;

}



It keeps giving me an answer more than what I want.  Like, I enter .5 + .5 +.5, and I get 2.5.
0 Number Double07 · January 7, 2015
Oh, I see what's happening in my code.  It's adding up the -1 inputs for my numerator and denominator before it ends the while loop.  So every answer I get is 1 greater than the actual answer.  I could just subtract 1 from the sum I guess when I cout it.  However, is there another way to prevent the loop from adding that "trip" values of -1?
0 Stan Botha · January 7, 2015
how about adding an if statement inside the while loop to check whether -1 was entered

if(num!=-1)
{
    fraction = (num / den);
sum = fraction + sum;
}
0 Number Double07 · January 7, 2015
Nice, that works!  Thanks man.
0 c student · January 7, 2015
here it is again, this time with simplified fraction result using euclid's gcd algorithm.  i apologize if the algorithm is hard to understand, i had just pulled it out of a piece of code i wrote last year.
#include <stdio.h>
#include <stdlib.h>

// define a struct for a fraction type to hold
// both numerator and denominator
typedef struct {
    int num;
    int den;
} fraction;

fraction fracAdd (fraction, fraction);
fraction simplify (fraction frac);

int main (void) {

    // request amount of fractions
    puts ("Please enter the amount of fractions");
    // acquire number of fractions to be calculated
    int amount = getchar()-48;
    // declare array of fraction types according to the previous line
    fraction frac[amount];
    // declare a resultant fraction
    fraction result;

    // loop to enter in each fraction
    for (int n = 0; n < amount; n++) {
        // request numerator for fraction n
        printf ("Please enter in the numerator for fraction %d\n", n+1);
        // input into fraction array n for numerator member
        scanf ("%d", &frac[n].num);
        // request denominator for fraction n
        printf ("Please enter in the denominator for fraction %d\n", n+1);
        // input into fraction array n for denominator member
        scanf ("%d", &frac[n].den);
        if (frac[n].den == 0) {
            fprintf (stderr, "\nZero is not a valid denominator value\n");
            exit (1);
        }
        // this is just to place the first fraction into result
        if (n == 0) {
            result = frac[n];
        // then for the rest of the fractions, add them onto the result
        } else {
            result = fracAdd (result, frac[n]);
        }
    }

// simplify result with GCD
    result = simplify (result);

    // print result with numerator and denominator
    printf ("Result: %d/%d\n", result.num, result.den);

    return 0;

}

// function to add fractions
fraction fracAdd (fraction a, fraction b) {
    // declare resultant fraction
    fraction result;
    // adding numerators
    result.num = a.num*b.den+b.num*a.den;
    // adding common denominator
    result.den = a.den*b.den;

    // return resultant
    return result;
}

// Euclidean algorithm for GCD
fraction simplify (fraction frac) {

    int qot, rmd, m, n;
    int i = 0;
    int j = 0;
    n = frac.num;
    m = frac.den;    

    do {
        if (n >= m) {
            j = 1;
            qot = n/m;
            rmd = n % m;
            if (rmd == 0) {
                break;
            }
            if (m == 0) {
                break;
            }
            n = m;
            m = rmd;
        } else if (m > n) {
            j = 2;
            qot = m/n;
            rmd = m % n;
            if (rmd == 0) {
                break;
            }
            if (n == 0) {
                break;
            }
            m = n;
            n = rmd;
        }
        i++;
    } while (i < 10);

    if (j == 1) {
        frac.num /= m;
        frac.den /= m;
    } else if (j == 2) {
        frac.num /= n;
        frac.den /= n;
    }

    return frac;

}

note: have not tested for all cases, however should work nicely
0 c student · January 8, 2015
doesn't matter to me.  i only do this so i can learn and if they end up learning too, then that's fine with me.  if they end up failing to provide at a given time, well that's just too bad. :angel:
0 Patricia Ghann · January 8, 2015
Thanks a lot guys for your help.
  • 1
  • 2

C++

107,111 followers
About

Used in many types of software including music players, video games, and many large scale applications.

Links
Moderators
Bucky Roberts Administrator