mirror of
https://github.com/Manoj-HV30/ds-lab-codes.git
synced 2026-05-16 19:35:22 +00:00
polynomial addition
This commit is contained in:
+148
@@ -0,0 +1,148 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define MAX_TERMS 100
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
float coef;
|
||||||
|
int expon;
|
||||||
|
} polynomial;
|
||||||
|
|
||||||
|
polynomial terms[MAX_TERMS];
|
||||||
|
int avail = 0;
|
||||||
|
|
||||||
|
int COMPARE(int a, int b)
|
||||||
|
{
|
||||||
|
if (a < b)
|
||||||
|
return -1;
|
||||||
|
if (a == b)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void attach(float coefficient, int exponent)
|
||||||
|
{
|
||||||
|
if (avail >= MAX_TERMS) {
|
||||||
|
fprintf(stderr, "Too many terms in the polynomial\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
terms[avail].coef = coefficient;
|
||||||
|
terms[avail++].expon = exponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sort terms[start..finish] in DESCENDING order of exponent */
|
||||||
|
void sort_poly(int start, int finish)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
polynomial temp;
|
||||||
|
for (i = start; i < finish; i++) {
|
||||||
|
for (j = i + 1; j <= finish; j++) {
|
||||||
|
if (terms[i].expon < terms[j].expon) {
|
||||||
|
temp = terms[i];
|
||||||
|
terms[i] = terms[j];
|
||||||
|
terms[j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void padd(int starta, int finisha, int startb, int finishb,
|
||||||
|
int *startd, int *finishd)
|
||||||
|
{
|
||||||
|
float coefficient;
|
||||||
|
*startd = avail;
|
||||||
|
|
||||||
|
while (starta <= finisha && startb <= finishb) {
|
||||||
|
switch (COMPARE(terms[starta].expon, terms[startb].expon)) {
|
||||||
|
case -1:
|
||||||
|
attach(terms[startb].coef, terms[startb].expon);
|
||||||
|
startb++;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
coefficient = terms[starta].coef + terms[startb].coef;
|
||||||
|
if (coefficient) {
|
||||||
|
attach(coefficient, terms[starta].expon);
|
||||||
|
}
|
||||||
|
starta++;
|
||||||
|
startb++;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
attach(terms[starta].coef, terms[starta].expon);
|
||||||
|
starta++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; starta <= finisha; starta++)
|
||||||
|
attach(terms[starta].coef, terms[starta].expon);
|
||||||
|
for (; startb <= finishb; startb++)
|
||||||
|
attach(terms[startb].coef, terms[startb].expon);
|
||||||
|
|
||||||
|
*finishd = avail - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int i, j, ae, be, nA, nB, sa, sb, fa, fb, sc, fc = 0;
|
||||||
|
int *sd, *fd;
|
||||||
|
float ac, bc;
|
||||||
|
|
||||||
|
printf("Enter number of terms in Polynomial A: ");
|
||||||
|
scanf("%d", &nA);
|
||||||
|
|
||||||
|
printf("Enter terms for A (coefficient exponent), in ANY order:\n");
|
||||||
|
for (i = 0; i < nA; i++) {
|
||||||
|
printf("A[%d]: ", i + 1);
|
||||||
|
scanf("%f%d", &ac, &ae);
|
||||||
|
attach(ac, ae);
|
||||||
|
}
|
||||||
|
|
||||||
|
fa = avail - 1; // A ends here
|
||||||
|
|
||||||
|
sb = avail;
|
||||||
|
printf("\nEnter number of terms in Polynomial B: ");
|
||||||
|
scanf("%d", &nB);
|
||||||
|
|
||||||
|
printf("Enter terms for B (coefficient exponent), in ANY order:\n");
|
||||||
|
for (i = 0; i < nB; i++) {
|
||||||
|
printf("B[%d]: ", i + 1);
|
||||||
|
scanf("%f%d", &bc, &be);
|
||||||
|
attach(bc, be);
|
||||||
|
}
|
||||||
|
fb = avail - 1; // B ends here
|
||||||
|
|
||||||
|
// sort A and B by exponent so padd works correctly
|
||||||
|
sort_poly(0, fa);
|
||||||
|
sort_poly(sb, fb);
|
||||||
|
|
||||||
|
printf("\n-----------------------------------------\n");
|
||||||
|
printf("Polynomial A: ");
|
||||||
|
for (i = 0; i < nA; i++) {
|
||||||
|
printf("%.2fx^%d", terms[i].coef, terms[i].expon);
|
||||||
|
if (i < nA - 1) printf(" + ");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nPolynomial B: ");
|
||||||
|
for (i = sb; i <= fb; i++) {
|
||||||
|
printf("%.2fx^%d", terms[i].coef, terms[i].expon);
|
||||||
|
if (i < fb) printf(" + ");
|
||||||
|
}
|
||||||
|
printf("\n-----------------------------------------\n");
|
||||||
|
|
||||||
|
sa = 0;
|
||||||
|
sc = avail;
|
||||||
|
sd = ≻
|
||||||
|
fd = &fc;
|
||||||
|
|
||||||
|
padd(sa, fa, sb, fb, sd, fd);
|
||||||
|
|
||||||
|
printf("Result (A + B): ");
|
||||||
|
for (j = sc; j <= fc; j++) {
|
||||||
|
printf("%.2fx^%d", terms[j].coef, terms[j].expon);
|
||||||
|
if (j < fc) printf(" + ");
|
||||||
|
}
|
||||||
|
printf("\n-----------------------------------------\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user