C++ Funzione Che Calcola Media

Calcolatore Media in C++

Inserisci i tuoi valori per calcolare la media aritmetica, ponderata o geometrica

Guida Completa: Funzione C++ per Calcolare la Media

Il calcolo della media è un’operazione fondamentale in programmazione e statistica. In questo articolo esploreremo come implementare diverse funzioni in C++ per calcolare vari tipi di media, con esempi pratici e ottimizzazioni.

1. Media Aritmetica

La media aritmetica è il tipo di media più comune, calcolata come la somma di tutti i valori divisa per il numero di valori.

pre { #include <iostream> #include <vector> #include <numeric> double media_aritmetica(const std::vector<double>& valori) { if (valori.empty()) return 0.0; double somma = std::accumulate(valori.begin(), valori.end(), 0.0); return somma / valori.size(); } int main() { std::vector<double> dati = {5.0, 10.0, 15.0, 20.0}; double risultato = media_aritmetica(dati); std::cout << “Media aritmetica: ” << risultato << std::endl; return 0; } }

2. Media Ponderata

La media ponderata tiene conto dell’importanza relativa di ciascun valore attraverso dei pesi.

pre { #include <iostream> #include <vector> #include <stdexcept> double media_ponderata(const std::vector<double>& valori, const std::vector<double>& pesi) { if (valori.size() != pesi.size() || valori.empty()) { throw std::invalid_argument(“Dimensione valori e pesi non corrispondente”); } double somma_prodotti = 0.0; double somma_pesi = 0.0; for (size_t i = 0; i < valori.size(); ++i) { somma_prodotti += valori[i] * pesi[i]; somma_pesi += pesi[i]; } return somma_prodotti / somma_pesi; } int main() { std::vector<double> dati = {5.0, 10.0, 15.0, 20.0}; std::vector<double> pesi = {1.0, 2.0, 3.0, 4.0}; try { double risultato = media_ponderata(dati, pesi); std::cout << “Media ponderata: ” << risultato << std::endl; } catch (const std::exception& e) { std::cerr << “Errore: ” << e.what() << std::endl; } return 0; } }

3. Media Geometrica

La media geometrica è utile per dati che crescono esponenzialmente, come tassi di interesse.

pre { #include <iostream> #include <vector> #include <cmath> #include <numeric> double media_geometrica(const std::vector<double>& valori) { if (valori.empty()) return 0.0; double prodotto = 1.0; for (double v : valori) { prodotto *= v; } return std::pow(prodotto, 1.0 / valori.size()); } int main() { std::vector<double> dati = {5.0, 10.0, 15.0, 20.0}; double risultato = media_geometrica(dati); std::cout << “Media geometrica: ” << risultato << std::endl; return 0; } }

Confronti tra Tipi di Media

Tipo di Media Formula Uso Tipico Sensibilità ai Valori Estremi
Aritmetica (x₁ + x₂ + … + xₙ)/n Dati normali Alta
Ponderata (w₁x₁ + w₂x₂ + … + wₙxₙ)/(w₁ + w₂ + … + wₙ) Dati con importanza diversa Media
Geometrica (x₁ × x₂ × … × xₙ)^(1/n) Dati moltiplicativi Bassa

Ottimizzazioni e Best Practice

  1. Gestione degli errori: Sempre validare gli input per evitare divisioni per zero o dati non validi.
  2. Efficienza: Per grandi dataset, considerare algoritmi paralleli usando OpenMP o thread C++11.
  3. Precisione: Usare double invece di float per maggiore precisione.
  4. Template: Implementare funzioni template per supportare diversi tipi numerici.

Esempio con Template

pre { #include <iostream> #include <vector> #include <type_traits> template<typename T> T media_aritmetica(const std::vector<T>& valori) { static_assert(std::is_arithmetic<T>::value, “Tipo non numerico”); if (valori.empty()) return T(0); T somma = T(0); for (const auto& v : valori) { somma += v; } return somma / static_cast<T>(valori.size()); } int main() { std::vector<int> int_dati = {5, 10, 15, 20}; std::vector<double> double_dati = {5.5, 10.5, 15.5, 20.5}; std::cout << “Media int: ” << media_aritmetica(int_dati) << std::endl; std::cout << “Media double: ” << media_aritmetica(double_dati) << std::endl; return 0; } }

Fonti Autorevoli

Domande Frequenti

Qual è la differenza tra media aritmetica e geometrica?

La media aritmetica è la somma dei valori divisa per il numero di valori, mentre la media geometrica è la radice n-esima del prodotto dei valori. La geometrica è meno sensibile ai valori estremi ed è preferibile per dati che seguono una progressione moltiplicativa.

Quando usare la media ponderata?

La media ponderata è ideale quando i dati hanno importanza diversa. Ad esempio, nel calcolo della media dei voti dove alcuni esami hanno un peso maggiore di altri.

Come gestire valori negativi nella media geometrica?

La media geometrica richiede valori positivi. Se i dati possono essere negativi, considerare:

  1. Traslare i dati aggiungendo una costante
  2. Usare il valore assoluto
  3. Applicare una trasformazione logaritmica dopo aver gestito i valori non positivi

Leave a Reply

Your email address will not be published. Required fields are marked *