Untitled - MARKUP 4.03 KB
                                
                                    #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

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.rok<b.rok) return -1;
    if(a.rok>b.rok) return 1;
    if(a.miesiac<b.miesiac) return -1;
    if(a.miesiac>b.miesiac) return 1;
    if(a.dzien<b.dzien) return -1;
    if(a.dzien>b.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;i<nkur;i++) {
		Kurs* k = &kursy[i];
		printkurs(k);
	}
}

int maxin(int* t, int n) {
    int max = -9999, maxi = -1;
    for(int i=0;i<n;i++) {
        if(max < t[i]) {
            max = t[i];
            maxi = i;
        }
    }
    return maxi;
}

void zad61() {
    int towary[5], tony[5];
    memset(towary, 0, sizeof(towary));
    memset(towary, 0, sizeof(tony));
    for(int i=0;i<nkur;i++) {
		Kurs* k = &kursy[i];
		if(!k->zal) 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;i<nkur-1;i++) {
        struct tm dt1 = {0}, dt2 = {0};
        Kurs* k = &kursy[i];
        dt1.tm_year = k->kdata.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;i<nkur-1;i++) {
        Kurs* k = &kursy[i];
        if(cmpdata(k->kdata, 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;
}
                                
                            

Paste Hosted With By Wklejamy.pl