03 aprilie 2010

Calcul de polinoame folosind cozi

#include "stdio.h"
#include "queue.h"
#include "stdlib.h"

typedef struct nod_pol{
double coef;
int exp;
} p_nod;

int main(){

Queue Q = NULL, P = NULL;
p_nod p[] = { {2,3},{23,2},{2,0},{34,3},{5,1},{3,2},{8,0}};
enqueue(&Q, &p[0]);
enqueue(&Q, &p[1]);
enqueue(&Q, &p[2]);
enqueue(&P, &p[3]);
enqueue(&P, &p[5]);
enqueue(&P, &p[4]);
enqueue(&P, &p[6]);
int i,j,k,m;

Queue aux1=Q , aux2 = P , suma = NULL, produs = NULL;
k = size(Q);
m = size(P);
int exp;

// adunarea a doua polinoame
p_nod y = *(p_nod*)dequeue(&aux1);
p_nod z = *(p_nod*)dequeue(&aux2);
if (y.exp>z.exp) exp = y.exp;
else exp = z.exp;
int exp2 = y.exp + z.exp;
for (j=exp;j>=0;j--){
aux1 = Q; aux2 = P;
p_nod *t = (p_nod*)malloc(sizeof(p_nod));
t->exp = j;
t->coef = 0;
for (i=0;i<=k-1;i++){
p_nod y = *(p_nod*)dequeue(&aux1);
if (y.exp==j) t->coef+=y.coef;
}
for (i=0;i<=m-1;i++){
p_nod z = *(p_nod*)dequeue(&aux2);
if (z.exp==j) t->coef+=z.coef;
}
enqueue(&suma,t);
}
k = size(suma);
for (i=0;i<=k-1;i++){
z = *(p_nod*)dequeue(&suma);
printf("%.2lf %d\n",z.coef,z.exp);
}
printf("\n");

// inmultirea a doua polinoame
for (j=exp2; j>=0; j--){
p_nod *t = (p_nod*)malloc(sizeof(p_nod));
t->exp = j;
t->coef = 0;
aux1 = Q;
while (aux1!=NULL){
aux2 = P;
p_nod y = *(p_nod*)dequeue(&aux1);
while (aux2!=NULL){
p_nod z = *(p_nod*)dequeue(&aux2);
if (y.exp + z.exp == j)
t->coef+=y.coef*z.coef;
}
}
enqueue(&produs,t);
}
k = size(produs);
for (i=0;i<=k-1;i++){
z = *(p_nod*)dequeue(&produs);
printf("%.2lf %d\n",z.coef,z.exp);
}
return 0;
}

Niciun comentariu: