Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
Solved

# Strange result

Posted on 2000-03-14
Medium Priority
170 Views
Hi, according to the previous question, I have done my program, but there are some strange results comes out. Please help.
Here are the code:
----------------------------------------
#include <stdio.h>
#include <math.h>

typedef struct{
double n;
double d;
}fract;

fract subtract_fract(fract *f1, fract *f2);
fract multiply_fract(fract *f1, fract *f2);
fract divide_fract(fract *f1, fract *f2);

int main(void){
fract f1, f2, f3_add, f3_subtract, f3_multiply, f3_divide;

printf ("Numerator for f1: ");
scanf ("%lf", &f1.n);
printf ("Denorminator for f1: ");
scanf ("%lf", &f1.d);

printf ("Numerator for f2: ");
scanf ("%lf", &f2.n);
printf ("Denorminator for f2: ");
scanf ("%lf", &f2.d);

f3_subtract = subtract_fract(&f1, &f2);
f3_multiply = multiply_fract(&f1, &f2);
f3_divide = divide_fract(&f1, &f2);

printf ("Subtract = %d/%d\n", (int)f3_subtract.n, (int)f3_subtract.d);
printf ("Multiply = %d/%d\n", (int)f3_multiply.n, (int)f3_multiply.d);
printf ("Divide = %d/%d\n", (int)f3_divide.n, (int)f3_divide.d);

return (0);
}

fract f;
double common, gcd;

if (f1->d != f2->d){
common = f1->d * f2->d;      //Find the common denorminator

f1->n = f1->n * f2->d;
f2->n = f2->n * f1->d;

(int)f.n = f1->n + f2->n;
(int)f.d = common;

gcd = euclid(&f.n, &f.d);
}
else{
f.n = f1->n + f2->n;
f.d = f1->d;

gcd = euclid(&f.n, &f.d);
}
return f;
}

fract subtract_fract(fract *f1, fract *f2){
fract f;
double common, gcd;

if (f1->d != f2->d){
common = f1->d * f2->d;      //Find the common denorminator

f1->n = f1->n * f2->d;
f2->n = f2->n * f1->d;

f.n = f1->n - f2->n;
f.d = common;

gcd = euclid(&f.n, &f.d);
}
else{
f.n = f1->n + f2->n;
f.d = f1->d;

gcd = euclid(&f.n, &f.d);
}
return f;
}

fract multiply_fract(fract *f1, fract *f2){
fract f;
double gcd;

f.n = f1->n * f2->n;
f.d = f1->d * f2->d;

gcd = euclid(&f.n, &f.d);

return f;
}

fract divide_fract(fract *f1, fract *f2){
fract f;
double gcd;

if (f1->d != 0 || f2->d != 0){
f.n = f1->n * f2->d;
f.d = f1->d * f2->n;

gcd = euclid(&f.n, &f.d);
}
else printf ("Cannot divide by zero\n");
return f;
}
---------------------------------------
The output are as the following if I input 1/3 and 5/6

Subtract = -1/2
Multiply = 90/1
Divide = 8/5

THANKS !
0
Question by:clo1
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 3

LVL 5

Accepted Solution

Wyn earned 120 total points
ID: 2615609
clo1 ,
The output is right by the logic code you give.

The problem is you change the F1 and F2 in Add and Substract function ,if you check it,you will find after substract function.the F1 become 36/3 ,F2 become 45/6.
Thus,you multiply them get:
90/1....

You'd pass F1 and F2 by value.
Change funciton declaration:
For example:
change
to

Regards
W.Yinan
0

LVL 5

Expert Comment

ID: 2615613
FYI :
You'd call it this way:

Follow suit all functions and You will get correct output.

Regards
W.Yinan
0

LVL 2

Expert Comment

ID: 2615633
Hi!

I'm sorry but what does the function euclid do?

Andrew
0

LVL 2

Author Comment

ID: 2615634
Cool. Thanks for the help, cause I never notice the subtract function, I just thought that is the proble of the multiply and divide procedure. THANKS AGAIN !
0

LVL 5

Expert Comment

ID: 2615646
->I'm sorry but what does the function euclid do?
==============================
Yes ,clo1 ?
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand and use structures in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
###### Suggested Courses
Course of the Month8 days, 13 hours left to enroll