/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN

Scrivi una funzione che ricevuto come
parametro un array di interi e la sua
dimensione, restituisca una struct
contenente il valore massimo, la media,
il numero di coppie.
*/

#include <iostream>
#include <ctime>
#include <cstdlib>

#define SIZE 10
#define MASSIMO 99
#define MINIMO 0 

using namespace std;

typedef struct {
    int valoreMassimo;
    float media;
    int numeroDiCoppie;
    int array[SIZE];
} arrayDiInteri;

arrayDiInteri riempiArray();
int calcolaValoreMassimo(int arr[], int size);
float calcolaMedia(int arr[], int size);
int calcolaNumeroDiCoppie(int arr[], int size);

int main() {
    arrayDiInteri dati = riempiArray();

    dati.valoreMassimo = calcolaValoreMassimo(dati.array, SIZE);
    dati.media = calcolaMedia(dati.array, SIZE);
    dati.numeroDiCoppie = calcolaNumeroDiCoppie(dati.array, SIZE);

    cout << "Array generato: ";
    for (int i = 0; i < SIZE; i++) {
        cout << dati.array[i] << " ";
    }
    cout << endl;

    cout << "Valore massimo: " << dati.valoreMassimo << endl;
    cout << "Media: " << dati.media << endl;
    cout << "Numero di coppie: " << dati.numeroDiCoppie << endl;

    return 0;
}

arrayDiInteri riempiArray() {
    arrayDiInteri dati;
    srand(time(NULL));
    for (int i = 0; i < SIZE; i++) {
        dati.array[i] = rand() % (MASSIMO - MINIMO + 1) + MINIMO;
    }
    return dati;
}

int calcolaValoreMassimo(int arr[], int size) {
    int valoreMassimo = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] > valoreMassimo) {
            valoreMassimo = arr[i];
        }
    }
    return valoreMassimo;
}

float calcolaMedia(int arr[], int size) {
    int somma = 0;
    float media = 0;
    for (int i = 0; i < size; i++) {
        somma += arr[i];
    }
    media = (float)somma / size;
    return media;
}

int calcolaNumeroDiCoppie(int arr[], int size) {
    int numeroDiCoppie = 0;
    for (int i = 0; i < size - 1; i++) {
        if (arr[i] == arr[i + 1]) {
            numeroDiCoppie++;
        }
    }
    return numeroDiCoppie;
}