Salve a tutti!
Ho scritto questo codice, che serve a calcolare la derivata di un polinomio:
poly è semplicemente un array di interi, der è un array di poly.codice:typedef int *poly; typedef poly *der; der derivative(poly P, int N, int k); int calcolaDerivata(int coeff, int grado); der derivative(poly P, int N, int k) { int i, j, f; der d; poly p2; poly pp; d = calloc(N, sizeof(poly)); p2 = calloc(k+1, sizeof(int)); for( i=0; i<N; i++ ) { p2 = calloc(k+1, sizeof(int)); for( j=0; j<=k; j++ ) { p2[j] = calcolaDerivata(P[j], j+1); printf("%d: %d -- %d\n",j,P[j],p2[j]); } k -= 1; d[i] = p2; printf("\n\nIndirizzo: %p\n\n", p2); pp=d[i]; printf("i: %d\nd: %d %d %d %d\n",i, pp[0], pp[1], pp[2], pp[3] ); getch(); for( f=0; f<=k; f++ ) P[f]=p2[f+1]; free(p2); } pp=d[0]; printf("\n\nUscita ciclo:\n\ni: %d\nd: %d %d %d %d",i, pp[0], pp[1], pp[2], pp[3] ); getch(); return d; } int calcolaDerivata(int coeff, int grado) { if( grado == 1 ) return 0; else return coeff*(grado-1); }
Non voglio discutere dell'algoritmo: il mio problema è che, ciclando per i, quando assegno a d[i] il poly p2 mi sovrascrive con l'ultimo valore di p2 TUTTI gli elementi di d. Come mai? Stampo il valore di p2 ad ogni iterazione ed è giustamente ogni volta diverso, però quando lo assegno a d[i] me lo copia su tutti gli elementi di d. Ad esempio, se d[0]=p1, d[1]=p2 quando vado ad assegnare d[2]=p3 ho sia d[0] che d[1] uguali a p3.
Sicuramente mi sto perdendo in un bicchier d'acqua, però non riesco a uscirne. Grazie!!!

Rispondi quotando