Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // esame 26-02-2016
- /*file260216.txt
- 2000 02 10 11 A123 33
- 2000 04 9 12 A124 2
- 2001 06 12 02 A125 4
- 2001 10 16 01 A221 2,7
- 2002 01 13 00 A315 32,6
- 2003 03 14 05 A316 22
- 2004 10 15 06 A412 15,1
- 2005 09 20 21 A317 17,2
- 2006 11 17 08 A351 33,6
- 2007 12 18 12 A275 18
- */
- // 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);
- int temperaturaMinima(struct dati *d,int n);
- int temperaturaMassima(struct dati *d,int n);
- void mese(struct dati *d,int n);
- int numeroTotaleCentraline(struct dati *d,int n);
- int main( int argc, char *argv[]){
- int nDati;
- int numSuperamenti,tempMin,totCentraline;
- double mediaTemp,tempMax;
- struct dati *dati;
- FILE *f;
- if(argc!=2){
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 0;
- }
- //lettura e stampa struct
- dati=letturaFile(f,&nDati);
- 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
- tempMin=temperaturaMinima(dati,nDati);
- tempMax=temperaturaMassima(dati,nDati);
- printf("[MIN-MAX]\n%02d\n%.1lf\n",tempMin,tempMax); // così tempMax esce sbagaliata 33.0
- //richiesta 4
- printf("[MESE]\n");
- mese(dati,nDati);
- //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;
- }
- int temperaturaMinima(struct dati *d,int n){
- int i;
- int temperaturaMin=50;
- for(i=0;i<n;i++){
- if(d[i].temperatura<temperaturaMin){
- temperaturaMin=d[i].temperatura;
- }
- }
- return temperaturaMin;
- }
- int temperaturaMassima(struct dati *d,int n){
- int i;
- double temperaturaMax=0;
- for(i=0;i<n;i++){
- if(d[i].temperatura>temperaturaMax){
- temperaturaMax=d[i].temperatura;
- }
- } //printf(" %.1lf\n",temperaturaMax);// giusta esce 33.6
- return temperaturaMax;
- }
- void mese(struct dati *d,int n){
- int i;
- int count;
- int temperaturaMax=0;
- for(i=0;i<n;i++){
- if(d[i].temperatura>temperaturaMax){
- temperaturaMax=d[i].temperatura;
- count=d[i].mese;
- }
- }
- printf("%d\n",count);
- }
- 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