Anexo el código para que lo chequen :
Código
/* PROGRAMA: SUMA, RESTA, MULTIPLICACION Y DIVISION DE POLINOMIOS */ # include <stdio.h> # include <stdlib.h> # include <alloc.h> # include <conio.h> # include <dos.h> # include <string.h> # include <math.h> # define DELAY 64000 struct apuntador { float coef; int exp1; struct apuntador *siguiente; } nodo; struct apuntador *polydat1, *polydat2, *polysum1, *polysum2, *polysuma, *polymin, *polysus, *polyres, *polyfac1, *polyfac2, *polyprod, *polynum, *polyden, *polycos, *polyresta, *polyresul, *aux_poly, *nuevo, *polyder; void pausa(void), crea(void), iniciapoly(void), presentacion(void), insert_lista(struct apuntador **poly, float c, int e), imprime(struct apuntador *poly), suma_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3), multy_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3), resta_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3), div_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3, struct apuntador **poly4), der_poly(struct apuntador *poly1, struct apuntador **poly3), borrar_poly(struct apuntador **poly3, int e); float eval_poly(struct apuntador *poly1,float x); float factorial(int); int seleccion_menu(void); int i,caso,e; float c,epsilon; float coef; int exp1,fx,x0; // SE CAMBIA EXP SOLO AQUI O EN TODOS? char n; int opcion; main() { presentacion(); clrscr(); for(;;) { switch(seleccion_menu()) { case 1: int limite, iter=0; float fxd,epsilon,xa,xn; clrscr(); der_poly(polydat1, &polyder); do { xa=x0; fx=eval_poly(polydat1,xa); fxd=eval_poly(polyder,xa); xn=xa - fx/fxd; iter=iter+1; x0=xn; pausa(); pausa(); pausa(); break; case 2: clrscr(); iniciapoly(); do { do { } while (c == 0); insert_lista(&polydat1,c,e); opcion=getche(); } while((opcion==115) || (opcion==83)); imprime(polydat1); do { do { } while (c == 0); insert_lista(&polydat2,c,e); opcion=getche(); } while((opcion==115) || (opcion==83)); imprime(polydat2); pausa(); break; case 3: polysum1=polydat1; polysum2=polydat2; suma_poly(polysum1,polysum2,&polysuma); imprime(polysuma); pausa(); break; case 4: polyfac1=polydat1; polyfac2=polydat2; multy_poly(polyfac1,polyfac2,&polyprod); imprime(polyprod); pausa(); break; case 5: polymin=polydat1; polysus=polydat2; resta_poly(polymin,polysus,&polyresta); imprime(polyresta); pausa(); break; case 6: polyder = polydat1; der_poly(polydat1,&polyder); imprime(polyder); pausa(); break; case 7: default: //return (0); case 8: fx=eval_poly(polydat1,x0); break; case 9: break; case 10: clrscr(); borrar_poly(&polydat1,e); imprime(polydat1); pausa(); break; case 11: struct apuntador *fx; fx=polydat1; float a,b,c,it_limit,fa,fb,fc; int it=0; while(1) {//0 clrscr(); fa= eval_poly(fx,a); fb= eval_poly(fx,b); if((fa*fb)>0) {//1 } //-1 else while(1) {//2 it=it+1; c=(a+b)/2; fc=eval_poly(fx,c); pausa(); if(it>it_limit) break; break; if(fa*fc<=0) { b=c; fb=fc; } else { a=c; fa=fc; } }//-2 if(it<=it_limit) if(it>it_limit) pausa(); pausa(); }//0 break; case 12: struct apuntador *fsen=NULL; int t,expo,signo; double coefi,x,ter; double suma=0; double vfsen; clrscr(); x=x*3.1416/180; for(int ni=0;ni<t;ni++) { expo=2*ni+1; coefi=signo/factorial(expo); insert_lista(&fsen,coefi,expo); suma=suma+ter; } getche(); imprime(fsen); vfsen=eval_poly(fsen,x); getche(); polydat1=fsen; pausa(); break; case 13: struct apuntador *fsinhmu=NULL; int te,expon,sign; double coefic,xi,termin,dn; double sumas=0; double vfsinhmu; clrscr(); xi=xi*3.1416/180; for(int n=0;n<te;n++) { expon=2*n+1; dn=2*n; insert_lista(&fsinhmu,coefic,expon); sumas=sumas+termin; } getche(); imprime(fsinhmu); vfsinhmu=eval_poly(fsinhmu,xi); getche(); polydat1=fsinhmu; pausa(); break; } } } seleccion_menu(void) { char s[80]; int x; clrscr(); do { } while (x<0 || x>14); return (x); } void pausa(void) { } void iniciapoly(void) { polydat1=NULL; polydat2=NULL; polysum1=NULL; polysum2=NULL; polysuma=NULL; polymin=NULL; polysus=NULL; polyres=NULL; polyfac1=NULL; polyfac2=NULL; polyprod=NULL; polynum=NULL; polyden=NULL; polycos=NULL; polyres=NULL; polyresta=NULL; polyder=NULL; } void insert_lista(struct apuntador **poly, float coefi, int expo) { //0 struct apuntador *nuevo, *aux,*ant; int band=0; if(nuevo == NULL) {//1 return; }//-1 nuevo->coef=coefi; nuevo->exp1=expo; nuevo->siguiente=NULL; if(*poly==NULL) *poly=nuevo; else {//-2 aux=*poly; if(aux->exp1 < expo) { //3 nuevo->siguiente=*poly; *poly=nuevo; }//-3 else //EN OTRSOS CASOS {//4 while((aux)&&(band)) {//5 if(aux->exp1==expo) {//6 PARA TERMINO CON IGUAL EXPONENTE aux->coef=aux->coef+coefi; delete(nuevo); // O ES "if(aux->coef==0)" band=1; }//-6 else //PARA EL CASO: aux->exp1>expo {//7 if((aux->siguiente!= NULL)&&(expo>aux->siguiente->exp1)) {//8 nuevo->siguiente=aux->siguiente; aux->siguiente=nuevo; band=1; }//-8 else {//9 if(aux->siguiente==NULL) {//10 aux->siguiente=nuevo; band=1; }//-10 else ant=aux; aux=aux->siguiente; }//-9 }//-7 }//-5 }//-4 } }//-0 void imprime(struct apuntador *poly) { while(poly) { poly=poly->siguiente; } } void suma_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3) { float suma; struct apuntador *primero; primero = NULL; suma=0; while((poly1 != NULL) && (poly2 != NULL)) { if (poly1->exp1 == poly2-> exp1) { suma=poly1->coef + poly2->coef; if(suma !=0) { insert_lista(&primero,suma,poly1->exp1); } poly1=poly1->siguiente; poly2=poly2->siguiente; } else if(poly1->exp1 > poly2->exp1) { insert_lista(&primero,poly1->coef,poly1->exp1); poly1=poly1->siguiente; } else { insert_lista(&primero,poly2->coef,poly2->exp1); poly2=poly2->siguiente; } suma=0; } while(poly1 != NULL) { insert_lista(&primero,poly1->coef,poly1->exp1); poly1=poly1->siguiente; } while(poly2 != NULL) { insert_lista(&primero,poly2->coef,poly2->exp1); poly2=poly2->siguiente; } *poly3 = primero; } void multy_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3) { struct apuntador *primero; float multy; int sum; struct apuntador *p, *q, *aux1, *aux2; primero = NULL; *poly3=NULL; multy=1; sum=0; while(poly2 != NULL) { p=poly1; while(p!=NULL) { multy=p->coef *poly2->coef; sum=p->exp1 + poly2->exp1; if(multy != 0) { insert_lista(&primero,multy,sum); p=p->siguiente; } else { insert_lista(&primero,p->coef,p->exp1); p=p->siguiente; poly2=poly2->siguiente; } multy=1; } poly2=poly2->siguiente; } q = primero; while(q) { if(q->exp1==q->siguiente->exp1) { q->coef=q->coef + q->siguiente->coef; q->siguiente=q->siguiente->siguiente; } else q=q->siguiente; } *poly3=primero; } void resta_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3) { float resta; struct apuntador *primero; primero = NULL; resta= 0; while ((poly1 != NULL) && (poly2 != NULL)) { if (poly1->exp1 == poly2->exp1) { resta= poly1->coef - poly2->coef; if (resta != 0) { insert_lista (&primero, resta, poly1->exp1); } poly1= poly1->siguiente; poly2= poly2->siguiente; } else if (poly1->exp1 > poly2->exp1) { insert_lista (&primero, poly1->coef, poly1->exp1); poly1= poly1->siguiente; } else { insert_lista (&primero, poly2->coef, poly2->exp1); poly2= poly2->siguiente; } resta= 0; } while (poly1 != NULL) { insert_lista (&primero, poly1->coef, poly1->exp1); poly1= poly1->siguiente; } while (poly2 != NULL) { insert_lista (&primero, -poly2->coef, poly2->exp1); poly2= poly2->siguiente; } *poly3 = primero; } void borrar_poly(struct apuntador **poly, int expo) { // aqui va el codigo correspondiente } void div_poly(struct apuntador *polynume, struct apuntador *polydeno, struct apuntador **polycoci, struct apuntador **polyresi) { } void der_poly(struct apuntador *poly1,struct apuntador **poly3) { struct apuntador *primero=NULL; float co=0; int ex=0; while((poly1!=NULL)&&(poly1->exp1!=0)) { co=poly1->coef*poly1->exp1; ex=poly1->exp1-1; insert_lista(&primero,co,ex); poly1=poly1->siguiente; } } float eval_poly(struct apuntador *poly1, float ev) { float res2; res2=0; while(poly1) { poly1=poly1->siguiente; } return (res2); } void presentacion(void) { char c[1]; clrscr(); } float factorial(int n) { int k; float f=1; for(k=1;k<=n;k++) f=f*k; return(f); } /* PROGRAMA: SUMA, RESTA, MULTIPLICACION Y DIVISION DE POLINOMIOS */ # include <stdio.h> # include <stdlib.h> # include <alloc.h> # include <conio.h> # include <dos.h> # include <string.h> # include <math.h> # define DELAY 64000 struct apuntador { float coef; int exp1; struct apuntador *siguiente; } nodo; struct apuntador *polydat1, *polydat2, *polysum1, *polysum2, *polysuma, *polymin, *polysus, *polyres, *polyfac1, *polyfac2, *polyprod, *polynum, *polyden, *polycos, *polyresta, *polyresul, *aux_poly, *nuevo, *polyder; void pausa(void), crea(void), iniciapoly(void), presentacion(void), insert_lista(struct apuntador **poly, float c, int e), imprime(struct apuntador *poly), suma_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3), multy_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3), resta_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3), div_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3, struct apuntador **poly4), der_poly(struct apuntador *poly1, struct apuntador **poly3), borrar_poly(struct apuntador **poly3, int e); float eval_poly(struct apuntador *poly1,float x); float factorial(int); int seleccion_menu(void); int i,caso,e; float c,epsilon; float coef; int exp1,fx,x0; // SE CAMBIA EXP SOLO AQUI O EN TODOS? char n; int opcion; main() { presentacion(); clrscr(); for(;;) { switch(seleccion_menu()) { case 1: int limite, iter=0; float fxd,epsilon,xa,xn; clrscr(); der_poly(polydat1, &polyder); do { xa=x0; fx=eval_poly(polydat1,xa); fxd=eval_poly(polyder,xa); xn=xa - fx/fxd; iter=iter+1; x0=xn; pausa(); pausa(); pausa(); break; case 2: clrscr(); iniciapoly(); do { do { } while (c == 0); insert_lista(&polydat1,c,e); opcion=getche(); } while((opcion==115) || (opcion==83)); imprime(polydat1); do { do { } while (c == 0); insert_lista(&polydat2,c,e); opcion=getche(); } while((opcion==115) || (opcion==83)); imprime(polydat2); pausa(); break; case 3: polysum1=polydat1; polysum2=polydat2; suma_poly(polysum1,polysum2,&polysuma); imprime(polysuma); pausa(); break; case 4: polyfac1=polydat1; polyfac2=polydat2; multy_poly(polyfac1,polyfac2,&polyprod); imprime(polyprod); pausa(); break; case 5: polymin=polydat1; polysus=polydat2; resta_poly(polymin,polysus,&polyresta); imprime(polyresta); pausa(); break; case 6: polyder = polydat1; der_poly(polydat1,&polyder); imprime(polyder); pausa(); break; case 7: default: //return (0); case 8: fx=eval_poly(polydat1,x0); break; case 9: break; case 10: clrscr(); borrar_poly(&polydat1,e); imprime(polydat1); pausa(); break; case 11: struct apuntador *fx; fx=polydat1; float a,b,c,it_limit,fa,fb,fc; int it=0; while(1) {//0 clrscr(); fa= eval_poly(fx,a); fb= eval_poly(fx,b); if((fa*fb)>0) {//1 } //-1 else while(1) {//2 it=it+1; c=(a+b)/2; fc=eval_poly(fx,c); pausa(); if(it>it_limit) break; break; if(fa*fc<=0) { b=c; fb=fc; } else { a=c; fa=fc; } }//-2 if(it<=it_limit) if(it>it_limit) pausa(); pausa(); }//0 break; case 12: struct apuntador *fsen=NULL; int t,expo,signo; double coefi,x,ter; double suma=0; double vfsen; clrscr(); x=x*3.1416/180; for(int ni=0;ni<t;ni++) { expo=2*ni+1; coefi=signo/factorial(expo); insert_lista(&fsen,coefi,expo); suma=suma+ter; } getche(); imprime(fsen); vfsen=eval_poly(fsen,x); getche(); polydat1=fsen; pausa(); break; case 13: struct apuntador *fsinhmu=NULL; int te,expon,sign; double coefic,xi,termin,dn; double sumas=0; double vfsinhmu; clrscr(); xi=xi*3.1416/180; for(int n=0;n<te;n++) { expon=2*n+1; dn=2*n; insert_lista(&fsinhmu,coefic,expon); sumas=sumas+termin; } getche(); imprime(fsinhmu); vfsinhmu=eval_poly(fsinhmu,xi); getche(); polydat1=fsinhmu; pausa(); break; } } } seleccion_menu(void) { char s[80]; int x; clrscr(); do { } while (x<0 || x>14); return (x); } void pausa(void) { } void iniciapoly(void) { polydat1=NULL; polydat2=NULL; polysum1=NULL; polysum2=NULL; polysuma=NULL; polymin=NULL; polysus=NULL; polyres=NULL; polyfac1=NULL; polyfac2=NULL; polyprod=NULL; polynum=NULL; polyden=NULL; polycos=NULL; polyres=NULL; polyresta=NULL; polyder=NULL; } void insert_lista(struct apuntador **poly, float coefi, int expo) { //0 struct apuntador *nuevo, *aux,*ant; int band=0; if(nuevo == NULL) {//1 return; }//-1 nuevo->coef=coefi; nuevo->exp1=expo; nuevo->siguiente=NULL; if(*poly==NULL) *poly=nuevo; else {//-2 aux=*poly; if(aux->exp1 < expo) { //3 nuevo->siguiente=*poly; *poly=nuevo; }//-3 else //EN OTRSOS CASOS {//4 while((aux)&&(band)) {//5 if(aux->exp1==expo) {//6 PARA TERMINO CON IGUAL EXPONENTE aux->coef=aux->coef+coefi; delete(nuevo); // O ES "if(aux->coef==0)" band=1; }//-6 else //PARA EL CASO: aux->exp1>expo {//7 if((aux->siguiente!= NULL)&&(expo>aux->siguiente->exp1)) {//8 nuevo->siguiente=aux->siguiente; aux->siguiente=nuevo; band=1; }//-8 else {//9 if(aux->siguiente==NULL) {//10 aux->siguiente=nuevo; band=1; }//-10 else ant=aux; aux=aux->siguiente; }//-9 }//-7 }//-5 }//-4 } }//-0 void imprime(struct apuntador *poly) { while(poly) { poly=poly->siguiente; } } void suma_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3) { float suma; struct apuntador *primero; primero = NULL; suma=0; while((poly1 != NULL) && (poly2 != NULL)) { if (poly1->exp1 == poly2-> exp1) { suma=poly1->coef + poly2->coef; if(suma !=0) { insert_lista(&primero,suma,poly1->exp1); } poly1=poly1->siguiente; poly2=poly2->siguiente; } else if(poly1->exp1 > poly2->exp1) { insert_lista(&primero,poly1->coef,poly1->exp1); poly1=poly1->siguiente; } else { insert_lista(&primero,poly2->coef,poly2->exp1); poly2=poly2->siguiente; } suma=0; } while(poly1 != NULL) { insert_lista(&primero,poly1->coef,poly1->exp1); poly1=poly1->siguiente; } while(poly2 != NULL) { insert_lista(&primero,poly2->coef,poly2->exp1); poly2=poly2->siguiente; } *poly3 = primero; } void multy_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3) { struct apuntador *primero; float multy; int sum; struct apuntador *p, *q, *aux1, *aux2; primero = NULL; *poly3=NULL; multy=1; sum=0; while(poly2 != NULL) { p=poly1; while(p!=NULL) { multy=p->coef *poly2->coef; sum=p->exp1 + poly2->exp1; if(multy != 0) { insert_lista(&primero,multy,sum); p=p->siguiente; } else { insert_lista(&primero,p->coef,p->exp1); p=p->siguiente; poly2=poly2->siguiente; } multy=1; } poly2=poly2->siguiente; } q = primero; while(q) { if(q->exp1==q->siguiente->exp1) { q->coef=q->coef + q->siguiente->coef; q->siguiente=q->siguiente->siguiente; } else q=q->siguiente; } *poly3=primero; } void resta_poly(struct apuntador *poly1, struct apuntador *poly2, struct apuntador **poly3) { float resta; struct apuntador *primero; primero = NULL; resta= 0; while ((poly1 != NULL) && (poly2 != NULL)) { if (poly1->exp1 == poly2->exp1) { resta= poly1->coef - poly2->coef; if (resta != 0) { insert_lista (&primero, resta, poly1->exp1); } poly1= poly1->siguiente; poly2= poly2->siguiente; } else if (poly1->exp1 > poly2->exp1) { insert_lista (&primero, poly1->coef, poly1->exp1); poly1= poly1->siguiente; } else { insert_lista (&primero, poly2->coef, poly2->exp1); poly2= poly2->siguiente; } resta= 0; } while (poly1 != NULL) { insert_lista (&primero, poly1->coef, poly1->exp1); poly1= poly1->siguiente; } while (poly2 != NULL) { insert_lista (&primero, -poly2->coef, poly2->exp1); poly2= poly2->siguiente; } *poly3 = primero; } void borrar_poly(struct apuntador **poly, int expo) { // aqui va el codigo correspondiente } void div_poly(struct apuntador *polynume, struct apuntador *polydeno, struct apuntador **polycoci, struct apuntador **polyresi) { } void der_poly(struct apuntador *poly1,struct apuntador **poly3) { struct apuntador *primero=NULL; float co=0; int ex=0; while((poly1!=NULL)&&(poly1->exp1!=0)) { co=poly1->coef*poly1->exp1; ex=poly1->exp1-1; insert_lista(&primero,co,ex); poly1=poly1->siguiente; } } float eval_poly(struct apuntador *poly1, float ev) { float res2; res2=0; while(poly1) { poly1=poly1->siguiente; } return (res2); } void presentacion(void) { char c[1]; clrscr(); } float factorial(int n) { int k; float f=1; for(k=1;k<=n;k++) f=f*k; return(f); }