#include #include typedef struct razlomak{ int brojilac; int imenilac; } RAZLOMAK; int porediRazl(const void *a, const void *b){ float va=((RAZLOMAK*)a)->brojilac*1.0/((RAZLOMAK*)a)->imenilac; float vb=((RAZLOMAK*)b)->brojilac*1.0/((RAZLOMAK*)b)->imenilac; return (va-vb)>0?1:-1; } int main(int argc, char *argv[]){ FILE *ulaz; RAZLOMAK *razlomci; RAZLOMAK *realRazlomci; int brEl=5; int brUcit=0; int faktUvecavanja=2; int i=0; if(argc!=2){ printf("Mora uneti ime datoteke sa razlomcima!\n"); exit(EXIT_FAILURE); } ulaz=fopen(argv[1],"r"); if(ulaz==NULL){ printf("Otvaranje datoteke nije uspelo!\n"); exit(EXIT_FAILURE); } razlomci=(RAZLOMAK*)malloc(sizeof(RAZLOMAK)*brEl); if(razlomci==NULL){ printf("Alokacija prostora nije uspela!\n"); exit(EXIT_FAILURE); } while(1){ if(i>=brEl){ brEl*=faktUvecavanja; realRazlomci=realloc(razlomci,brEl*sizeof(RAZLOMAK)); if(realRazlomci==NULL){ printf("Realokacija memorije nije uspela!\n"); exit(EXIT_FAILURE); } razlomci=realRazlomci; } fscanf(ulaz,"%d %d",&razlomci[i].brojilac, &razlomci[i].imenilac); if(feof(ulaz)) break; i++; } brUcit=i; qsort(razlomci,brUcit,sizeof(RAZLOMAK),porediRazl); for(i=0; i