Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 1
oluglio 2014
Esercizio 1 (17 punti)Un file di testo è utilizzato per rappresentare un insieme di sequenze di numeri interi.
Ogni numero è scritto su una riga del file e può essere immediatamente seguito dal carattere ';' (e in tal caso il numero appartiene a tutte le sequenze) oppure dal carattere '|', da un secondo numero e infine dal ';'. In questo caso il secondo numero rappresenta un’alternativa al primo e quidi appartiene a una sequenza diversa.
Le sequenze rappresentate dal file sono tutte quelle che contengono un numero preso da ciascuna riga in tutte le possibili combinazioni.
Si veda l’esempio a lato.
Si scriva una funzione in linguaggio C che riceva come argomenti il nome di un file siffatto e una matrice quadrata di interi. La dimensione della matrice sia definita da una costante N. La funzione deve riempire le righe della matrice secondo lo schema sopra riportato e restituire, in un’apposita struttura, il numero di righe riempite e la loro lunghezza (cioè la lunghezza delle sequenze generate, che è la stessa per tutte).
Si assuma che la matrice sia sufficientemente grande per contenere tutte le sequenze generate tramite il file di ingresso. Si assuma inoltre che il file contenga almeno un numero e quindi esista almeno una sequenza.
Si osservi che ogni volta che si incontra una coppia di valori alternativi è necessario risolvere questi due sottoproblemi:
- raddoppiare le righe della matrice riempite finora;
- aggiungere alle righe originali il primo valore della coppia e a quelle ricopiate il secondo valore.
Esercizio 2 (13 punti)
Un file contiene le informazioni su un insieme di calciatori (uno per riga). Ciascuna riga contiene il nome completo (inteso come cognome e nome), il ruolo, il numero di gol segnati e il numero di presenze. Le informazioni sono separate tra loro da una virgola e uno spazio. Il nome può ovviamente contenere spazi, mentre il ruolo non ha spazi.
Come esempio, si consideri il seguente file.
Bianchi Mauro, attaccante, 10, 20 Rossi Paolo, difensore, 3, 25
Verdi Giuseppe, centrocampista, 7, 20 De Rossi Giovanni, centrocampista, 5, 18 Neri Pier Paolo, difensore, 6, 14
Bianchi Alessandro, attaccante, 9, 19 Viola Pier Giorgio, difensore, 6, 10
Si scriva una funzione C che riceva come parametri il nome di un file siffatto ed una stringa contenente un ruolo. La funzione deve restituire, tramite un ulteriore parametro, il nome completo del giocatore di quel ruolo che ha segnato più gol di tutti. A parità di gol segnati, si deve restituire l'ultimo in ordine di presenza nel file.
Nel file dell'esempio, se il ruolo è "centrocampista" la funzione deve restituire "Verdi Giuseppe", mentre se il ruolo è "difensore" deve restituire "Viola Pier Giorgio".
Nel caso in cui non siano presenti giocatori con il ruolo richiesto, la funzione dovrà restituire la stringa convenzionale "Nessun giocatore".
Per esempio, il file
12;
34|37;
1|255;
4;
5|9;
rappresenta le sequenze:
12 34 1 4 5 12 37 1 4 5 12 34 255 4 5 12 37 255 4 5 12 34 1 4 9 12 37 1 4 9 12 34 255 4 9 12 37 255 4 9