Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Porque no compila esto en C?

Estas en el tema de Porque no compila esto en C? en el foro de C/C++ en Foros del Web. Buenas, se supone que tengo que hacer un algoritmo divide y venceras que multiplique dos polinomios de grado n, lo he hecho yo, por tanto ...
  #1 (permalink)  
Antiguo 08/03/2007, 04:06
Avatar de manurodri189  
Fecha de Ingreso: octubre-2006
Ubicación: Toledo
Mensajes: 76
Antigüedad: 17 años, 6 meses
Puntos: 1
Porque no compila esto en C?

Buenas, se supone que tengo que hacer un algoritmo divide y venceras que multiplique dos polinomios de grado n, lo he hecho yo, por tanto no se si la semantica estara bien. El caso esque no me compila, y esque soy nuevo porgramando en C y lo tengo muy verde. Aqui os dejo el codigo a ver si le podeis echar un vistazo.

//Multiplicacion de polinomios con divide y venceras

int* MultiPoli(int* p, int n, int* q, int m);


int* MultiPoli(int* p, int n, int* q, int m){
int* P;
int* Pi;
int* Pd;
int* Q;
int* Qi;
int* Qd;
int* Ri;
int* Rd;
int* Rh;
int* Sp;
int* Sq;
int* f;
int* g;
int* h;
int* j;
int x=0;
int y=0;
int i,N,M;

if(n>m){ //El vector mas grande es P
P=p;
Q=q;
N=n+1;
M=m+1;
}
else{
Q=p;
P=q;
N=m+1;
M=n+1;
}

if(M==1){ //Multiplicación Convencional. Caso Base
return (P[0]*Q[0]);
}
else{
for(i=0;i<(N/2)-1;i++){ //Parte Izquierda de P
Pi[i]=P[i];
}
for(i=N/2;i<N;i++){ //Parte Derecha de P
Pd[i]=P[i];
}
for(i=0;i<(M/2)-1;i++){ //Parte Izquierda de Q
Qi[i]=Q[i];
}
for(i=M/2;i<M;i++){ //Parte Derecha de Q
Qd[i]=P[i];
}
Ri=MultiPoli(Pi,N/2,Qi,M/2); //Llamada recursiva
Rd=MultiPoli(Pd,N/2,Qd,M/2); //Llamada recursiva

for(i=0;i<(N/2)-1;i++){ // Pi+Pd
Sp[i]=Pi[i]+Pd[i];
}
for(i=0;i<(M/2)-1;i++){ // Qi+Qd
Sq[i]=Qi[i]+Qd[i];
}
Rh=MultiPoli(Sp,N/2,Sq,M/2); //Llamada recursiva

for (i=0;i<(N/2)-1;i++){ // Rh+Ri+Rd
f[i]=Rh[i]-Ri[i]-Rd[i];
}
for (i=0;i<(N/2)-1;i++){ // 1.-(Rh+Ri+Rd)*Xn/2
g[i]=0;
}
for (i=N/2;i<N;i++){ // 2.-(Rh+Ri+Rd)*Xn/2
g[N/2]=f[x];
x++;
}
for (i=0;i<N-1;i++){ // 1.-Rd*Xn
h[i]=0;
}
for (i=N;i<2N;i++){ // 2.-Rd*Xn
h[N]=Rd[y];
y++;
}

for(i=0;i<2N;i++){ // Calculo la solucion
j[i]=Ri[i]+g[i]+h[i];
}

return j;

}//Fin else
}//Fin metodo


Gracias y Salu2
  #2 (permalink)  
Antiguo 08/03/2007, 04:11
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Porque no compila esto en C?

Siempre es mas facil si nos pones tambien los errores que da el compilador. Basicamente veo dos cosas:

return (P[0]*Q[0]);

Como dice el VC++ al respecto:
(40) : error C2440: 'return' : cannot convert from 'int' to 'int *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

Tu funcion devuelve int * y no int.

Y despues estas usando 2N, me imagino que querras poner 2 * N.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 08/03/2007, 04:21
Avatar de manurodri189  
Fecha de Ingreso: octubre-2006
Ubicación: Toledo
Mensajes: 76
Antigüedad: 17 años, 6 meses
Puntos: 1
Re: Porque no compila esto en C?

Te vuelvo a dar las gracias, jejeje.

Salu2
  #4 (permalink)  
Antiguo 08/03/2007, 04:23
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Porque no compila esto en C?

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:22.