By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,605 Members | 1,370 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,605 IT Pros & Developers. It's quick & easy.

Help with C programming code

P: n/a
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 reduceResultRational(int e, int f); /* change the global result
rational number to its reduced format */
void printRational(int 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 reduceResultRational(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(int 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 / reduceResultRational(e, f));
d = (b / reduceResultRational(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("Numerator: ");
scanf("%d", &e);
printf("Denominator: ");
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("Numerator: ");
scanf("%d", &c);
printf("Denominator: ");
scanf("%d", &d);

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

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

rMultiply(e, f, c, d);
break;
case 4:
printf("Please input a rational
number.\n");
printf("Numerator: ");
scanf("%d", &c);
printf("Denominator: ");
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.

Nov 13 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a
In article <11**********************@m73g2000cwd.googlegroups .com>,
KiMcHeE <ki************@gmail.comwrote:
>Hi! I'm having a real difficult time trying to figure out what is
wrong with my program code.
>int reduceResultRational(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(int 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 / reduceResultRational(e, f));
d = (b / reduceResultRational(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 reduceResultRational(). 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
Nov 13 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.