/*
Nome: Mario
Cognome: Montanari

1. Scrivi un programma in C++ che:
 - Definisca una struct denominata Dato, contenente i seguenti campi:
    - numero (int): un numero intero;
    - valore (float): un numero in virgola mobile;
    - simbolo (char): un carattere.


2. Crei un array di Dato per gestire più elementi.


3. Implementi le seguenti funzioni:
 - riempiArray(Dato arr[], int n): riempie l'array di Dato chiedendo i dati all'utente (o in modo casuale).
 - trovaMassimo(const Dato arr[], int n): restituisce l'indice dell'elemento con il valore più alto nel campo valore.
 - stampaArray(const Dato arr[], int n): stampa tutti gli elementi dell'array in formato leggibile.
 - contaCar(const Dato arr[], char c): restituisce il conteggio delle occorrenze del carattere c.
*/

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

#define CAPACITY 10
#define SIZE 5
#define NUM_MIN 0
#define NUM_MAX 50

using namespace std;

typedef struct {
	int numero;
	float valore;
	char simbolo;
} Dato;

void riempiArray(Dato arr[], int n);
void trovaMassimo(const Dato arr[], int n);
void stampaArray(const Dato arr[], int n);
void contaCar(const Dato arr[], int n);

int main(void) {
	srand(time(NULL));
	Dato arr[CAPACITY];
	int n = SIZE;
	int contaOccorrenzeC;
	
	riempiArray(arr, n);
	stampaArray(arr, n);
	contaCar(arr, n);
	trovaMassimo(arr, n);
	
	return 0;
}

void riempiArray(Dato arr[], int n) {
	float parteDecimale = 0;
	for (int i = 0; i < n; i++) {
		arr[i].numero = rand() % (NUM_MAX - NUM_MIN + 1) + NUM_MIN;
		arr[i].valore = rand() % (NUM_MAX - NUM_MIN + 1) + NUM_MIN;
			parteDecimale = rand() % (NUM_MAX - NUM_MIN + 1) + NUM_MIN;
			arr[i].valore = arr[i].valore + (parteDecimale / 100);
		arr[i].simbolo = rand() % (122 - 97 + 1) + 97;
	}
}

void trovaMassimo(const Dato arr[], int n) {
	float massimo = arr[0].valore;
	for (int i = 0; i < n; i++) {
		if (arr[i].valore > massimo) {
			massimo = arr[i].valore;
		}
	}
	cout << "Valore massimo nel campo 'valore': " << massimo << endl;
}

void stampaArray(const Dato arr[], int n) {
	for (int i = 0; i < n; i++) {
		cout << "Numero: " << arr[i].numero << endl;
		cout << "Valore: " << arr[i].valore << endl;
		cout << "Simbolo: " << arr[i].simbolo << endl << endl;
	}
}

void contaCar(const Dato arr[], int n) {
	int contaOccorrenzeC = 0;
	for (int i = 0; i < n; i++) {
		if (arr[i].simbolo == 'c') {
			contaOccorrenzeC++;
		}
	}
	cout << "Conta le occorrenze del carattere 'c': " << contaOccorrenzeC << endl;
}