Help with C programming code

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • KiMcHeE

    #1

    Help with C programming code

    Hi! I'm having a real difficult time trying to figure out what is
    wrong with my program code. I'm trying to make a "calculator " in the C
    language and I only know basic stuff. Here's my code:

    #include <stdio.h>

    /* global variables */

    int e, f;

    /* function declarations */

    int reduceResultRat ional(int e, int f); /* change the global result
    rational number to its reduced format */
    void printRational(i nt e, int f); /* print a rational number */
    void rAdd(int a, int b, int c, int d); /* do rational number addition
    */
    void rSubtract(int a, int b, int c, int d); /* do rational number
    subtraction */
    void rMultiply(int a, int b, int c, int d); /* do rational number
    multiplication */
    void rDivide(int a, int b, int c, int d); /* do rational number
    division */

    /* function definition */

    int reduceResultRat ional(int e, int f)
    {
    int a, b, tmp, r;
    a = e;
    b = f;

    if (b a)
    {
    tmp = b;
    b = a;
    a = tmp;
    }

    r = a % b;

    while (r != 0)
    {
    a = b;
    b = r;
    r = a % b;
    }

    return b;
    }

    void printRational(i nt e, int f)
    {
    if( f < 0 )
    {
    e *= -1;
    f *= -1;
    printf("The current result is: %d / %d\n", e, f);
    }
    else if( e == 0 )
    {
    printf("The current result is: 0\n");
    }
    else if( f == 1)
    {
    printf("The current result is: %d\n", e);
    }
    else if( e == f)
    {
    printf("The current result is: 1\n");
    }
    else
    {
    int a, b, c, d;
    a = e;
    b = f;
    c = a;
    d = b;

    c = (a / reduceResultRat ional(e, f));
    d = (b / reduceResultRat ional(e, f));

    printf("The current result is: %d / %d\n", c, d);
    }
    }

    void rAdd(int a, int b, int c, int d)
    {
    e = (a*d) + (b*c);
    f = b*d;
    }

    void rSubtract(int a, int b, int c, int d)
    {
    e = (a*d) - (b*c);
    f = (b*d);
    }

    void rMultiply(int a, int b, int c, int d)
    {
    e = (a*c);
    f = (b*d);
    }

    void rDivide(int a, int b, int c, int d)
    {
    e = (a*d);
    f = (b*c);
    }

    int main()
    {
    int c, d, menu = 0; /* local variables */

    printf("Welcome to my rational number calculator!\n") ;
    printf("Please input a rational number.\n");
    printf("Numerat or: ");
    scanf("%d", &e);
    printf("Denomin ator: ");
    scanf("%d", &f);

    while(menu != 5)
    {

    printf("--------------------------------------------\n");
    printRational(e , f);
    printf("1. Add the current result with another rational
    number;\n");
    printf("2. Subtract the current result from another
    rational number;\n");
    printf("3. Multiply the current result with another
    rational number;\n");
    printf("4. Divide the current result by another
    rational number;\n");
    printf("5. Quit\n");
    printf("\n");
    printf("Please enter a selection: ");
    scanf("%d", &menu);

    switch( menu )
    {
    case 1:
    printf("Please input a rational
    number.\n");
    printf("Numerat or: ");
    scanf("%d", &c);
    printf("Denomin ator: ");
    scanf("%d", &d);

    rAdd(e, f, c, d);
    break;
    case 2:
    printf("Please input a rational
    number.\n");
    printf("Numerat or: ");
    scanf("%d", &c);
    printf("Denomin ator: ");
    scanf("%d", &d);

    rSubtract(e, f, c, d);
    break;
    case 3:
    printf("Please input a rational
    number.\n");
    printf("Numerat or: ");
    scanf("%d", &c);
    printf("Denomin ator: ");
    scanf("%d", &d);

    rMultiply(e, f, c, d);
    break;
    case 4:
    printf("Please input a rational
    number.\n");
    printf("Numerat or: ");
    scanf("%d", &c);
    printf("Denomin ator: ");
    scanf("%d", &d);

    rDivide(e, f, c, d);
    break;
    case 5:
    default:
    break;
    }
    }
    return 0;
    }


    As you know in math, the numerator is negative to signify a fraction is
    negative, not the denominator. On one of the outputs, the result is
    outputted as the denominator as the negative number. But in my code, I
    specified that if the denominator were to be negative, multiply the
    numerator by -1 and the denominator by -1 to switch the negative signs.
    Here's what is being outputted:

    The current result is: 4 / 5
    1. Add the current result with another rational number;
    2. Subtract the current result from another rational number;
    3. Multiply the current result with another rational number;
    4. Divide the current result by another rational number;
    5. Quit

    Please enter a selection: 3
    Please input a rational number.
    Numerator: -9
    Denominator: 14
    --------------------------------------------
    The current result is: 18 / -35
    1. Add the current result with another rational number;
    2. Subtract the current result from another rational number;
    3. Multiply the current result with another rational number;
    4. Divide the current result by another rational number;
    5. Quit

    if anyone can figure out what the error is in my code, PLEASE tell me?
    I already wasted 3 hours trying to figure it out and I havent made any
    progress.

  • Walter Roberson

    #2
    Re: Help with C programming code

    In article <1163404461.606 296.173310@m73g 2000cwd.googleg roups.com>,
    KiMcHeE <kimcheeforlife @gmail.comwrote :
    >Hi! I'm having a real difficult time trying to figure out what is
    >wrong with my program code.
    >int reduceResultRat ional(int e, int f)
    >{
    int a, b, tmp, r;
    a = e;
    b = f;
    >
    if (b a)
    {
    tmp = b;
    b = a;
    a = tmp;
    }
    >
    r = a % b;
    >
    while (r != 0)
    {
    a = b;
    b = r;
    r = a % b;
    }
    >
    return b;
    >}
    >void printRational(i nt e, int f)
    >{
    if( f < 0 )
    {
    e *= -1;
    f *= -1;
    printf("The current result is: %d / %d\n", e, f);
    }
    else if( e == 0 )
    {
    printf("The current result is: 0\n");
    }
    else if( f == 1)
    {
    printf("The current result is: %d\n", e);
    }
    else if( e == f)
    {
    printf("The current result is: 1\n");
    }
    else
    {
    int a, b, c, d;
    a = e;
    b = f;
    c = a;
    d = b;
    >
    c = (a / reduceResultRat ional(e, f));
    d = (b / reduceResultRat ional(e, f));
    >
    printf("The current result is: %d / %d\n", c, d);
    }
    >}
    Suppose that when printRational() is called, that e < 0 and f 0.
    Then you do -not- multiply the numerator and demoninator by -1 each.

    Suppose you reach the calls to reduceResultRat ional(). In that
    routine, if the first value (e) is negative and the second positive,
    then the second will be greater than the first, so you are going to
    exchange the values in a and b, leading to positive a and negative b.
    You then proceed to r = a % b with b negative.

    Now the question for you: what is the sign of a % b when b is negative?
    --
    "No one has the right to destroy another person's belief by
    demanding empirical evidence." -- Ann Landers

    Comment

    Working...