#include #include #include #define MAX_KARAKTERA 21 void greska() { fprintf(stderr, "-1"); exit(EXIT_FAILURE); } typedef struct { char naziv[MAX_KARAKTERA]; float cena; int kolicina; } PROIZVOD; int poredi(const void *a, const void *b) { PROIZVOD *prvi = (PROIZVOD*)a; PROIZVOD *drugi = (PROIZVOD*)b; if(prvi->kolicina * prvi->cena != drugi->kolicina * drugi->cena) if(prvi->kolicina * prvi->cena < drugi->kolicina * drugi->cena) return -1; else return 1; return -strcmp(prvi->naziv, drugi->naziv); } int main() { FILE *ulaz = fopen("proizvodi.txt", "r"); if(ulaz == NULL) greska(); PROIZVOD *niz = NULL; PROIZVOD *pom = NULL; int i = 0; niz = malloc(sizeof(PROIZVOD)); if(niz == NULL) greska(); pom = niz; while(fscanf(ulaz, "%s%f%d", niz[i].naziv, &niz[i].cena, &niz[i].kolicina) == 3) { if(niz[i].cena <= 0 || niz[i].kolicina <= 0) greska(); i++; pom = realloc(niz, (i+1) * sizeof(PROIZVOD)); if(pom == NULL) greska(); niz = pom; } int n = i; qsort(niz, n, sizeof(PROIZVOD), poredi); for(i = 0; i < n; i++) printf("%s %.2f\n", niz[i].naziv, niz[i].cena * niz[i].kolicina); free(niz); fclose(ulaz); return 0; }