| | |
Basic arithemetic on rational numbers
Please support our C advertiser: Programming Forums - DaniWeb Sister Site
Thread Solved |
•
•
Join Date: Apr 2009
Posts: 6
Reputation:
Solved Threads: 1
0
#5 Oct 27th, 2009
/*A PROGRAM PERFORMING BASIC ARITHMETIC ON RATIONAL NUMBERS*/
/*BY ISAGARA K ROBERT*/
/*26th october 2009*/
/*THIS WAS MY ASSIGNMENT(COMPUTER SCIENCE YEAR II) TO MR PAUL BAGYENDA ON BASIC ARITHMETIC OPERATION ON RATIONAL NUMBERS*/
#include <stdio.h>
#include <stdlib.h>
typedef struct rational_t {
int numer;
int denom;
} rational_t;
/*modify this for me*/
static int gcd(int a, int b)
{ int c;
while(a>0)
{
if(a<b)
{ c=a;
a=b;
b=c;
}
else
a=a%b;
}
return b;
}
/* r_init: creates rational number representing numer/denom and returns it*/
rational_t r_init(int numer, int denom)
{
rational_t fraction;
int GcD=gcd(numer,denom);
fraction.numer= numer/GcD;
fraction.denom= denom/GcD;
return fraction;
}
/* r_add: Returns a rational_t representing x+y */
rational_t r_add(rational_t x, rational_t y)
{
rational_t result;
result.numer=(x.numer*y.denom+ x.denom* y.numer);
result.denom=(x.denom*y.denom);
return result;
}
/* r_sub: Returns a rational_t representing x-y */
rational_t r_sub(rational_t x, rational_t y)
{
rational_t result;
result.numer=(x.numer*y.denom - x.denom* y.numer);
result.denom=(x.denom*y.denom);
return result;
}
/* r_mul: Returns a rational_t representing x*y */
rational_t r_mul(rational_t x, rational_t y)
{ rational_t result;
result.numer=(x.numer*y.numer);
result.denom=(x.denom*y.denom);
return result;
}
/* r_div: Returns a rational_t representing x/y */
rational_t r_div(rational_t x, rational_t y)
{
rational_t result;
result.numer=(x.numer*y.denom);
result.denom=(x.denom*y.numer);
return result;
}
/* r_toreal: Returns a double representing x */
double r_toreal(rational_t x)
{
}
/* r_print: prints rational as x/y (using printf */
void r_print(rational_t x)
{
int p=gcd(x.numer,x.denom);
printf("%d/%d",x.numer/p,x.denom/p);
}
int main(void)
{
printf("Rational arithmetic test program\n");
do {
int u,v, oper;
rational_t x, y, z;
here:
printf("x - numerator: ");
scanf("%d", &u);
if(u==0){
printf("Enter interger greater than Zero\n");
goto here;}
There1:
printf("x - denominator: ");
scanf("%d", &v);
if(v==0){
printf("Zero is undefined for a fraction ,Enter valve above Zero\n");
goto There1;
}
x = r_init(u,v);
here2:
printf("y - numerator: ");
scanf("%d", &u);
if(u==0){
printf("Enter interger greater than Zero\n");
goto here2;}
Thereback:
printf("y - denominator: ");
scanf("%d", &v);
if(v==0){
printf("Zero is undefined for a fraction ,Enter valve above Zero\n");
goto Thereback;
}
y = r_init(u,v);
printf("x is: ");
r_print(x);
printf("\n");
printf("y is: ");
r_print(y);
printf("\n");
printf("Operation (1=add,2=Sub,3=Mul,4=Div,0=End): ");
scanf("%d", &oper);
switch (oper) {
case 1:
z = r_add(x,y);
break;
case 2:
z = r_sub(x,y);
break;
case 3:
z = r_mul(x,y);
break;
case 4:
z = r_div(x,y);
break;
case 0:
return 0;
default:
printf("Unknown operation!\n");
break;
}
printf("z is: ");
r_print(z);
printf("\n");
} while(1);
return 0;
}
/*BY ISAGARA K ROBERT*/
/*26th october 2009*/
/*THIS WAS MY ASSIGNMENT(COMPUTER SCIENCE YEAR II) TO MR PAUL BAGYENDA ON BASIC ARITHMETIC OPERATION ON RATIONAL NUMBERS*/
#include <stdio.h>
#include <stdlib.h>
typedef struct rational_t {
int numer;
int denom;
} rational_t;
/*modify this for me*/
static int gcd(int a, int b)
{ int c;
while(a>0)
{
if(a<b)
{ c=a;
a=b;
b=c;
}
else
a=a%b;
}
return b;
}
/* r_init: creates rational number representing numer/denom and returns it*/
rational_t r_init(int numer, int denom)
{
rational_t fraction;
int GcD=gcd(numer,denom);
fraction.numer= numer/GcD;
fraction.denom= denom/GcD;
return fraction;
}
/* r_add: Returns a rational_t representing x+y */
rational_t r_add(rational_t x, rational_t y)
{
rational_t result;
result.numer=(x.numer*y.denom+ x.denom* y.numer);
result.denom=(x.denom*y.denom);
return result;
}
/* r_sub: Returns a rational_t representing x-y */
rational_t r_sub(rational_t x, rational_t y)
{
rational_t result;
result.numer=(x.numer*y.denom - x.denom* y.numer);
result.denom=(x.denom*y.denom);
return result;
}
/* r_mul: Returns a rational_t representing x*y */
rational_t r_mul(rational_t x, rational_t y)
{ rational_t result;
result.numer=(x.numer*y.numer);
result.denom=(x.denom*y.denom);
return result;
}
/* r_div: Returns a rational_t representing x/y */
rational_t r_div(rational_t x, rational_t y)
{
rational_t result;
result.numer=(x.numer*y.denom);
result.denom=(x.denom*y.numer);
return result;
}
/* r_toreal: Returns a double representing x */
double r_toreal(rational_t x)
{
}
/* r_print: prints rational as x/y (using printf */
void r_print(rational_t x)
{
int p=gcd(x.numer,x.denom);
printf("%d/%d",x.numer/p,x.denom/p);
}
int main(void)
{
printf("Rational arithmetic test program\n");
do {
int u,v, oper;
rational_t x, y, z;
here:
printf("x - numerator: ");
scanf("%d", &u);
if(u==0){
printf("Enter interger greater than Zero\n");
goto here;}
There1:
printf("x - denominator: ");
scanf("%d", &v);
if(v==0){
printf("Zero is undefined for a fraction ,Enter valve above Zero\n");
goto There1;
}
x = r_init(u,v);
here2:
printf("y - numerator: ");
scanf("%d", &u);
if(u==0){
printf("Enter interger greater than Zero\n");
goto here2;}
Thereback:
printf("y - denominator: ");
scanf("%d", &v);
if(v==0){
printf("Zero is undefined for a fraction ,Enter valve above Zero\n");
goto Thereback;
}
y = r_init(u,v);
printf("x is: ");
r_print(x);
printf("\n");
printf("y is: ");
r_print(y);
printf("\n");
printf("Operation (1=add,2=Sub,3=Mul,4=Div,0=End): ");
scanf("%d", &oper);
switch (oper) {
case 1:
z = r_add(x,y);
break;
case 2:
z = r_sub(x,y);
break;
case 3:
z = r_mul(x,y);
break;
case 4:
z = r_div(x,y);
break;
case 0:
return 0;
default:
printf("Unknown operation!\n");
break;
}
printf("z is: ");
r_print(z);
printf("\n");
} while(1);
return 0;
}
![]() |
Similar Threads
- Basic Unique Random Numbers (C++)
- Need help with a Reduce Fraction as part of a Rational Class (C++)
- rational class (C++)
- Help with Rational Numbers in C++ (C++)
- Dead end with basic code (C)
Other Threads in the C Forum
- Previous Thread: RE: reading .wav file and putting ito inot the array
- Next Thread: file opening problem!!!!!
Views: 229 | Replies: 4
| Thread Tools | Search this Thread |
Tag cloud for C
* .net api append array arrays bash binarysearch changingto char character cm copyanyfile copypdffile createcopyoffile createprocess() csyntax database directory drawing dynamic executable execv feet fgets file floatingpointvalidation fork frequency function getlogicaldrivestrin givemetehcodez global graphics gtkwinlinux histogram homework i/o ide include infiniteloop initialization input interest intmain() iso keyboard kilometer lazy license linked linkedlist linux list lowest matrix meter microsoft mqqueue mysql oddnumber odf open openwebfoundation overwrite pause pdf pointer pointers posix power program programming pyramidusingturboccodes read recursion recv recvblocked reversing scheduling segmentationfault send single socketprogramming spoonfeeding standard strchr string student suggestions system test testautomation testing unix urboc user whythiscodecausesegmentationfault win32api windowsapi





