Sei sulla pagina 1di 3

#include <stdio.h> #include <stdlib.h> /*Header aggiuntivo per alcune funzioni.

*/ typedef struct{ char giorno[11]; /*10 caratteri bastano, 24 sono eccessivi GG.MM.AAAA => 2+2+4+1+1 = 10. L'undicesimo carattere il terminatore nullo '\0'*/ char ora[6]; /*Stesso discorso di cui sopra.*/ float temp; /*Non serve un array di float, hai una registrazione a campi one.*/ }campione; int main () { int n_temp,i,contatore; float media,totale,massimo; /*A questo punto non pu dichiarare un array di campioni di dimensione n_t emp. Questo per due motivi principali: 1 - n_temp non stato ancora inizializzato 2 - La dimensione degli array deve essere nota a tempo di compil azione e non a runtime. Ergo servir un allocazione dinamica (vedi do po come).*/ campione *lista; /*Sar un puntatore alla memoria che allocheremo dinamica mente tra poco.*/ contatore = 0; totale = 0; printf ("Inserisci il numero delle temperature registrate: "); scanf ("%d", &n_temp); /*Solo ora puoi allocare la memoria necessaria per contenere tutti i cam pioni, tramite la funzione malloc.*/ lista = malloc(sizeof(campione)*n_temp); /*La funzione malloc ti permette di allocare memoria sullo heap del proc esso e quindi memoria dinamica. Essa restituisce un puntatore all'area di memoria allocata e prende co me parametro la dimensione della memoria da allocare. La funzione sizeof si capisce dal nome quello che restituisce.*/ for(i=0;i<n_temp;i++) { printf ("Campione numero %d \n",i); /*E' una stringa quella che stai prendendo in ingresso (dal mome nto in cui hai un array di caratteri questo diventa automaticamente una stringa, e come tale va ind icato nel formato di testo %s).*/ printf ("Inserisci il giorno di rilevamento della temperatura ne l modo GG.MM.AAAA : ");

/*Non era necessario qui %s, poich l'inserimento lo fai nella sca nf, e la printf ti stampa solo una richiesta.*/ scanf ("%s", lista[i].giorno); /*NOTA: ho tolto la & prima di lista[i].giorno. Questo perch il n ome di un'array di caratteri contiene gi l'indirizzo al primo elemento, e come tale va bene per indirizzare a una stringa da riempire nella scanf.*/ /*Anche qui una stringa.*/ printf ("Inserisci l'ora di rilevamento della temperatura nel mo do HH.MM : "); scanf ("%s", lista[i].ora); /*Qui necessaria la & perch il float va indirizzato in qualche mo do.*/ printf ("Inserisci la temperatura registrata : "); scanf ("%f", &lista[i].temp); contatore=contatore+1; totale=totale+lista[i].temp; } /*Le parti che pensavi fossero sbagliate invece sono giuste =)*/ massimo=lista[0].temp; int max_i = 0; /*Questo non ce l'avevi, leggi sotto per vedere a cosa se rve.*/ for (i=0; i<n_temp; i++) { if (massimo<lista[i].temp) { massimo=lista[i].temp; max_i = i; } } /*A che serve la variabile contatore, non hai gi n_temp?*/ /*media=totale/contatore;*/ media = totale/n_temp; /*Stesso discorso per le %s invece delle %c fatto per gli scanf sopra.*/ /*ERRORE: i stato aggiornato fino a n_temp. Stampare lista[i].qualcosa t i far stampare sempre quel qualcosa dell'ultimo elemento in lista. Cosa corretta salvarsi l'indice dell'array per cui il valore mass -imo e sfruttare quello come indice per la printf.*/ printf ("La temperatura massima e' stata registrata il giorno %s alle or e %s \n", lista[max_i].giorno, lista[max_i].ora);

printf ("Il valore medio delle temperature registrate e' %f \n",media); scanf ("%f", &media); /*questo scanf per non far chiudere subito la fine stra*/ return 0; }