Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 3 luglio 2015
Esercizio 1 (14 punti)
Un gioco consiste nel trovare parole il cui rapporto tra il numero di consonanti e il numero di vocali sia massimo.
Detto s (score) tale rapporto, per ogni parola i-esima viene calcolato si = n. consonantii/n. vocalii . Si assuma che tutte le parole contengono almeno una vocale.
Vince il gioco il concorrente con lo score medio (media degli si) più alto.
Si scriva una funzione in linguaggio C che riceva come argomenti un vettore di stringhe nella forma di una matrice di caratteri di dimensioni 50x31 (che quindi può memorizzare al massimo 50 parole da 30 lettere ciascuna, una parola per ogni riga della matrice) e un intero n che rappresenta il numero di righe effettivamente utilizzate (la lunghezza della parte utilizzata delle righe è variabile, trattandosi di stringhe terminate da '\0'), e che restituisca lo score medio delle parole contenute nella matrice.
Per esempio, se le parole contenute nella matrice sono "arrabbiato", "tricheco", "ASTRO", "Brutto", la funzione dovrà restituire il valore 1.541667. Se le parole sono invece "aiuole", "aia", "Eolo", la funzione dovrà restituire 0.177778.
Si osservi che le lettere possono essere indifferentemente minuscole o maiuscole.
Esercizio 2 (16 punti)
Le iscrizioni a una gara podistica non competitiva a squadre sono state memorizzate in un file nel formato che può essere dedotto dal seguente esempio:
poeti: mario rossi, federico bianchi, giangiuseppe verdi, pier luigi gialli;
navigatori: luigi della valle di sotto, fabrizio della valle di sopra;
botte da orbi: paolo randello, pier silvio mazzata;
da oltre confine: 'abid al hamed, romina slovikozky, john m. carter, ted mc kenny;
Sia i nomi delle squadre che quelli dei concorrenti sono composti da una o più parole, per una lunghezza totale non superiore a 32 caratteri. La lista dei concorrenti è introdotta dai due punti, separata da virgole e terminata da punto e virgola. Tutte le squadre sono composte da un numero di concorrenti compreso tra 1 e 20. Il file contiene al massimo 50 squadre.
Viene premiata la squadra più numerosa (o le squadre più numerose, in caso di pari numero di concorrenti).
Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome di un file nel formato sopra descritto e stampi sul monitor il nome e l’elenco dei concorrenti della squadra o delle squadre più numerose secondo l’esempio che segue, relativo ai dati sopra riportati (si osservi che i nomi delle squadre sono convertiti in maiuscolo):
Vincono le squadre con 4 concorrenti.
Squadra POETI composta da:
mario rossi federico bianchi giangiuseppe verdi pier luigi gialli
Squadra DA OLTRE CONFINE composta da:
'abid al hamed romina slovikozky john m. carter ted mc kenny;
Suggerimento: si memorizzino le squadre in un vettore di struct definito come segue:
struct tipo_squadra {
char nome[31];
int n_concorrenti;
char nomi_concorrenti[20][33];
};
struct tipo_squadra squadre[50];
int n_squadre;