/* 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;
}