Ciao a tutti,
vi propongo il mio esercizio. Devo calcolare la mediana dei miei campioni di 3/4 numeri. Fin quando non faccio l'ordinamento me li calcola in maniera corretta, quando chiamo il MergeSort non mi scrive l'ouput...
Di seguito il codice
+codice:for( i = 0; i < n; i++ ) campione[i] = 1; mediana = (double *)malloc(sizeof(double)*n_spazicampi); for(j=0; j<n_spazicampi; j++) { media1=0.0; fprintf(fp, "%4d: { ", j + 1 ); /* il campione è racchiuso tra parentesi */ for( i = 0; i < n - 1; i++ ) { fprintf(fp, "%f, ", popol[campione[i]-1]); med[i]=popol[campione[i]-1]; } med[i]=popol[campione[i]-1]; for(k=0;k<n;k++) media1= media1 + med[k]; media1=media1/n; //stimamed[j]=media1; /* cumula i valori della media */ fprintf(fp, "%f }\t", popol[campione[i]-1]); fprintf(fp, "media = %f\t",media1); /***********************************************************************************************/ mediana[j]=medianaCampionaria(med,n); fprintf(fp, "mediana = %f\n",mediana[j]); }
codice:double medianaCampionaria(double *v,int numElem) { double mediana; MergeSort(v,numElem-1); if (numElem%2==1) mediana=v[((numElem+1)/2)-1]; else { int m1=numElem/2; int m2=m1+1; mediana=(v[m1-1]+v[m2-1])/2; } return mediana; }

Rispondi quotando