Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 2 febbraio 2016
Esercizio 1 (16 punti)
Un file di testo contiene le equivalenze tra unità di misura, nel formato che si evince dall’esempio a lato.
Le unità di misura sono sempre formate da una sola parola, il secondo elemento di ogni riga è sempre la freccia rappresentata con i caratteri “-->” e il quarto elemento è sempre un asterisco, ad indicare l’operazione di moltiplicazione necessaria per la conversione. Il file contiene al massimo 100 regole di traduzione.
Un secondo file, di lunghezza ignota, contiene delle grandezze che devono essere convertite, nel formato deducibile dall’esempio del riquadro a lato.
Si scriva una funzione che riceva come argomenti il nome del file di equivalenze sopra descritto, il nome di un file di grandezze (con i punti interrogativi) e il nome di un file di uscita. La funzione deve copiare le righe del file di ingresso in quello di uscita sostituendo ai punti interrogativi i valori corretti.
Si assuma che per tutte le coppie di unità di misura utilizzate in ogni riga del file delle grandezze sia presente una regola di conversione nel file delle equivalenze (eventualmente da utilizzare invertita, come nei casi “9782 cmq
= ? mq” e “7 mm = ? m” dell’esempio). Quindi è sempre sufficiente cercare ed applicare una e una sola regola di conversione.
Relativamente agli esempi sopra riportati, al termine dell’esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.
NOTA: è accettabile che il formato numerico dei dati di ingresso cambi nel file di uscita. Per esempio, “9782 cmq
= ? mq” può anche diventare “9.782e3 cmq = 0.9782 mq” o “7 km = ? m” può diventare “7.0 km = 7000.0 m”, ecc.
Esercizio 2 (14 punti)
Due file di testo contengono due elenchi di nomi di lunghezza ignota. Ogni riga di ciascun file contiene uno e un solo nome, che può essere composto da più parole separate da spazi. I nomi in entrambi i file sono ordinati in ordine alfabetico e il formato in cui sono scritti
(spaziature, ecc.) è identico.
Si scriva un programma che riceva sulla riga di comando i nomi dei due file e stampi sul monitor i nomi che compaiono in entrambi i file.
Per esempio, se il contenuto dei due file è quello riportato nei riquadri a lato, il programma deve stampare il risultato che segue:
# nomi_in_entrambi_i_file autori_1.dat autori_2.dat Alessandro Baricco
Andy Weir Dan Brown
Herbert George Wells Matilde Asensi
m --> cm * 100 m --> mm * 1000 km --> m * 1000 mq --> cmq * 10000
7 km = ? m 123.56 m = ? cm 9782 cmq = ? mq 7 mm = ? m
7 km = 7000 m
123.56 m = 12356 cm 9782 cmq = 0.9782 mq 7 mm = 0.007 m
File autori_1.dat:
Alessandro Baricco Andrea Camilleri Andy Weir
Dan Brown
Herbert George Wells J. K. Rowling
Matilde Asensi
File autori_2.dat:
Alessandro Baricco Andy Weir
Dan Brown
Frank Schatzing Herbert George Wells Matilde Asensi
Umberto Eco