Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 4 febbraio 2015
Esercizio 1 (14 punti)
Un file ASCII contiene la registrazione degli arrivi di una corsa ciclistica in tre tappe. Ogni riga riporta i tempi di ciascun concorrente nelle tre tappe, nel formato che si evince dal seguente esempio:
27 M 2h 12m 5s 1h 54m 15s 0h 56m 44s 341 F 2h 7m 52s 2h 8m 5s 1h 3m 48s 5 M 1h 45m 6s 2h 0m 30s 1h 4m 25s 12 M 2h 18m 23s 2h 2m 20s 1h 15m 0s 71 J 2h 52m 0s 2h 26m 3s 1h 55m 0s 71 F 2h 16m 6s 1h 56m 57s 1h 19m 3s
Il primo numero è il pettorale del concorrente, il carattere M, F o J indica la categoria (classifica maschile, femminile o junior), i successivi tre gruppi di valori indicano i tempi in ciascuna delle tre tappe.
Si scriva una funzione in linguaggio C che riceva il nome di un file siffatto e un carattere ('M', 'F' o 'J') che indica la categoria che si deve considerare. La funzione deve restituire il numero del pettorale del concorrente che ha vinto la gara nella categoria specificata dal relativo parametro, cioè quello che ha ottenuto il minor tempo totale nelle tre tappe. Nel caso in cui non sia presente nessun concorrente nella categoria specificata, la funzione deve restituire -1.
Esercizio 2 (16 punti)
Un file ASCII contiene le regole di conversione di alcune unità di misura nelle misure equivalenti del sistema metrico decimale (s.m.d.). Un esempio di tale file è riportato nel seguito (la massima lunghezza del file è 100 righe):
chilometri = miglia_nautiche * 1.852 centimetri = pollici * 2.54
metri = piedi * 0.3048 metri = iarde * 0.9144
litri = galloni_inglesi * 4.546 litri = galloni_americani * 3.785
Un secondo file contiene una serie di grandezze, una per riga, con le relative unità di misura. Per esempio:
12 chilometri
45 galloni_americani 6.3 piedi
8123 metri 7.9 iarde 9 palmi
12 centimetri
Si scriva un programma in linguaggio C che riceva sulla riga di comando i nomi di tre file: il primo sia il nome del file contenente le regole di conversione nel formato sopra descritto, il secondo il nome del file contenente le grandezze come nell’esempio precedente e il terzo il nome del file di uscita che il programma deve generare.
Il programma deve scrivere nel file di uscita le grandezze nel s.m.d. applicando, per le grandezze non appartenenti al s.m.d., le regole di conversione lette dal file. Se un’unità di misura non compare nel file di conversione a destra dell’uguale, nel file di uscita va riportata invariata.
Relativamente all’esempio di cui sopra, il file di uscita dovrà contenere i seguenti valori:
12 chilometri 170.325 litri 1.92024 metri 8123 metri 7.22376 metri 9 palmi
12 centimetri