[C] [?] Problemas con suma de polinomios

Iniciado por alt_369, 24 Noviembre 2012, 12:29 PM

0 Miembros y 2 Visitantes están viendo este tema.

alt_369

Buenas!

El programa ha de sumar dos polinomios p(x) y q(x). Al imprimir los polinomios y la suma lo han de hacer con sus correspondientes x (x^2, x^3...), y la base de los polinomios puede ser hasta 10.

No entiendo qué hago mal, porque cuando entro los siguientes datos:
3 1.2 0 -4.4 1.             (los 3 del inicio corresponden al grado de los poliomios, y lo siguiente a las cifras)
3 -2. 1. 3.3 -1.

me imprime:
p(x) +1.2 -4.4x^2 +1x^3                                                                                      
q(x) -2 +1x +3.3x^2 -1x^3                                                                                    
                                                                                                             
suma: -0.8 +1x -1.1x^2 -2

Es el -2 en negrita el que no entiendo.

Les dejo el código por si ven algún error, y muchas gracias de antemano:
#include <stdio.h>
int main(void){
int n, m, i;
float polin_n[10]={0}, polin_m[10]={0};
char x[9][4]={{"x"},{"x^2"},{"x^3"},{"x^4"},{"x^5"},{"x^6"},{"x^7"},{"x^8"},{"x^9"}};
do{ /*introduccion de datos*/
printf("introducir el grado de p(x): ");
scanf("%d", &n);
}while(n<0 || n>10);
for(i=0; i<=n; i++){
scanf("%f", &polin_n[i]);
}
do{
printf("introducir el grado de q(x): ");
scanf("%d", &m);
}while(m<0 || m>10);
for(i=0; i<=m; i++){
scanf("%f", &polin_m[i]);
}
if(polin_n[0]!=0){ /*imprimir el primer polinomio*/
printf("\np(x) %+g", polin_n[0]);
i=1;
}else{
i=0;
}
for(i=i; i<=n; i++){
while(polin_n[i]==0) i++;
printf(" %+g%s", polin_n[i], x[i-1]);
}
if(polin_m[0]!=0){ /*imprimir el segundo polinomio*/
printf("\nq(x) %+g", polin_m[0]);
i=1;
}else{
i=0;
}
for(i=i; i<=m; i++){
while(polin_m[i]==0) i++;
printf(" %+g%s", polin_m[i], x[i-1]);
}
if(m>n) n=m; /*imprimir la suma del los polinomios*/
printf("\n\nsuma: %+g", polin_n[0]+polin_m[0]);
for(i=1; i<=n; i++){
while((polin_n[i]+polin_m[i])==0) i++;
printf(" %+g%s", polin_n[i]+polin_m[i], x[i-1]);
}
printf("\n");
return 0;
}

leosansan

CitarTienes un incremento de más cuando el último sumando es cero:
Código (cpp) [Seleccionar]
#include <stdio.h>
int main(void){
int n, m, i;
float polin_n[10]={0}, polin_m[10]={0};
char x[9][4]={{"x"},{"x^2"},{"x^3"},{"x^4"},{"x^5"},{"x^6"},{"x^7"},{"x^8"},{"x^9"}};
do{ /*introduccion de datos*/
printf("introducir el grado de p(x): ");
scanf("%d", &n);
}while(n<0 || n>10);
for(i=0; i<=n; i++){
scanf("%f", &polin_n[i]);
}
do{
printf("introducir el grado de q(x): ");
scanf("%d", &m);
}while(m<0 || m>10);
for(i=0; i<=m; i++){
scanf("%f", &polin_m[i]);
}
if(polin_n[0]!=0){ /*imprimir el primer polinomio*/
printf("\np(x) %+g", polin_n[0]);
i=1;
}else{
i=0;
}
for(i=i; i<=n; i++){
while(polin_n[i]==0) i++;
printf(" %+g%s", polin_n[i], x[i-1]);
}
if(polin_m[0]!=0){ /*imprimir el segundo polinomio*/
printf("\nq(x) %+g", polin_m[0]);
i=1;
}else{
i=0;
}
for(i=i; i<=m; i++){
while(polin_m[i]==0) i++;
printf(" %+g%s", polin_m[i], x[i-1]);
}
if(m>n) n=m; /*imprimir la suma del los polinomios*/
printf("\n\nsuma: %+g", polin_n[0]+polin_m[0]);
for(i=1; i<=n; i++){

while((polin_n[i]+polin_m[i])==0 && i<n) i++;/* <==aqui el i<n */
            printf(" %+g%s", polin_n[i]+polin_m[i], x[i-1]);
            }
printf("\n");
return 0;
}

Saluditos!.

alt_369

¡Muchas gracias!

Lo he retocado para que no me imprima nada si la suma da 0:

for(i=1; i<=n-1; i++){
while((polin_n[i]+polin_m[i])==0 && i<n) i++;
printf(" %+g%s", polin_n[i]+polin_m[i], x[i-1]);
        }
if((polin_n[i]+polin_m[i])!=0){
printf(" %+g%s\n", polin_n[i]+polin_m[i], x[i-1]);
}else{
printf("\n");
}


¡Saludos!

leosansan

Sólo una chorrada, cuando al if  o else o while o ... sólo le sigue una instrucción no hace falta "envolverlas" con las llaves {}:
if((polin_n[i]+polin_m[i])!=0)
                printf(" %+g%s\n", polin_n[i]+polin_m[i], x[i-1]);
            else
                printf("\n");

CitarY por cierto, al usar las etiquetas GesHi usa las de C++ ya que así el código sale coloreado y es más fácil seguirlo.
Saluditos!.

alt_369

#4
Muchas gracias por la ayuda prestada!!

Ya he mirado cómo poner lo de las etiquetas GeSHi, para la próxima ya lo sé.

¡saludos!