Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // esame 26-02-2016
- // file260216.txt
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- struct dati{
- int anno;
- int mese;
- int ora;
- int min;
- int centralina;
- double temperatura;
- };
- struct dati *letturaFile(FILE *f,int *n);
- void stampaStructDati(struct dati *d,int n);
- int soglia32(struct dati *d,int n);
- double mediaTemperatura(struct dati *d,int n);
- void temperaturaMinima(struct dati *d,int n);
- void temperaturaMassima(struct dati *d,int n);
- int mese(struct dati *d,int n);
- int numeroTotaleCentraline(struct dati *d,int n);
- int main( int argc, char *argv[]){
- int nDati;
- int numSuperamenti,totCentraline,meseMax;
- double mediaTemp;
- struct dati *dati;
- FILE *f;
- if(argc!=2){
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- //lettura e stampa struct
- dati=letturaFile(f,&nDati);
- fclose(f);
- stampaStructDati(dati,nDati);
- // richiesta 1
- numSuperamenti=soglia32(dati,nDati);
- printf("[SUPERAMENTI]\n%d\n",numSuperamenti);
- //richiesta 2
- mediaTemp=mediaTemperatura(dati,nDati);
- printf("[MEDIA]\n%.1lf\n",mediaTemp);
- //richiesta 3
- printf("[MIN-MAX]\n");
- temperaturaMinima(dati,nDati);
- temperaturaMassima(dati,nDati);
- //richiesta 4
- meseMax=mese(dati,nDati);
- printf("[MESE]\n%d\n",meseMax);
- //richiesta 5
- totCentraline=numeroTotaleCentraline(dati,nDati);
- printf("[NUM-CENTRALINE]\n%d\n",totCentraline);
- return 0;
- }
- struct dati *letturaFile(FILE *f,int *n){
- int nConv;
- char buffer[100];
- char s1[5]; //codice centralina completo Axxx
- char s2[4];// codice centralina numerico xxx
- struct dati *d1,*d2;
- int size=10;
- *n=0;
- d2=malloc(size*sizeof(struct dati));
- while(fgets(buffer,sizeof(buffer),f)){
- d1=d2 + *n;
- nConv=sscanf(buffer,"%d %d %d %d %s %lf",&d1->anno,&d1->mese,&d1->ora,&d1->min,s1,&d1->temperatura);
- strcpy(s2,s1+1);// s2 stringa in cui copio e s1+1 è la posizione da cui inizio a copiare
- d1->centralina=atoi(s2); // inserisco il contenuto della stringa s2 all'interno della struct nel int centralina
- //printf("%s\n",s2);
- (*n)++;
- if(*n>=size){
- size=size*2;
- d2=realloc(d2,size*sizeof(struct dati));
- }
- }
- d2=realloc(d2,*n*sizeof(struct dati));
- return d2;
- }
- void stampaStructDati(struct dati *d,int n){
- int i;
- for(i=0;i<n;i++){
- printf("%d %d %d %d %d %.1lf\n",d[i].anno,d[i].mese,d[i].ora,d[i].min,d[i].centralina,d[i].temperatura);
- }
- }
- int soglia32(struct dati *d,int n){
- int i;
- int count=0;
- for(i=0;i<n;i++){
- if(d[i].temperatura>32){
- count++;
- }
- }
- return count;
- }
- double mediaTemperatura(struct dati *d,int n){
- int i;
- double media;
- double somma=0;
- for(i=1;i<n;i++){
- somma=somma+d[i].temperatura;
- }
- media=somma/n;
- return media;
- }
- void temperaturaMinima(struct dati *d,int n){
- int i,indice;
- double temperaturaMin=50;
- for(i=0;i<n;i++){
- if(d[i].temperatura<temperaturaMin){
- temperaturaMin=d[i].temperatura;
- indice=i;
- }
- }
- printf("%d-%d %.1lf\n",d[indice].anno,d[indice].mese,temperaturaMin);
- }
- void temperaturaMassima(struct dati *d,int n){
- int i,indice;
- double temperaturaMax=0;
- for(i=0;i<n;i++){
- if(d[i].temperatura>temperaturaMax){
- temperaturaMax=d[i].temperatura;
- indice = i;
- }
- }
- printf("%d-%d %.1lf\n ",d[indice].anno,d[indice].mese,temperaturaMax);
- }
- int mese(struct dati *d,int n){
- int i;
- int mese;
- int max=0;
- int v[12];
- for(i=0;i<12;i++){
- v[i]=0;
- }
- for(i=0;i<n;i++){
- mese=d[i].mese;
- v[mese-1]++;
- }
- for(i=0;i<12;i++){
- if(v[i]>max){
- max=v[i];
- mese=i+1;
- }
- }
- return mese;
- }
- int numeroTotaleCentraline(struct dati *d,int n){
- int i;
- int count=0;
- for(i=0;i<n;i++){
- if(d[i].centralina!=d[i+1].centralina){
- count ++;
- }
- }
- return count;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement