Ciao a tutti!vi scrivo questa notte dopo ore perse cercando di capire dove sia l'errore... Il mio professore di algoritmi e strutture dati ci ha fatto vedere qualche esempio di "algoritmi generici" come li ha chiamati lui, ovvero algoritmi di ordinamento o di ricerca di vettori di qualunque tipo di dato. Invece di usare puntatori a void come impone il buon senso, utilizza puntatori a char perchè sono di piccole dimensioni e perchè "ai suoi tempi non c'erano i puntatori a void". Ma lasciando stare questo, vi posto il codice:
Il programma funziona in questo modo, il bubblesort si appoggia ad una funzione che faccia il confronto fra due elementi del vettore. Il problema nasce nel main, ovvero non riesco a richiamare correttamente il bubble sort: la funzione si aspetta un puntatore a char, e ovviamente se faccio il cast da puntatore a int a char perdo delle informazioni, infatti compila senza warning, fa uno scambio solo ed esce dal ciclo... qualcuno riesce ad aiutarmi? :/codice:#include <stdio.h> #define TRUE 1 #define FALSE 0 #define MAX 6 void bubblesort(char*,int,int,int (*)()); int icompare(char*, char*); void printvett(int*, int); int main() { int a[]={3,5,1,4,2,6}; char *vet = (char*)a; printvett(a,MAX); bubblesort(vet,MAX,4,(*icompare)); printvett(a,MAX); return 0; } void printvett(int *vet, int dim) { int i; putchar('\n'); for(i=0; i<dim; i++) { printf("%d ",vet[i]); } putchar('\n'); } int icompare(char *w1, char *w2) { int *ia, *ib; ia = (int *) w1; ib = (int *) w2; if(*ia==*ib) return 0; return ((*ia>*ib)?-1:1); } void bubblesort(char *v, int dim, int size, int (*compare)()) { char *w; int flag = FALSE; int i,j; char tmp; while(!flag) { dim--; flag = TRUE; w=v; for(i=0; i<dim; i++) if((*compare)(w,w+size)>0) { for(j=0; j<size; j++) { tmp = w[j]; w[j] = w[j+size]; w[j+size] = tmp; } flag = FALSE; } } }

vi scrivo questa notte dopo ore perse cercando di capire dove sia l'errore... Il mio professore di algoritmi e strutture dati ci ha fatto vedere qualche esempio di "algoritmi generici" come li ha chiamati lui, ovvero algoritmi di ordinamento o di ricerca di vettori di qualunque tipo di dato. Invece di usare puntatori a void come impone il buon senso, utilizza puntatori a char perchè sono di piccole dimensioni e perchè "ai suoi tempi non c'erano i puntatori a void". Ma lasciando stare questo, vi posto il codice:
Rispondi quotando