void sorter(int nr, vine l[]){ if (nr>=3) { int i,j,t; t=0; for (i=1; i<nr; i++) { for (j=1; j<nr; j++){ t = t + 1; if (l[j].navn > l[j+1].navn){ l[0] = l[j]; l[j] = l[j+1]; ´ l[j+1] = l[0]; } } } cout<<"\nDe"<<" "<<nr-1<<" "<<"vine er soteret"<<endl; } else { cout<<"\nDer enten ingen vin, eller ogsaa var der ikke nok til at sortere"<<endl; } return; }
nr er min pointer og l er navnet på min struct når jeg stopper data i den!
/* sorter */ for(i=0;i<3;i++) { for(j=(i+1);j<3;j++) { if(strcmp(a[i].navn,a[j].navn)>0) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } den yderste løkker kører over alle elementer den inderstre løkke kører over alle elementer som ligger efter det vi står med så bruger vi strcmp til at sammenligne strenge med og hvis de ikke passer så bytter vi rundt på dem ved hjælp af tmp
typedef struct data { char navn[20]; char sort[20]; char farve[20]; int pris; } Data;
Data data[MAXNOOFDATA];
/* cmp function for qsort */ #define CMPSTR(X)\ int cmp##X(const void *x1, const void *x2) {\ return strncmp(((Data *)x1)->X, ((Data *)x2)->X, sizeof(Data.X));\ } CMPSTR(navn) CMPSTR(sort) CMPSTR(farve) int cmpPris(const void *x1, const void *x2) { if (((Data *)x1)->pris > ((Data *)x2)->pris) return 1; if (((Data *)x1)->pris < ((Data *)x2)->pris) return -1; return 0; }
void SortAfter(void) { char choise;
printf("Sort after (Nanv, Sort, Color, Price):"); choise = getchar();
switch(choise) { case 'n': case 'N': qsort((void *)data, index, sizeof(data[0]), cmpNavn); break; case 'p': case 'P': qsort((void *)data, index, sizeof(data[0]), cmpPris); break; case 's': case 'S': qsort((void *)data, index, sizeof(data[0]), cmpSort); break; case 'c': case 'C': qsort((void *)data, index, sizeof(data[0]), cmpFarve); break; default: printf("Unknown sorting choise\n"); break; } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.