how do i extend the struct number type to add the fraction type, and how do i extend the display funtion so that it also handles fractional numbers, displaying them in the format numerator / denominator.
(thanx stoned coder by the way)
Code:
****************struct fraction*************
struct fraction
{
double numerator;
double demoninator;
}
double Agg( struct fraction* frac)
{
return frac->numerator + frac->denominator;
}
****************Program to extend*****************
enum tag { is_int, is_double };
union value {
int i;
double d;
};
struct number {
enum tag t;
union value v;
};
void display (struct number n) {
switch (n.t) {
case is_int:
printf("%d", n.v.i); break;
case is_double:
printf("%g", n.v.d); break;
};
}
struct number plus (struct number n1, struct number n2) {
struct number result;
if (n1.t == is_int && n2.t == is_int) {
result.t = is_int;
result.v.i = n1.v.i + n2.v.i;
} else {
result.t = is_double;
result.v.d = 0.0;
result.v.d += n1.t == is_double ? n1.v.d : (double)n1.v.i;
result.v.d += n2.t == is_double ? n2.v.d : (double)n2.v.i;
}
return result;
}
int main () {
struct number x;
struct number pi;
x.t = is_int; x.v.i = 42;
pi.t = is_double; pi.v.d = 3.14159;
display(plus(x, pi));
}