#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
float rec_min;
float rec_max;
} range;
typedef struct
{
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+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgZmxvYXQgcmVjX21pbjsKICAgIGZsb2F0IHJlY19tYXg7Cn0gcmFuZ2U7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyIGNvZ25vbWVbNDFdOwogICAgY2hhciBub21lWzQxXTsKICAgIGludCBwb2RpOwogICAgZmxvYXQgcmVjb3JkOwogICAgaW50IGdpb3JubzsKICAgIGludCBtZXNlOwogICAgaW50IGFubm87Cn0gZGF0aTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIEZJTEUgKmZhLCAqZnA7CiAgICByYW5nZSB2WzEwMF07CiAgICBkYXRpIHg7CiAgICBpbnQgaT0wLCBqLCBwb2RpX21pbj0xMDAwMCwgcG9kaV9tYXg9MCwgZmxhZz0wOwogICAgaW50IGFubm89MCwgbWVzZT0wLCBnaW9ybm89MDsKCiAgICBpZihhcmdjIT0yKQogICAgewogICAgICAgIHByaW50ZigiVXNhZ2U6ICVzIGZpbGVuYW1lXG4iLCBhcmd2WzBdKTsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgZnA9Zm9wZW4oImZpbHRlci50eHQiLCAiciIpOwoKICAgIGlmKGZwPT1OVUxMKQogICAgewogICAgICAgIHByaW50ZigiRXJyb3JlIG5lbGwnYXBlcnR1cmEgZGVsIGZpbGUgZmlsdGVyLnR4dFxuIik7CiAgICAgICAgcmV0dXJuIC0yOwogICAgfQoKICAgIHdoaWxlKGZzY2FuZihmcCwgIiVmICUqYyAlZiIsICZ2W2ldLnJlY19taW4sICZ2W2ldLnJlY19tYXgpIT0gRU9GKQogICAgewogICAgICAgIGkrKzsKICAgIH0KICAgIGZjbG9zZShmcCk7CgogICAgZmE9Zm9wZW4oYXJndlsxXSwgInIiKTsKCiAgICBpZihmYT09TlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIkVycm9yZSBuZWxsJ2FwZXJ0dXJhIGRlbCBmaWxlICVzIiwgYXJndlsxXSk7CiAgICAgICAgcmV0dXJuIC0zOwogICAgfQoKICAgIHByaW50ZigiICAgICAgTm9tZSAgICAgQ29nbm9tZVx0IFBvZGlcdFJlY29yZFx0ICAgRGF0YVxuIik7CgogICAgd2hpbGUoZnNjYW5mKGZhLCIlcyAlcyAlZCAlZiAlZC8lZC8lZCIsIHgubm9tZSwgeC5jb2dub21lLCAmeC5wb2RpLCAmeC5yZWNvcmQsICZ4Lmdpb3JubywgJngubWVzZSwgJnguYW5ubykhPUVPRikKICAgIHsKICAgICAgICBmb3Ioaj0wOyBqPGk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKHgucmVjb3JkPnZbal0ucmVjX21pbiAmJiB4LnJlY29yZDx2W2pdLnJlY19tYXgpCiAgICAgICAgICAgICAgICBmbGFnPTE7CiAgICAgICAgfQoKICAgICAgICBpZihmbGFnIT0xKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIlMTBzICUxMHMgJTZkICU5LjJmICU1ZC8lZC8lZFxuIiwgeC5ub21lLCB4LmNvZ25vbWUsIHgucG9kaSwgeC5yZWNvcmQsIHguZ2lvcm5vLAogICAgICAgICAgICAgICAgICAgeC5tZXNlLCB4LmFubm8pOwoKICAgICAgICAgICAgaWYocG9kaV9taW4+eC5wb2RpKQogICAgICAgICAgICAgICAgcG9kaV9taW49eC5wb2RpOwoKICAgICAgICAgICAgaWYocG9kaV9tYXg8eC5wb2RpKQogICAgICAgICAgICAgICAgcG9kaV9tYXg9eC5wb2RpOwoKICAgICAgICAgICAgaWYoYW5ubzx4LmFubm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFubm89eC5hbm5vOwogICAgICAgICAgICAgICAgaWYobWVzZTx4Lm1lc2UpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWVzZT14Lm1lc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoZ2lvcm5vPHguZ2lvcm5vKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2lvcm5vPXguZ2lvcm5vOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZsYWc9MDsKCiAgICB9CgoKICAgIGZjbG9zZShmYSk7CgoKICAgIGZhPWZvcGVuKGFyZ3ZbMV0sICJyIik7CgogICAgaWYoZmE9PU5VTEwpCiAgICB7CiAgICAgICAgcHJpbnRmKCJFcnJvcmUgbmVsbCdhcGVydHVyYSBkZWwgZmlsZSAlcyIsIGFyZ3ZbMV0pOwogICAgICAgIHJldHVybiAtNTsKICAgIH0KCiAgICBwcmludGYoIlxuIik7CgogICAgd2hpbGUoZnNjYW5mKGZhLCIlcyAlcyAlZCAlZiAlZC8lZC8lZCIsIHgubm9tZSwgeC5jb2dub21lLCAmeC5wb2RpLCAmeC5yZWNvcmQsICZ4Lmdpb3JubywgJngubWVzZSwgJnguYW5ubykhPUVPRikKICAgIHsKCiAgICAgICAgaWYoeC5wb2RpPT1wb2RpX21pbikKICAgICAgICAgICAgcHJpbnRmKCJQb2RpIG1pbjogJWQgJXMgJXNcbiIsIHgucG9kaSwgeC5ub21lLCB4LmNvZ25vbWUpOwoKICAgICAgICBpZih4LnBvZGk9PXBvZGlfbWF4KQogICAgICAgICAgICBwcmludGYoIlBvZGkgbWF4OiAlZCAlcyAlc1xuIiwgeC5wb2RpLCB4Lm5vbWUsIHguY29nbm9tZSk7CgogICAgICAgIGlmKGFubm89PXguYW5ubyAmJiBtZXNlPT14Lm1lc2UpCiAgICAgICAgICAgIHByaW50ZigiUG9kaW8gcGl1JyByZWNlbnRlOiAlcyAlcyAlZC8lZC8lZFxuIiwgeC5ub21lLCB4LmNvZ25vbWUsIHguZ2lvcm5vLCB4Lm1lc2UsIHguYW5ubyk7CgogICAgfQoKICAgIGZjbG9zZShmYSk7CgogICAgcmV0dXJuIDA7Cn0K