Given a text file containing data on N weather stations, I have to load the file into a list, and up to here, okay. Can not create a function able to calculate what the weather station that has recorded the largest change in temperature. I enter both the code and the text file:
/*inclusione delle librerie*/
#include <stdio.h>
#include <malloc.h>
/*definizione del tipo di dato per memorizzare i dati della stazione meteo*/
typedef struct dati_meteo
{
int id;
int giorno;
double umidita;
int temperatura;
} dati_meteo_t;
/*definizione del tipo per l'elemento della lista*/
typedef struct elem_lista
{
dati_meteo_t dati;
struct elem_lista *succ_p;
} elem_lista_t;
/*definizione lista*/
// typedef elem_lista_t * listaDati;
/*dichiarazioni delle funzioni*/
void caricaDati (char nomefile[]);
void inserisciDati (elem_lista_t **, dati_meteo_t);
void visualizzaDati (elem_lista_t *);
int main(void)
{
char nomefile[20];
char scelta;
printf("_______________________\n");
printf("| METEO STATS |\n");
printf("| menu': |\n");
printf("|______________________|\n");
/*ciclo per la ripetizione del menu'*/
do
{
printf("digita:\n");
printf("\t1> per caricare il file di testo\n");
printf("\t2> quale stazione meteo ha registrato la piu' grande variazione di temperatura nel mese corrente\n");
printf("\t3> calcola quale stazione meteo ha registrato la piu' alta umidita' media nel mese corrente\n");
printf("\t0> uscita\n\n");
printf("\t> ");
scanf(" %c",&scelta);
switch(scelta) /*applicare la scelta fatta*/
{
case '1': /*carica file di testo*/
printf("\n\tinserisci il nome del file di testo (.txt) da caricare: ");
scanf ("%s", nomefile);
caricaDati (nomefile);
break;
case '2':
printf("\n\tla stazione....");
break;
case '3':
printf("\n\tla stazione....");
break;
case '0':
printf("\n\tuscita\n");
break;
default:
printf("\n\terrore! scelta non consentita\n");
}
} while (scelta != '0');
return(0);
}
/*definizione della funzione caricaDati*/
void caricaDati (char nomefile[20])
{
FILE *file_dati;
dati_meteo_t temp;
int contatore = 0;
elem_lista_t *testa_p = NULL;
file_dati = fopen (nomefile, "r");
if ((file_dati = fopen(nomefile, "r")) == NULL)
{
printf("\nNon posso aprire il file %s", nomefile);
}
else{
while( fscanf (file_dati,"%d%d%lf%d",&temp.id,&temp.giorno,&temp.umidita,&temp.temperatura) != EOF )
{ inserisciDati (&testa_p, temp);
contatore ++;
}
printf ("\n%d registrazioni stazioni meteo caricate", contatore);
visualizzaDati(testa_p);
}
fclose (file_dati);
}
/*definizione funzione inserisciDati*/
void inserisciDati (elem_lista_t **testa_p, dati_meteo_t dati)
{
elem_lista_t *corr_p,
*prec_p,
*nuovo_p;
for (corr_p = prec_p = *testa_p;
((corr_p != NULL) && (corr_p->dati.id == dati.id) && (corr_p->dati.temperatura > dati.temperatura));
prec_p = corr_p, corr_p = corr_p->succ_p);
{
nuovo_p = (elem_lista_t *)malloc(sizeof(elem_lista_t));
nuovo_p->dati = dati;
nuovo_p->succ_p = corr_p;
if (corr_p == *testa_p)
*testa_p = nuovo_p;
else
prec_p->succ_p = nuovo_p;
}
}
void visualizzaDati (elem_lista_t *testa_p) {
elem_lista_t * temp;
temp = testa_p;
if (temp == NULL) printf ("\nla lista e' vuota!");
else printf ("\n *** VISUALIZZO dati *** \n\n");
while (temp != NULL) {
printf ("%d %d %lf %d\n",
temp->dati.id,
temp->dati.giorno,
temp->dati.umidita,
temp->dati.temperatura);
temp = temp->succ_p;
}
}
Text file is like this:
ID Day Hygr Temp
1435 09 0.48 30
1435 21 0.76 24
1435 28 0.32 22
2307 03 0.54 19
2307 14 0.82 14
0081 18 0.46 30
0081 21 0.86 34
Bella!


Sign In
Create Account

Back to top









