#include #include #define STEP 10 typedef struct { int godina; double prihod, rashod; } firma; void greska(){ fprintf(stderr, "-1\n"); exit(EXIT_FAILURE); } int provera(int g, double p, double r){ return g < 0 || p < 0 || r < 0; } int cmp(const void * ptr1, const void * ptr2){ int godina = * (int *) ptr1; const firma * f = ptr2; return godina - f->godina; } int main() { FILE * in = fopen("arhiva.txt", "r"); if(in == NULL){ greska(); } int n = STEP; firma * f = malloc(n*sizeof(firma)); if(f == NULL){ greska(); } int i = 0; int g; double p, r; while (fscanf(in, "%d %lf %lf", &g, &p, &r) != EOF) { if(provera(g, p, r)){ greska(); } if(i == n){ n+=STEP; f = realloc(f, n*sizeof(firma)); if(f == NULL){ greska(); } } f[i].godina = g; f[i].prihod = p; f[i].rashod = r; i++; } fclose(in); n = i; scanf("%d", &g); if(g < 0){ greska(); } firma * nadjeni = bsearch(&g, f, n, sizeof(firma), cmp); if(nadjeni == NULL){ printf("Ne postoje informacije\n"); } else { if(nadjeni->prihod >= nadjeni->rashod){ printf("Zarada: %g\n", nadjeni->prihod - nadjeni->rashod); } else{ printf("Gubitak: %g\n", - nadjeni->prihod + nadjeni->rashod); } } free(f); return 0; }