Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore massimo nellarray e calcolare la media di tutti i suoi elementi. Nel dettaglio, si richiede di scrivere le seguenti funzioni C: –main prevede un ciclo globale in grado di far eseguire il programma più volte, finchè lutente non decide di terminare; main chiama la funzione visualizzaMenu per stampare il menu dei comandi ed esegue le azioni relative alla scelta dellutente ritornata da tale funzione (comprende il controllo sugli errori di input) –visualizzaMenu stampa il menu dei comandi, ricevendo un array di stringhe (lista delle opzioni) come parametro dal main, e ritorna lintero corrispondente alla scelta fatta dallutente; notare che larray di stringhe del menu va definito nel main e poi passato come parametro a visualizzaMenu –caricaVettore è chiamata dal main e carica larray con 100 interi casuali da 10 a 100 e stampa in modo leggibile gli elementi generati –cercaMassimo, chiamata dal main, trova e stampa il dato nellarray col valore più alto, oltre alla frequenza con cui tale valore compare nellarray; questa funzione non ritorna nulla al main, stampa autonomamente il massimo e la sua frequenza –calcolaMedia, chiamata dal main, ritorna la media dei dati dellarray (2 decimali) Anche il buon uso di rientri nel codice e commenti sarà oggetto di valutazione. Tema desame – 1° compitino 2005
Visualizzazione del programma (1/2)
Visualizzazione del programma (2/2)
01 #include /* Caricamento librerie – Per I/O e random */ 02 #include 03 #include 04 #define SIZE 100 /* Definizione di costante – Dimensione dellarray */ int visualizzaMenu ( char [ ] [50] ); /* Prototipi delle funzioni */ 07 void caricaVettore ( int [ ], int ); 08 void cercaMassimo ( int [ ], int ); 09 float calcolaMedia ( int [ ], int ); int main (){ /* Definizione della funzione principale */ char menuOperazioni [4] [50] = {/* Dichiarazioni di variabili */ 14 { "1) Carica larray }, 15 { "2) Ricerca il massimo }, 16 { "3) Calcola la media }, 17 { "0) Esci dal programma } 18 }; 19 int vettoreCasuale [SIZE], scelta = -1; 20 float media; 21 Sviluppo del main (1/2)
22 while ( scelta != 0 ){ /* Ciclo per eseguire più volte il programma */ 23 scelta = visualizzaMenu(menuOperazioni); /* Carica il menu */ 24 switch (scelta){ /* Decisione di cosa fare in base allinput utente */ 25 case 1: 26 caricaVettore(vettoreCasuale, SIZE); 27 break; 28 case 2: 29 cercaMassimo(vettoreCasuale, SIZE); 30 break; 31 case 3: 32 media = calcolaMedia(vettoreCasuale, SIZE); 33 printf( "\nLa media dei valori e' %5.2f\n\n, media ); 34 break; 35 case 0: /* Se linput è 0 non fa nulla e al prossimo giro esce */ 36 break; 37 default: /* Rifiuta ogni input diverso dai precedenti */ 38 printf( Scelta non corretta. Inserire un nuovo valore\n ); 39 break; /* Ma non esce, passa al giro successivo del ciclo*/ 40 } 41 } 42 } 43 Sviluppo del main (2/2)
44 /* Funzione che visualizza il menu e ritorna la scelta delloperazione da fare */ 45 int visualizzaMenu ( char menu [ ] [50] ){ 46 int i, selezione = 0; 47 printf( "\n\n\n\nMENU DEI COMANDI\n*********************\n ); 48 for ( i=0; i<4; i++ ) printf( "%s\n, menu[i] ); /* Stampa riga per riga */ 49 printf( "\nDigitare la scelta corrispondente alloperazione: ); 50 scanf( %d, &selezione ); 51 return selezione; 52 } /* Funzione che carica il vettore con numeri casuali */ 55 void caricaVettore ( int vettore [ ], int dimensione ){ 56 int valoreCasuale, i; 57 srand( time( NULL ) ); /* Randomizza la sequenza generata da rand() */ 58 for ( i=0; i<dimensione; i++ ){ /* Ciclo che riempie il vettore */ 59 valoreCasuale = 10 + ( rand() % 91); /* con numeri casuali */ 60 vettore[i] = valoreCasuale; 61 } 62 printf( \n ); 63 for ( i=0; i<dimensione; i++ ){ 64 printf( "%3d, vettore[i] ); 65 if ( i % 20 == 19 ) printf( \n ); 66 } 67 } /* Stampa il vettore originale */ Sviluppo delle funzioni (1/2)
68 69 /* Funzione che cerca e stampa sia il massimo che la sua frequenza */ 70 void cercaMassimo ( int vettore [ ], int dimensione ){ 71 int i, max = 0, fmax = 0; 72 for ( i=0; i<dimensione; i++ ){ 73 if ( vettore[i] > max ){ /* Se il dato è maggiore del massimo corrente */ 74 max = vettore[i]; /* esso diventa il nuovo massimo corrente */ 75 fmax = 1; /* e si resetta il contatore delle occorrenze */ 76 } 77 else if ( vettore[i] == max ) fmax++; /*Se il dato è uguale al */ 78 } /* massimo corrente, ne incrementa il contatore */ 79 printf( "\nIl massimo e' %d, presente %d volte\n\n, max, fmax ); 80 } /* Funzione che calcola la media dei valori del vettore passato */ 83 float calcolaMedia ( int vettore [ ], int dimensione ){ 84 int i, totale = 0; 85 for ( i=0; i<dimensione; i++) totale += vettore[i]; 86 return (float) totale / dimensione; 87 } Sviluppo delle funzioni (2/2)