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

7
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

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

Page 1: 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.

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

Page 2: 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.

Visualizzazione del programma (1/2)

Page 3: 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.

Visualizzazione del programma (2/2)

Page 4: 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.

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)

Page 5: 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.

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)

Page 6: 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.

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)

Page 7: 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.

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)