/* prova laboratorio 13/6/2002 - versione b
*
* 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
e aggiornare la media
fai scorrere indietro di un posto il numero
corrente e il precedente
termina quando numero corrente e' zero
c. mostra media scritti
*/
#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);
fprintf(fOut,"%f\n",f_2);
printf("Inserire secondo numero reale ");
scanf("%f",&f_1);
fprintf(fOut,"%f\n",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_2<f && f<f_1 || f_1<f && f<f_2){
// tratta i casi di numeri precedenti crescenti o decrescenti
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;
}