Untitled
Guest 718 29th Sep, 2021
#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;
}
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
- Untitled
Markup | 19 | 10 hours ago
- Untitled
Markup | 24 | 13 hours ago
- Wanted to see what your conviction is on this theme
Markdown | 14 | 13 hours ago
- Untitled
Markup | 65 | 1 day ago
- mega555kf7lsmb54yd6etzginolhxxi4ytdoma2rf77ngq55fhfcnyid.onion
Template Toolkit 2 | 25 | 1 day ago
- Untitled
Markup | 70 | 2 days ago
- Untitled
Markup | 77 | 2 days ago