La spin-off ‘statistica UNICAL’ ’ha bisogno di dotarsi di un software per la gestione dei calcoli in maniera veloce ed automatica. In generale il software dovrebbe permettere di:
● calcolare la media aritmetica di k numeri interi presi in input
● contare i numeri divisibili per 5 di k numeri presi in input
● calcolare il massimo fra i numeri pari di una sequenza di n numeri presi in input
Analisi del problema
E’ possibile affrontare il problema utilizzando una logica top-down ovvero suddividendolo in più sottoproblemi:
![](https://www.informaticascuola.it/wp-content/uploads/2022/03/image-4.png)
Impostiamo il menu per la scelta:
![](https://www.informaticascuola.it/wp-content/uploads/2022/03/image-8.png)
Media Aritmetica
Il primo sotto-problema da rivolvere è data una sequenza di k valori trovare la media aritmetica degli stessi. Possiamo svolgere il problema utilizzando una struttura di conteggio precondizionale. Il pattern contatore si fonda su tre aspetti: una variabile per il conteggio che conta il passo attuale, una iterazione che permette di definire quando le ripetizioni di devono fermare e l’incremento della variabile di conteggio ad ogni passo.
![](https://www.informaticascuola.it/wp-content/uploads/2022/03/image-2.png)
Ad ogni passo leggo un nuovo valore che memorizzo nella variabile val. Aggiungo il valore al totale parziale tot=tot+val e incremento il contatore. Al termine dell’iterazione calcolo la media.
Divisibili per Cinque
Il secondo sotto-problema è data una sequenza di valori contare quelli divisibili per cinque. Possiamo sempre impostare una struttura di conteggio e creiamo una variabile nella quale memorizzeremo i numeri che rispettano la condizione voluta ossia la divisibilità per cinque. Chiamiamo questa variabile divisibilePerCinque ed ogni volta che troviamo un valore che rispetta la condizione la incrementiamo di uno.
![](https://www.informaticascuola.it/wp-content/uploads/2022/03/image-7.png)
Massimo dei valori
Per la sequenza di numeri presi in input troveremo il massimo utilizzando l’algoritmo classico del massimo per una sequenza di valori, isolando solamente i quelli pari con una condizione (val%2==0)
![](https://www.informaticascuola.it/wp-content/uploads/2022/03/image-6.png)
Implementazione
#include <iostream>
using namespace std;
int main()
{
int scelta;
cout<<"Calcolatore Statistica"<<endl;
cout<<"1 - Media Aritmetica"<<endl;
cout<<"2 - Divisibili per Cinque"<<endl;
cout<<"3 - Massimo fra pari"<<endl;
cin >> scelta;
if (scelta == 1) {
int cont, k, tot;
double media;
cont = 0;
tot = 0;
cout << "Di quanti valori devo calcolare la media ?" << endl;
cin >> k;
while (cont < k) {
int val;
cout << "Inserisci un valore" << endl;
cin >> val;
tot = tot + val;
cont = cont + 1;
}
media = (double) tot / k;
cout << "La media è" << endl;
cout << media << endl;
}
if (scelta == 2) {
int cont, k, divisibiliPerCinque;
cont = 0;
k = 0;
divisibiliPerCinque = 0;
cout << "Di quanti valori devo calcolare la divisibilità?" << endl;
cin >> k;
while (cont < k) {
int val;
cout << "Inserisci un valore" << endl;
cin >> val;
if (val % 5 == 0) {
divisibiliPerCinque = divisibiliPerCinque + 1;
}
cont = cont + 1;
}
cout << "Il numero di divisibili per cinque" << endl;
cout << divisibiliPerCinque << endl;
}
if (scelta == 3) {
int cont, k, max;
cont = 0;
max = 0;
k = 0;
cout << "Di quanti valori devo calcolare il massimo fra pari ?" << endl;
cin >> k;
while (cont < k) {
int val;
cout << "Inserisci un valore" << endl;
cin >> val;
if (val % 2 == 0) {
if (cont == 0) {
max = val;
} else {
if (val > max) {
max = val;
}
}
}
cont = cont + 1;
}
cout << "Il massimo è" << endl;
cout << max << endl;
}
return 0;
}