/* prova laboratorio 13/6/2002 - versione a
*
* la memoria del problema e' costante, poiche' basta il numero corrente e i due
* precedenti
*
a. acquisisce nome da input, apre il file, acquisisce i primi
due numeri e inizializza il numero di valori letti e la media
b. ripeti
leggi un numero
se non zero
esegui il test per decidere se scriverlo
aggiorna la media
fai scorrere indietro di un posto il numero corrente e il precedente
termina quando numero corrente e' zero
c. mostra media letti
*/
#include <stdio.h>
typedef char Stringa[64];
int main(){
Stringa FileOut;
FILE *fOut;
float f, /* numero letto corrente */
f_1, /* numero letto precedente */
f_2, /* numero letto prima del precedente */
m; /* valore medio */
int i; /* contatore letti */
/* acquisisce nome del file e apre in scrittura
*/
printf("Inserire nome del file da creare ");
scanf("%s",FileOut);
if ((fOut=fopen(FileOut,"w"))==NULL){
printf("Impossibile creare il file %s\n",FileOut);
return 1;
}
printf("Inserire primo numero reale ");
scanf("%f",&f_2);
printf("Inserire secondo numero reale ");
scanf("%f",&f_1);
i = 2; /* inizializza numero letti */
m=(f_1+f_2)/i; /* inizializza media */
do {
printf("Inserire numero reale (0 per terminare) ");
scanf("%f",&f);
if (f!=0){
if (f>f_1 && f>f_2)
fprintf(fOut,"%f\n",f);
m=(m*i+f)/(i+1);
i++;
f_2=f_1;
f_1=f;
}
} while (f!=0);
printf("Media scritti %f\n",m);
return 0;
}