/*
Nome: Mario
Cognome: Montanari

PROGRAMMA CHE, DATO UN ARRAY CONTENENTE 10 VALORI GENERATI CASUALMENTE, RESETTA GLI ELEMENTI DISPARI DELL'ARRAY.
*/

#include <iostream> // LIBRERIA NECESSARIA PER L'INPUT E L'OUTPUT STANDARD
#include <array> // LIBRERIA NECESSARIA PER LAVORARE CON GLI ARRAY
#include <cstdlib> // LIBRERIA NECESSARIA PER LAVORARE CON LA FUNZIONE 'rand'
#include <ctime> // LIBRERIA NECESSARIA PER LAVORARE CON LA FUNZIONE 'time'
#define CAPACITY 10 // DIMENSIONE MASSIMA DELL'ARRAY
#define SIZE 10 // NUMERO DI CELLE OCCUPATE NELL'ARRAY
#define MIN 1 // VALORE MINIMO PER I NUMERI GENERATI CASUALMENTE
#define MAX 100 // VALORE MASSIMO PER I NUMERI GENERATI CASUALMENTE
using namespace std;

void riempiArray(int arr[], int size); // PROTOTIPO DELLA FUNZIONE CHE RIEMPIE L'ARRAY INIZIALE CON NUMERI CASUALI
void stampaArray(int arr[], int size); // PROTOTIPO DELLA FUNZIONE CHE STAMPA GLI ELEMENTI PRESENTI NELL'ARRAY
void resettaElementiArray(int arr[], int size); // PROTOTIPO DELLA FUNZIONE CHE RESETTA GLI ELEMENTI DISPARI DELL'ARRAY

int main(void) {
    int arr[CAPACITY]; // DICHIARAZZIONE DELL'ARRAY 'arr[]' CON CAPACITA' MASSIMA DI 10
    int size = SIZE; // INIZIALIZZAZIONE DELLA VARIABILE 'size' CHE SPECIFICA IL NUMERO DI ELEMENTI PRESENTI NELL'ARRAY
    
    riempiArray(arr, size); // CHIAMATA DELLA FUNZIONE CHE RIEMPIE L'ARRAY INIZIALE CON NUMERI CASUALI

    cout << "Initial array: ";
    stampaArray(arr, size); // CHIAMATA DELLA FUNZIONE CHE STAMPA GLI ELEMENTI PRESENTI NELL'ARRAY
    
    resettaElementiArray(arr, size); // CHIAMATA DELLA FUNZIONE CHE RESETTA GLI ELEMENTI DISPARI DELL'ARRAY
    
    cout << "Final array: ";
    stampaArray(arr, size); // CHIAMATA DELLA FUNZIONE CHE STAMPA GLI ELEMENTI PRESENTI NELL'ARRAY
    
    return 0; // TERMINA IL PROGRAMMA
}

// DICHIARAZIONE DELLA FUNZIONE CHE RIEMPIE L'ARRAY INIZIALE CON NUMERI CASUALI
void riempiArray(int arr[], int size) {
    srand(time(NULL)); // INIZIALIZZA IL GENERATORE DI NUMERI CASUALI
    for (int i = 0; i < size; i++) { // ISTRUZIONE CHE CICLA ATTRAVERSO TUTTE LE CELLE DELL'ARRAY
        arr[i] = rand() % (MAX - MIN + 1) + MIN; // GENERA UN NUMERO CASUALE TRA 'MIN' E 'MAX' E LO ASSEGNA ALLA CELLA CORRENTE
    }
}

// DICHIARAZIONE DELLA FUNZIONE CHE STAMPA GLI ELEMENTI PRESENTI NELL'ARRAY
void stampaArray(int arr[], int size) {
    for (int i = 0; i < size; i++) { // ISTRUZIONE CHE CICLA ATTRAVERSO TUTTI GLI ELEMENTI PRESENTI NELL'ARRAY
        cout << arr[i] << " "; // STAMPA OGNI ELEMENTO SEGUITO DA UNO SPAZIO
    }
    cout << endl; // AGGIUNGE UN A CAPO DOPO LA STAMPA DI TUTTI GLI ELEMENTI
}

// DICHIARAZIONE DELLA FUNZIONE CHE RESETTA GLI ELEMENTI DISPARI DELL'ARRAY
void resettaElementiArray(int arr[], int size) {
    for (int i = 0; i < size; i++) { // ISTRUZIONE CHE CICLA ATTRAVERSO TUTTI GLI ELEMENTI PRESENTI NELL'ARRAY
        if (arr[i] % 2 != 0) { // ISTRUZIONE CHE VERIFICA SE L'ELEMENTO CORRENTE E' DISPARI
            arr[i] = 0; // SE L'ELEMENTO E' DISPARI LO IMPOSTA A ZERO
        }
    }
}