#include #include #define KORAK 10 typedef struct Datum{ int dan; int mesec; int godina; } datum; void greska(){ fprintf(stderr, "-1\n"); exit(EXIT_FAILURE); } int provera(datum d){ return d.dan < 1 || d.dan > 31 || d.mesec < 1 || d.mesec > 12 || d.godina < 0 || d.godina > 9999; } int cmp(const void * ptr1, const void *ptr2){ const datum * d1 = ptr1; const datum * d2 = ptr2; int r = d1->godina - d2->godina; if(r == 0){ r = d1->mesec - d2->mesec; if(r == 0){ return d1->dan - d2->dan; } return r; } return r; } int main(int argc, char const *argv[]) { FILE * ulaz = fopen("datum.txt", "r"); if(ulaz == NULL){ greska(); } int n; n = KORAK; datum* d = malloc(n*sizeof(datum)); if(d == NULL){ greska(); } int i = 0; while (fscanf(ulaz, "%d.%d.%d.", &d[i].dan, &d[i].mesec, &d[i].godina) != EOF) { if(provera(d[i])){ greska(); } i++; if(i == n){ n += KORAK; d = realloc(d, n*sizeof(datum)); if(d == NULL){ greska(); } } } fclose(ulaz); n = i; qsort(d, n, sizeof(datum), cmp); for(i = 0; i < n ; i++){ printf("%d.%d.%d.\n", d[i].dan, d[i].mesec, d[i].godina ); } free(d); return 0; }