Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali...

Post on 02-May-2015

212 views 0 download

Transcript of Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali...

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 nell’array 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è l’utente non decide di terminare; main chiama la funzione visualizzaMenu per stampare il menu dei comandi ed esegue le azioni relative alla scelta dell’utente 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 l’intero corrispondente alla scelta fatta dall’utente; notare che l’array di stringhe del menu va definito nel main e poi passato come parametro a visualizzaMenu

– caricaVettore è chiamata dal main e carica l’array 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 nell’array col valore più alto, oltre alla frequenza con cui tale valore compare nell’array; questa funzione non ritorna nulla al main, stampa autonomamente il massimo e la sua frequenza

– calcolaMedia, chiamata dal main, ritorna la media dei dati dell’array (2 decimali)

Anche il buon uso di rientri nel codice e commenti sarà oggetto di valutazione.

Tema d’esame – 1° compitino 2005

Visualizzazione del programma (1/2)

Visualizzazione del programma (2/2)

01 #include <stdio.h> /* Caricamento librerie – Per I/O e random */02 #include <stdlib.h>03 #include <time.h>04 #define SIZE 100 /* Definizione di costante – Dimensione dell’array */0506 int visualizzaMenu ( char [ ] [50] ); /* Prototipi delle funzioni */07 void caricaVettore ( int [ ], int );08 void cercaMassimo ( int [ ], int );09 float calcolaMedia ( int [ ], int );1011 int main (){ /* Definizione della funzione principale

*/ 1213 char menuOperazioni [4] [50] = { /* Dichiarazioni di variabili */14 { "1) Carica l’array“ },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 all’input 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 l’input è 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 dell’operazione 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 all’operazione: “ );50 scanf( “%d”, &selezione );51 return selezione;52 } 53 54 /* 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 }8182 /* 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)