#include #include #include #include #include typedef struct data Data; typedef struct kurs Kurs; struct data { short rok; char dzien, miesiac; }; struct kurs{ Data kdata; char port[30], towar[3]; char zal; int tony, cena; }; char cmpdata(Data a, Data b) { if(a.rokb.rok) return 1; if(a.miesiacb.miesiac) return 1; if(a.dzienb.dzien) return 1; return 0; } Kurs* kursy = NULL; int nkur = 0; void strtodata(const char* str, Data* data) { int vars[3]; int index = 0, i2 = 0; char buff[10]; char c; while(c = *str++) { if(isdigit(c)) { buff[index++] = c; } else { buff[index] = 0; vars[i2++] = atoi(buff); if(i2==3) break; index = 0; } } if(i2<3) { buff[index] = 0; vars[i2++] = atoi(buff); } data->rok = vars[0]; data->dzien = vars[2]; data->miesiac = vars[1]; } void skipline(FILE* p) { char c; while(c = fgetc(p) != '\n'); } void loadkursy(FILE* file) { int nr = 0; char buffer[30]; kursy = malloc(sizeof(Kurs) * ++nkur); while(fscanf(file, "%s", buffer) != EOF ) { switch(nr) { case 0: strtodata(buffer, &kursy[nkur-1].kdata); break; case 1: strcpy(kursy[nkur-1].port, buffer); break; case 2: strncpy(kursy[nkur-1].towar, buffer, 3); break; case 3: kursy[nkur-1].zal = *buffer == 'Z'; break; case 4: kursy[nkur-1].tony = atoi(buffer); break; case 5: kursy[nkur-1].cena = atoi(buffer); break; } if(nr == 5) { nr = 0; kursy = realloc(kursy, sizeof(Kurs) * ++nkur); } else nr++; } --nkur; } void printkurs(Kurs* k) { printf("%d-%d-%d %s %s %d %d %d\n", k->kdata.rok, k->kdata.miesiac, k->kdata.dzien, k->port, k->towar, k->zal, k->tony, k->cena); } void printkursy() { for(int i=0;izal) continue; int in = k->towar[1]-'1'; towary[in]++; tony[in] += k->tony; } int mi = maxin(towary, 5); printf("T%c %d\n", mi+'1', tony[mi]); } void zad62() { int num = 0; for(int i=0;ikdata.rok - 1900; dt1.tm_mon = k->kdata.miesiac - 1; dt1.tm_mday = k->kdata.dzien; dt1.tm_isdst = -1; k = &kursy[i+1]; dt2.tm_year = k->kdata.rok - 1900; dt2.tm_mon = k->kdata.miesiac - 1; dt2.tm_mday = k->kdata.dzien; dt1.tm_isdst = -1; double secs = difftime(mktime(&dt2), mktime(&dt1)); int days = floor(secs/86400)-1; if(days>20) num++; } printf("%d\n", num); } void zad63() { Data beg, end; beg.rok = 2016; beg.miesiac = 2; beg.dzien = 1; end.rok = 2018; end.miesiac = 8; end.dzien = 1; for(int i=0;ikdata, beg) > 0 && cmpdata(k->kdata, end) < 1) printkurs(k); } } int main() { FILE* file = fopen("statek.txt", "r"); skipline(file); loadkursy(file); //printkursy(); zad61(); zad62(); zad63(); fclose(file); free(kursy); return 0; }