Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Informatica I / Fondamenti di Programmazione
Prova scritta del 23 settembre 2013
Esercizio 1 (17 punti)
Il file "rime.dat" contiene un dizionario (lungo al massimo 1000 parole), in cui per ogni parola l'accento è evidenziato dalla lettera maiuscola, mentre le restanti lettere sono scritte in minuscolo. Si veda l’esempio a lato.
Due parole formano una rima se sono identiche le lettere a partire dalla vocale accentata fino al fondo della parola.
Si scriva un programma in linguaggio C che legga dalla riga di comando un elenco di parole (scritte nello stesso formato del dizionario) e stampi, per ciascuna, le parole contenute nel dizionaro che fanno rima con essa. È richiesto che il dizionario venga caricato in memoria facendo uso di un vettore di strutture in cui siano memorizzate le parole e, per ciascuna, l'indice della lettera dove cade l'accento. Il formato di stampa deve essere quello che si deduce dall'esempio riportato a sinistra. Se nessuna parola del dizionario fa rima, l'elenco sarà vuoto.
Esercizio 2 (13 punti)
Un file contiene le informazioni sulla rosa dei giocatori di una squadra di calcio (uno per riga). Le informazioni presenti sono:
numero di maglia, nome (inteso come cognome e iniziali), ruolo (uno tra: P, D, C e A), luogo di nascita, data di nascita, presenze e numero di gol fatti. I campi sono separati da una virgola seguita da uno o più spazi. Si noti che nome e città di nascita possono contenere spazi.
Come esempio, si consideri il file riportato a lato.
Si scriva una funzione che riceva come parametri il nome di un file siffatto e una data g. La funzione deve restituire (attraverso un terzo parametro) il nome del difensore (ruolo D) che ha segnato più gol che sia nato dopo la data g.
Se nessun difensore nel file nato dopo la data g ha segnato almeno un gol, allora il terzo parametro dovrà assumere il valore "Nessuno". Nel file di esempio, se la data passata alla funzione è 20/11/1985 allora la funzione dovrà restituire "HEURTAUX T", se invece la data è 20/02/1991 la funzione dovrà restituire "Nessuno". Si assumano già disponibili la definizione del tipo struct Data (nel classico formato a tre campi interi) e la funzione int ComparaDate(struct Data d1, struct Data d2), che restituisce -1 se la data d1 è precedente a d2, 0 se le due date sono uguali e 1 se d1 è successiva a d2.
Angelo andAi arcAngelo aspEtto aspettAi cercherO rispEtto strEtto tornAi tornerO
>rime dispEtto anEllo portAi fuggirO
rime per 'dispEtto':
aspEtto rispEtto strEtto
rime per 'anEllo':
rime per 'portAi':
andAi aspettAi tornAi
rime per 'fuggirO':
cercherO tornerO
30, KELAVA I, P, Zagabria, 20/02/1988, 3, 0
5, DANILO L, D, Sao Bernardo do Campo, 10/05/1984, 3, 0 4, NALDO E G P, D, Santo Andre, 25/08/1988, 3, 0
7, BADU E A, C, Bekerum, 02/12/1990, 3, 1 21, LAZZARI A, C, Bergamo, 03/12/1984, 3, 0
70, MAICOSUEL R M, C, Cosmopolis, 16/06/1986, 3, 0 10, DI NATALE A, A, Napoli, 13/02/1977, 3, 1 9, MURIEL L F, A, Santo Tomas, 18/03/1991, 3, 2 8, BASTA D, D, Belgrado, 18/08/1984, 2, 0 11, DOMIZZI M, D, Roma, 28/06/1980, 2, 0
34, GABRIEL SILVA M, D, Piracicaba, 13/05/1991, 2, 0 3, ALLAN M L, C, Rio de Janeiro, 08/01/1991, 2, 0
37, PEREYRA R M, C, San Miguel de Tucuman, 07/01/1991, 2, 0 6, BUBNJIC I, D, Spalato, 17/07/1992, 1, 0
75, HEURTAUX T, D, Lisieux, 03/07/1988, 1, 1 66, PINZI G, C, Roma, 11/03/1981, 1, 0
94, ZIELINSKI P, C, Zabkowice Slaskie, 20/05/1994, 1, 0 99, BENUSSI F, P, Mestre (VE), 15/10/1981, 0, 0
1, BRKIC Z, P, Novi Sad, 09/07/1986, 0, 0