#include <stdio.h>
#define MAX 100    /// dimensione dei vettori

double somma(int v[], int nval)
{
    int i;
    double s = 0;
    for (i = 0; i < nval; i++)
        s += v[i];
    return s;
}


double media(int v[], int nval)
{
    return somma(v,nval)/nval;
}


void differenza_media(int v[], int nval)   /// scrive sullo schermo la differenza di ogni valore dalla media
{
    int i;
    double diff;
    double m = media(v,nval);
    printf("      Valore       Differenza\n");
    for (i = 0; i < nval; i++)
    {
        diff = v[i] - m;
        printf("%12d", v[i]);
        printf("%12.2lf\n", diff);
    }

}

void visualizza_maggiori (int v[], int nval)    /***visualizza i numeri maggiori della media***/
{
    int i;
    double m = media(v,nval);
    for(i = 0; i < nval; i++)
        if (v[i] > m)
            printf("%d\n", v[i]);
}

void numeri_vicini_media (int v[], int nval)  /// visualizza i numeri che differiscono di al piu' di una unita' dalla media
{

    int i;
    double m = media(v,nval);
    for(i = 0; i < nval; i++)
        /// if (v[i] - m < -1 || v[i] - m > 1)    /// ho trovato subito la condizione che NON va bene
        if (!(v[i] - m < -1 || v[i] - m > 1))    /// allora, la inverto la condizione con il ! (NOT)
            printf("%d\n", v[i]);

}

int main()
{
    int nval, temp;
    int v[MAX] = {0};
    do
    {
        printf("Quanti numeri vuoi inserire? (massimo %d) -->", MAX);
        scanf("%d", &nval);
    }
    while(nval < 1 || nval > MAX);

    for (temp = 0; temp < nval; temp++)
    {
        printf("Inserisci un numero: ");
        scanf("%d", &v[temp]);
    }

    printf("La tua media e' di %.2lf\n", media(v, nval));
    printf("La differenza dalla media e':\n");
    differenza_media(v, nval);
    printf("I numeri piu' grandi della media sono: \n");
    visualizza_maggiori(v, nval);
    printf("I numeri che differiscono non piu' di una unita' dalla media sono:\n");
    numeri_vicini_media(v,nval);

    return 0;
}
