3D e 3E SIA: Esercizio completo con l'utilizzo delle funzioni e procedure all'interno del Case Switch con C++


Ecco un esempio di un esercizio  con l'array che contiene le funzioni e il Case e lo Switrch.

Crea un menù di scelta che consente di scegliere quali operazioni eseguire sul vettore.


In particolare il problema si occupa di generare un array di 50 numeri casuali compresi fra 1 e 100 e offrire a menu le seguenti scelte:

1. Calcolare la media
2. Visualizzare il massimo
3. Visualizzare il minimo
4. Rigenerare l’array
5. Visualizzare i valori che distano meno di 4 dalla media
6. Calcolare la moda
7. Uscire dal programma

Quindi definiamo i prototipi delle funzioni e procedure che useremo nel programma.

Creiamo innanzitutto la funzione per generare il menù di scelta, utilizzando il costrutto swith-case.

Poi creiamo la funzione genera che serve a generare un array casuale di numeri da 1 a 100 dove includiamo anche la stampa dell’array in modo da visualizzare a video gli elementi generati. La funzione non restituisce nulla.

Le funzioni per il calcolo del massimo e del minimo prendono come parametro l’array e ritornano un valore intero che corrisponde al massimo e al minimo.

La funzione per il calcolo della media prende come parametro l’array e ritorna un valore float.

Infine creiamo la funzione per il calcolo della moda che prende come parametro l’array e non restituisce nulla.

Ecco dunque il listing completo per la risoluzione del problema che utilizza array e funzioni in C++.


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

using namespace std;

#define N 50

void genera(int a[N]); //prototipo funzione che genera un array casuale
float media(int a[N]);  //prototipo funzione per il calcolo della media
int max(int a[N]);  //prototipo funzione per il calcolo del massimo
int min(int a[N]);  //prototipo funzione per il calcolo del minimo
void dist(int a[N]);  //prototipo funzione distanza dalla media
void moda(int a[N]);  //prototipo funzione per il calcolo della moda

int menu_scelta(void)
{
  int selezione = 0;
  do
    {
    cout<<endl<<"1 - Calcolare la media"<<endl;
    cout<<"2 - Massimo"<<endl;
    cout<<"3 - Minimo"<<endl;
    cout<<"4 - Rigenera array"<<endl;
    cout<<"5 - Visualizzare i valori che distano meno di 4 dalla media"<<endl;
    cout<<"6 - Calcolare la moda"<<endl;
    cout<<"7 - Esci"<<endl;
    cout<<"Effettua una scelta:"<<endl;
    cin>>selezione;
    }
    while (selezione< 1 || selezione>7);
  return selezione;
}

int main(void)
{
    int scelta;
    int massimo,minimo;
    float med;
    int v[N];
    genera(v);
 
    while((scelta=menu_scelta())!=7){
    switch(scelta){
        case 1:
med=media(v);
cout<<"media: "<<med<<endl;
                break;
        case 2:
massimo=max(v);
cout<<"Il massimo e':"<<massimo<<endl;
                break;
        case 3:
minimo=min(v);
cout<<"Il minimo e':"<<minimo<<endl;
                break;
        case 4:
genera(v);
break;
case 5:
dist(v);
break;
case 6:
moda(v);
break;
             }
    }           
    return 0;
}

void genera(int a[N]){
int i;

srand(time(NULL));
for (i=0; i<N; i++)
a[i]=rand()%100+1;

cout<<"Stampo l'array generato"<<endl;
for (i=0; i<N; i++)
   cout<<a[i]<<"\t";
}

float media(int a[N]) {
int m=0;
int i;

for (i=0; i<N; i++){
m+=a[i];
}
m=m/N;

return m;
}

int max(int a[N]) {
int massimo=a[0];
int i;

for (i=0; i<N; i++)
if(a[i]>massimo)
massimo=a[i];

return massimo;
}

int min(int a[N]) {
int minimo=a[0];
int i;

for (i=0; i<N; i++)
if(a[i]<minimo)
minimo=a[i];

return minimo;
}

void dist(int a[N]) {
float med=media(a);
int i, dist1, dist2, trovato=0;

dist1=med+4;
dist2=med-4;

cout<<"I valori sono che distano meno di 4 dalla media sono: "<<endl;
for (i=0; i<N; i++){
if(a[i]>dist2 && a[i]<dist1){
cout<<a[i]<<" in posizione "<<i<<"\t";
trovato=1;
}
}

if(trovato!=1)
cout<<" nessun elemento "<<endl;
}

void moda(int a[N]) {
int cont=0, i, pos, moda, max=1;

for (int i=0; i<N; i++){
        cont=0;
      for (int j=i+1; j<N; j++){
        if (a[i]==a[j]){
//se trova un numero uguale incrementa il contatore
          cont++;
          pos=i; //memoriazziamo l'indice dell'elemento
        }
        if (cont>max){  //se cont è maggiore del massimo
          max=cont; //in max mettiamo il valore di cont
          moda=pos; //memorizziamo in moda l'indice dell'elemento con frequenza  più alta
                }
           }
    }
    cout<< "Il numero:  "<<a[moda]<< " compare "<<max<<" volte"<<endl;
}

fonte originale: https://www.codingcreativo.it/array-e-funzioni/

Commenti