Tema d’esame – 1° compitino 2005
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.
Visualizzazione del programma (1/2)
Visualizzazione del programma (2/2)
Sviluppo del main (1/2)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
/* Caricamento librerie – Per I/O e random */
/* Definizione di costante – Dimensione dell’array */
int visualizzaMenu ( char [ ] [50] );
void caricaVettore ( int [ ], int );
void cercaMassimo ( int [ ], int );
float calcolaMedia ( int [ ], int );
int main (){
/* Prototipi delle funzioni */
/* Definizione della funzione principale */
char menuOperazioni [4] [50] = {
/* Dichiarazioni di variabili */
{ "1) Carica l’array“ },
{ "2) Ricerca il massimo“ },
{ "3) Calcola la media“ },
{ "0) Esci dal programma“ }
};
int vettoreCasuale [SIZE], scelta = -1;
float media;
Sviluppo del main (2/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 delle funzioni (1/2)
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* Funzione che visualizza il menu e ritorna la scelta dell’operazione da fare */
int visualizzaMenu ( char menu [ ] [50] ){
int i, selezione = 0;
printf( "\n\n\n\nMENU DEI COMANDI\n*********************\n“ );
for ( i=0; i<4; i++ ) printf( "%s\n“, menu[i] ); /* Stampa riga per riga */
printf( "\nDigitare la scelta corrispondente all’operazione: “ );
scanf( “%d”, &selezione );
return selezione;
}
/* Funzione che carica il vettore con numeri casuali */
void caricaVettore ( int vettore [ ], int dimensione ){
int valoreCasuale, i;
srand( time( NULL ) ); /* Randomizza la sequenza generata da rand() */
for ( i=0; i<dimensione; i++ ){
/* Ciclo che riempie il vettore */
valoreCasuale = 10 + ( rand() % 91);
/* con numeri casuali */
vettore[i] = valoreCasuale;
}
printf( “\n” );
for ( i=0; i<dimensione; i++ ){
printf( "%3d “, vettore[i] );
if ( i % 20 == 19 ) printf( “\n” );
}
}
/* Stampa il vettore originale */
Sviluppo delle funzioni (2/2)
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/* Funzione che cerca e stampa sia il massimo che la sua frequenza */
void cercaMassimo ( int vettore [ ], int dimensione ){
int i, max = 0, fmax = 0;
for ( i=0; i<dimensione; i++ ){
if ( vettore[i] > max ){ /* Se il dato è maggiore del massimo corrente */
max = vettore[i];
/* esso diventa il nuovo massimo corrente */
fmax = 1;
/* e si resetta il contatore delle occorrenze */
}
else if ( vettore[i] == max ) fmax++;
/*Se il dato è uguale al */
}
/* massimo corrente, ne incrementa il contatore */
printf( "\nIl massimo e' %d, presente %d volte\n\n“, max, fmax );
}
/* Funzione che calcola la media dei valori del vettore passato */
float calcolaMedia ( int vettore [ ], int dimensione ){
int i, totale = 0;
for ( i=0; i<dimensione; i++) totale += vettore[i];
return (float) totale / dimensione;
}
Scarica

1° compitino A.A. 2004-2005