Buenas estoy haciendo una función que sume un monomio a un polinomio, la función es inmutable y usa una estructura enlazada.
Mi problema es que al hacer la suma (parece que la hace bien) también se modifica el valor del PolinomioP1 y eso no tiene que pasar ya que después tengo que hacer mas operaciones con el polinomio.
Este es el resustado de la ejecucion
PolinomioP1: +2.0x^4 +1.0x^3 +1.0x^2 -5.0x^0
Monomio: 11x^3
SumaMonomio: +2.0x^4 +12.0x^3 +1.0x^2 -5.0x^0
PolinomioP1: +2.0x^4 +12.0x^3 +1.0x^2 -5.0x^0
Alguien me podría ayudar
Gracias, saludos.
Mi problema es que al hacer la suma (parece que la hace bien) también se modifica el valor del PolinomioP1 y eso no tiene que pasar ya que después tengo que hacer mas operaciones con el polinomio.
Este es el resustado de la ejecucion
PolinomioP1: +2.0x^4 +1.0x^3 +1.0x^2 -5.0x^0
Monomio: 11x^3
SumaMonomio: +2.0x^4 +12.0x^3 +1.0x^2 -5.0x^0
PolinomioP1: +2.0x^4 +12.0x^3 +1.0x^2 -5.0x^0
Código (c) [Seleccionar]
typedef struct Celda {
int grado;
float coef;
struct Celda * sig;
} CeldaRep;
typedef CeldaRep * CeldaAp;
typedef void * Polinomio;
Polinomio SumaMonomio(Polinomio p, int grado, float coeficiente) {
CeldaAp Pol = p;
CeldaAp c = p; //copia de p para recorrer los bucles;
while((c->sig!=NULL) && (c->sig->grado > grado)) {
Pol->coef = c->sig->coef;
Pol->grado = c->sig->grado;
//Pol->sig->sig = c->sig->sig;
c = c->sig;
Pol=Pol->sig;
//printf("%1.1fx^%i \n",Pol->sig->coef,Pol->sig->grado);
}
if ((c->sig!=NULL)&&(c->sig->grado==grado)) {
Pol->sig->coef = c->sig->coef + coeficiente;
if (Pol->sig->coef == 0) {
CeldaAp aux = Pol->sig;
Pol->sig = Pol->sig->sig;
free(aux);
}
}
else {
//crear los if por si no hay memoria
CeldaAp aux = malloc(sizeof(CeldaRep));
aux->coef = coeficiente;
aux->grado = grado;
aux->sig = Pol->sig;
Pol->sig = aux;
}
return Pol;
}
Alguien me podría ayudar
Gracias, saludos.