diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/PROBLEMS/fractions.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/PROBLEMS/fractions.c')
-rw-r--r-- | reference/C/PROBLEMS/fractions.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/reference/C/PROBLEMS/fractions.c b/reference/C/PROBLEMS/fractions.c new file mode 100644 index 0000000..6798dd0 --- /dev/null +++ b/reference/C/PROBLEMS/fractions.c @@ -0,0 +1,126 @@ +/************************************************************************ + * Author: M.J. Leslie + * Purpose: Add two fractions together. + * Date: 04-Oct-94 + ************************************************************************/ +/******************* Structures *****************************************/ + + /* Define a structure to hold the + * fraction */ +struct fract + { + int num; /* Numerator */ + int den; /* Denominator */ + }; +/******************* Declare Functions **********************************/ + +void print_title(void); /* O/P the title information. */ + + /* Get the fraction from the + * user. */ +void read_fract(struct fract *); + /* Add fractions by passing the + * whole structure to the function. + */ +struct fract add_fraction1(struct fract, struct fract); + + /* Add fractions by passing + * pointers to the structures. + */ +void add_fraction2(struct fract *, struct fract *, struct fract *); + + /* Print fractions */ +void print_fraction(char *, struct fract fraction, char *); + +/****************** Main ************************************************/ + +main () + { + /* Declare the structures that + * hold the fractions */ + struct fract fract1, fract2, out_fract; + + print_title(); /* airy-fairy title */ + + /* Get the fraction values + * from the user */ + read_fract(&fract1); + read_fract(&fract2); + + puts("\n Passing structure to function gives:"); + print_fraction(" ",fract1, " + "); + print_fraction("",fract2, " = "); + /* add the fractions together */ + out_fract = add_fraction1(fract1, fract2); + print_fraction("",out_fract, "\n"); + + puts("\n Passing structure pointers to function gives:"); + print_fraction(" ",fract1, " + "); + print_fraction("",fract2, " = "); + add_fraction2(&fract1, &fract2, &out_fract); + print_fraction("",out_fract, "\n"); + + return(1); + } +/************************************************************************/ +void print_title(void) + { + puts("\n This is a C education program that will add fractions."); + puts(" It demonstrates the technic of copying structures to "); + puts(" functions and copying pointers to structures to functions."); + puts("\n As a by-product the program will ask for two fractions"); + puts(" that are added together and the result put on the screen"); + puts(" "); + } +/************************************************************************/ +void read_fract(struct fract *fract) + { + char value[80]; + + puts(" "); + printf(" Please enter the numerator ===> "); + gets(value); + fract->num = atoi(value); + + printf(" Please enter the denominator => "); + gets(value); + fract->den = atoi(value); + } +/************************************************************************/ +struct fract add_fraction1(struct fract f1, struct fract f2) + { + struct fract answer; + /* get the comman denominator */ + answer.den = f1.den * f2.den; + /* sort out the numerators */ + f1.num = (answer.den / f1.den) * f1.num; + f2.num = (answer.den / f2.den) * f2.num; + /* Add up the numerators */ + answer.num = f1.num + f2.num; + return (answer); + } +/************************************************************************/ +void add_fraction2(struct fract *f1, struct fract *f2, struct fract *answer) + { + /* Use temps so we do not corrupt + * The original values of f1 and + * f2 */ + int temp1, temp2; + /* get the comman denominator */ + answer->den = f1->den * f2->den; + /* sort out the numerators */ + temp1 = (answer->den / f1->den) * f1->num; + temp2 = (answer->den / f2->den) * f2->num; + /* Add up the numerators */ + answer->num = temp1 + temp2; + } +/************************************************************************/ +void print_fraction(char * string1, struct fract fraction, char * string2) + { + /* Format the fraction with + * information strings around it + */ + printf("%s%d/%d%s", string1, fraction.num, fraction.den, string2); + + } + |