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:
Impostiamo il menu per la scelta:
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.
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.
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)
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;
}