Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 30 giugno 2017
Esercizio 1 (14 punti)
In un lontano paese da una decina d’anni si svolge una gara ciclistica di tandem su pista. Ogni coppia di concorrenti pedala esattamente per un’ora e vince la coppia che percorre più chilometri. I dati storici dei risultati sono memorizzati in un file il cui formato può essere dedotto dall’esempio riportato nel riquadro a lato.
Si osservi che:
• i nomi dei ciclisti sono sempre scritti in una sola parola in cui gli spazi sono rappresentati da underscore
• il primo numero di ogni riga rappresenta i chilometri percorsi e il secondo l’anno
• i ciclisti possono essere accoppiati in modo diverso in ogni edizione
• il numero massimo di ciclisti presente nel file è 500, il numero di risultati registrati è invece ignoto
Si vuole premiare il ciclista che ha percorso più chilometri in totale, considerando tutte le edizioni registrate nel file.
Si scriva una funzione in linguaggio C che riceva come argomenti il puntatore a un file come sopra descritto (già aperto in lettura) e restituisca in un’apposita struttura il nome del ciclista da premiare e il numero totale di chilometri percorsi. Si assuma che non si verifichino mai casi di parità.
Relativamente all’esempio di cui sopra, il programma dovrà restituire Ugo_Tiz 179.38.
Esercizio 2 (16 punti)
Un file di testo contiene i dati di una matrice bidimensionale che rappresenta una zona rettangolare di un territorio. Ogni elemento della matrice descrive una porzione quadrata di superficie (pari ad un numero di metri quadrati scritto nell’intestazione del file) mediante due numeri interi: la quota e un codice che indica il tipo di terreno (es. lago, roccia, bosco, mare, ecc.). Il formato del file può essere
dedotto dall’esempio a lato dove, nella parte matriciale, ogni coppia di numeri rappresenta rispettivamente la quota in metri s.l.m. e il codice del tipo di terreno di una porzione quadrata di superficie. Le informazioni di intestazione compaiono sempre tutte e nello stesso ordine. Le coordinate sono sempre
espresse in gradi Nord ed Est. La risoluzione è sempre espressa in metri quadrati (numero intero). Le dimensioni della matrice sono sempre riportate come numero di righe seguito dal numero di colonne (nell’esempio: 4 righe da 7 colonne). La dimensione massima della matrice è 20x20.
Un secondo file contiene le corrispondenze codice – tipo di terreno. Un esempio è riportato nel riquadro più sotto. Si osservi che i tipi di terreno sono sempre espressi con una sola parola. Tutti i codici presenti nella matrice sono presenti anche nel file dei codici (cioè non possono esserci codici sconosciuti). Il numero massimo di codici è 100.
Si scriva un programma in linguaggio C che riceva sulla linea di comando i nomi di due file come sopra descritti e per ogni tipo di terreno generi un file di testo con le seguenti caratteristiche:
• nome: il tipo di terreno
• estensione: .dat
• contenuto: analogo al file di ingresso che descrive il territorio, ma contenente soltanto la quota nei punti in cui è presente il tipo di terreno a cui si riferisce il file e un trattino ('-') negli altri punti
Per esempio, relativamente agli esempi sopra riportati, il programma dovrà generare sette file, dei quali abitato.dat, bosco.dat e mare.dat sono riportati nei riquadri sottostanti.
Suggerimento: si memorizzino i dati letti dal primo file in una matrice di struct e si scandiscano le righe del secondo file una alla volta per generare i file di uscita (senza memorizzare tali righe in una tabella).
102 bosco 201 roccia 101 prato 301 lago 302 fiume 303 mare 901 abitato Federico_Verdi Mario_Bianchi 57.34 2010
Alberto_Della_Rosa Ugo_Tiz 64.7 2010 Ugo_Tiz Pier_Paolo_Rittel 57.34 2011 Francesco_Di_Qua Luigi_Di_Qui 54.932 2011 Mario_Bianchi Paolo_Gialli 49.3 2011
Pier_Paolo_Rittel Alberto_Della_Rosa 54.932 2012 Mario_Bianchi Luigi_Di_Qui 67.0 2012
Pier_Paolo_Rittel Ugo_Tiz 57.34 2013
coordinate_GPS: 46.0711 N 13.2346 E risoluzione: 5
dimensioni: 4 7
90/102 90/102 95/101 95/101 95/101 97/101 100/101 93/102 91/102 92/102 95/101 97/901 99/901 102/101 99/102 91/102 92/102 95/101 97/901 99/901 102/101 103/901 102/901 100/901 98/901 97/901 96/901 95/901
coordinate_GPS: 46.0711 N 13.2346 E risoluzione: 5
dimensioni: 4 7
- - - - - - - - 97 99 - - - - - 97 99 - 103 102 100 98 97 96 95
file abitato.dat
coordinate_GPS: 46.0711 N 13.2346 E risoluzione: 5
dimensioni: 4 7
90 90 - - - - - 93 91 92 - - - - 99 91 92 - - - - - - - -
file bosco.dat
coordinate_GPS: 46.0711 N 13.2346 E risoluzione: 5
dimensioni: 4 7
- - - - - - - - - - - - - - - -
file fiume.dat