Showing posts with label Rational Numbers (Abstract Data Type). Show all posts
Showing posts with label Rational Numbers (Abstract Data Type). Show all posts

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) ;

}