#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Range
{
float rec_min;
float rec_max;
} range;
typedef struct Dati
{
char cognome[41];
char nome[41];
int podi;
float record;
int giorno;
int mese;
int anno;
} dati;
int main(int argc, char *argv[])
{
FILE *fa, *fp;
range v[100];
dati x;
int i=0, j, podi_min=10000, podi_max=0, flag=0;
int anno=0, mese=0, giorno=0;
if(argc!=2)
{
printf("Usage: %s filename\n", argv
[0]); return -1;
}
fp
=fopen("filter.txt", "r");
if(fp==NULL)
{
printf("Errore nell'apertura del file filter.txt\n"); return -2;
}
while(fscanf(fp
, "%f %*c %f", &v
[i
].
rec_min, &v
[i
].
rec_max)!= EOF
) {
i++;
}
if(fa==NULL)
{
printf("Errore nell'apertura del file %s", argv
[1]); return -3;
}
printf(" Nome Cognome\t Podi\tRecord\t Data\n");
while(fscanf(fa
,"%s %s %d %f %d/%d/%d", x.
nome, x.
cognome, &x.
podi, &x.
record, &x.
giorno, &x.
mese, &x.
anno)!=EOF
) {
for(j=0; j<i; j++)
{
if(x.record>v[j].rec_min && x.record<v[j].rec_max)
flag=1;
}
if(flag!=1)
printf("%10s %10s %6d %9.2f %5d/%d/%d\n", x.
nome, x.
cognome, x.
podi, x.
record, x.
giorno, x.mese, x.anno);
if(podi_min>x.podi)
podi_min=x.podi;
if(podi_max<x.podi)
podi_max=x.podi;
if(anno<x.anno)
{
anno=x.anno;
if(mese<x.mese)
{
mese=x.mese;
if(giorno<x.giorno)
{
giorno=x.giorno;
}
}
}
flag=0;
}
if(fa==NULL)
{
printf("Errore nell'apertura del file %s", argv
[1]); return -5;
}
while(fscanf(fa
,"%s %s %d %f %d/%d/%d", x.
nome, x.
cognome, &x.
podi, &x.
record, &x.
giorno, &x.
mese, &x.
anno)!=EOF
) {
if(x.podi==podi_min)
printf("Podi min: %d %s %s\n", x.
podi, x.
nome, x.
cognome);
if(x.podi==podi_max)
printf("Podi max: %d %s %s\n", x.
podi, x.
nome, x.
cognome);
if(anno==x.anno && mese==x.mese)
printf("Podio piu' recente: %s %s %d/%d/%d\n", x.
nome, x.
cognome, x.
giorno, x.
mese, x.
anno);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgUmFuZ2UKewogICAgZmxvYXQgcmVjX21pbjsKICAgIGZsb2F0IHJlY19tYXg7Cn0gcmFuZ2U7Cgp0eXBlZGVmIHN0cnVjdCBEYXRpCnsKICAgIGNoYXIgY29nbm9tZVs0MV07CiAgICBjaGFyIG5vbWVbNDFdOwogICAgaW50IHBvZGk7CiAgICBmbG9hdCByZWNvcmQ7CiAgICBpbnQgZ2lvcm5vOwogICAgaW50IG1lc2U7CiAgICBpbnQgYW5ubzsKfSBkYXRpOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgRklMRSAqZmEsICpmcDsKICAgIHJhbmdlIHZbMTAwXTsKICAgIGRhdGkgeDsKICAgIGludCBpPTAsIGosIHBvZGlfbWluPTEwMDAwLCBwb2RpX21heD0wLCBmbGFnPTA7CiAgICBpbnQgYW5ubz0wLCBtZXNlPTAsIGdpb3Jubz0wOwoKICAgIGlmKGFyZ2MhPTIpCiAgICB7CiAgICAgICAgcHJpbnRmKCJVc2FnZTogJXMgZmlsZW5hbWVcbiIsIGFyZ3ZbMF0pOwogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICBmcD1mb3BlbigiZmlsdGVyLnR4dCIsICJyIik7CgogICAgaWYoZnA9PU5VTEwpCiAgICB7CiAgICAgICAgcHJpbnRmKCJFcnJvcmUgbmVsbCdhcGVydHVyYSBkZWwgZmlsZSBmaWx0ZXIudHh0XG4iKTsKICAgICAgICByZXR1cm4gLTI7CiAgICB9CgogICAgd2hpbGUoZnNjYW5mKGZwLCAiJWYgJSpjICVmIiwgJnZbaV0ucmVjX21pbiwgJnZbaV0ucmVjX21heCkhPSBFT0YpCiAgICB7CiAgICAgICAgaSsrOwogICAgfQogICAgZmNsb3NlKGZwKTsKCiAgICBmYT1mb3Blbihhcmd2WzFdLCAiciIpOwoKICAgIGlmKGZhPT1OVUxMKQogICAgewogICAgICAgIHByaW50ZigiRXJyb3JlIG5lbGwnYXBlcnR1cmEgZGVsIGZpbGUgJXMiLCBhcmd2WzFdKTsKICAgICAgICByZXR1cm4gLTM7CiAgICB9CgogICAgcHJpbnRmKCIgICAgICBOb21lICAgICBDb2dub21lXHQgUG9kaVx0UmVjb3JkXHQgICBEYXRhXG4iKTsKCiAgICB3aGlsZShmc2NhbmYoZmEsIiVzICVzICVkICVmICVkLyVkLyVkIiwgeC5ub21lLCB4LmNvZ25vbWUsICZ4LnBvZGksICZ4LnJlY29yZCwgJnguZ2lvcm5vLCAmeC5tZXNlLCAmeC5hbm5vKSE9RU9GKQogICAgewogICAgICAgIGZvcihqPTA7IGo8aTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoeC5yZWNvcmQ+dltqXS5yZWNfbWluICYmIHgucmVjb3JkPHZbal0ucmVjX21heCkKICAgICAgICAgICAgICAgIGZsYWc9MTsKICAgICAgICB9CgogICAgICAgIGlmKGZsYWchPTEpCiAgICAgICAgICAgIHByaW50ZigiJTEwcyAlMTBzICU2ZCAlOS4yZiAlNWQvJWQvJWRcbiIsIHgubm9tZSwgeC5jb2dub21lLCB4LnBvZGksIHgucmVjb3JkLCB4Lmdpb3JubywKICAgICAgICAgICAgICAgICAgIHgubWVzZSwgeC5hbm5vKTsKCiAgICAgICAgaWYocG9kaV9taW4+eC5wb2RpKQogICAgICAgICAgICBwb2RpX21pbj14LnBvZGk7CgogICAgICAgIGlmKHBvZGlfbWF4PHgucG9kaSkKICAgICAgICAgICAgcG9kaV9tYXg9eC5wb2RpOwoKICAgICAgICBpZihhbm5vPHguYW5ubykKICAgICAgICB7CiAgICAgICAgICAgIGFubm89eC5hbm5vOwogICAgICAgICAgICBpZihtZXNlPHgubWVzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbWVzZT14Lm1lc2U7CiAgICAgICAgICAgICAgICBpZihnaW9ybm88eC5naW9ybm8pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZ2lvcm5vPXguZ2lvcm5vOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgZmxhZz0wOwogICAgfQoKCiAgICBmY2xvc2UoZmEpOwoKCmZhPWZvcGVuKGFyZ3ZbMV0sICJyIik7CgppZihmYT09TlVMTCkKewogICAgcHJpbnRmKCJFcnJvcmUgbmVsbCdhcGVydHVyYSBkZWwgZmlsZSAlcyIsIGFyZ3ZbMV0pOwogICAgcmV0dXJuIC01Owp9CgpwcmludGYoIlxuIik7Cgp3aGlsZShmc2NhbmYoZmEsIiVzICVzICVkICVmICVkLyVkLyVkIiwgeC5ub21lLCB4LmNvZ25vbWUsICZ4LnBvZGksICZ4LnJlY29yZCwgJnguZ2lvcm5vLCAmeC5tZXNlLCAmeC5hbm5vKSE9RU9GKQp7CgogICAgaWYoeC5wb2RpPT1wb2RpX21pbikKICAgICAgICBwcmludGYoIlBvZGkgbWluOiAlZCAlcyAlc1xuIiwgeC5wb2RpLCB4Lm5vbWUsIHguY29nbm9tZSk7CgogICAgaWYoeC5wb2RpPT1wb2RpX21heCkKICAgICAgICBwcmludGYoIlBvZGkgbWF4OiAlZCAlcyAlc1xuIiwgeC5wb2RpLCB4Lm5vbWUsIHguY29nbm9tZSk7CgogICAgaWYoYW5ubz09eC5hbm5vICYmIG1lc2U9PXgubWVzZSkKICAgIHByaW50ZigiUG9kaW8gcGl1JyByZWNlbnRlOiAlcyAlcyAlZC8lZC8lZFxuIiwgeC5ub21lLCB4LmNvZ25vbWUsIHguZ2lvcm5vLCB4Lm1lc2UsIHguYW5ubyk7Cgp9CgpmY2xvc2UoZmEpOwoKcmV0dXJuIDA7Cn0K