Tuesday, January 30, 2024

Rational Numbers (Abstract Data Type) - DSTC using C Language

Rational Numbers (Abstract Data Type) 
Implemented using C Language

 

Consider the ADT Rational, which is a Mathematical concept of a rational number. A rational number is a number that can be expressed as the quotient of two integers.

Operations to be performed for implemented Rational numbers are:

  • Creation of a rational number from two integers (rat *makerat(int a,int b))
  • Addition
  • Multiplication
  • Testing for Equality

C Language Code:

RATIONAL.H

typedef struct rational
{
int n;
int d;
}rat ;

rat *makerat(int a,int b)
{
rat *r ;
if (b==0)
{
printf("\n Den Not allowed as Zero ") ;
exit(1);
}
r = (rat *)malloc(sizeof(rat)) ;
r->n = a ;
r->d = b ;
return (r) ;
}

rat *sumrat(rat *x, rat *y)
{
rat *r ;
r = (rat *)malloc(sizeof(rat)) ;
r->n = (x->n * y->d) + (x->d * y->n) ;
r->d = x->d * y->d ;
return(r) ;
}

void killrat(rat *n)
{
free(n);
}

void printrat(rat *n)
{
printf("%d/%d",n->n,n->d);
}

rat *reducerat(rat *r)
{
rat *t ;
t = (rat *)malloc(sizeof(rat));
t = r ;
int i ;
if (t->n > t->d)
i = t->d;
else
i = t->n;

for(;i>1;i--)
{
if((t->n%i==0) && (t->d%i==0))
{
t->n = t->n/i ;
t->d = t->d/i ;
}
}

return(t);
}

 

rat *subtractrat(rat *x, rat *y)
{
rat *r ;
r = (rat *)malloc(sizeof(rat)) ;
r->n = (x->n * y->d) - (x->d * y->n);
r->d = x->d * y->d ;
return(r);
}

Get Paid by Reading Ads on your Mobiles

rat *multiplyrat(rat *x, rat *y)
{
rat *r ;
r = (rat *)malloc(sizeof(rat)) ;
r->n = x->n * y->n ;
r->d = x->d * y->d ;
return(r);
}

rat *dividerat(rat *x, rat *y)
{
rat *r ;
r = (rat *)malloc(sizeof(rat)) ;
r->n = (x->n * y->d) / (x->d * y->n);
r->d = 0 ;
return(r);
}

void ratequal(rat *x, rat *y)
{
if((x->n * y->d)== (x->d * y->n) )
printf("\n\t\tNumbers are Equal") ;
else
printf("\n\t\tNumbers are NOT Equal") ;

}

RATIONAL.CPP

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <rational.h>

void main()
{
rat *m, *n, *p, *l, *q, *t ;
int i,j,k ;
clrscr();
printf("\n Enter 1st num and denomentor(n/d):");
scanf("%d/%d",&i,&j);
m = makerat(i,j);

printf("\n Enter 2st num and denomentor(n/d):");
scanf("%d/%d",&i,&j);
n = makerat(i,j);

// SUM OF Rational nos.
p = sumrat(m,n);

printf("\n Display Two Rational No.s sum ");
printrat(m) ;
printf(" + ");
printrat(n) ;
printf(" = ");
printrat(p) ;
t = reducerat(p) ;
printf(" = ");
printrat(t);

//********* SUBSTRATION OF 2 RATIONAL NOS.

q = subtractrat(m,n);

printf("\n Display Two Rational No.s Subtraction ");
printrat(m) ;
printf(" - ");
printrat(n) ;
printf(" = ");

printrat(q) ;
t = reducerat(q) ;
printf(" = ");
printrat(t);

killrat(m) ;
killrat(n) ;
killrat(p) ;
killrat(l) ;
killrat(q) ;
killrat(t) ;

}

No comments: