Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 15 febbraio 2016
Esercizio 2 (15 punti)
Un file di testo contiene la descrizione dei salti, uno per riga, di un punto in un piano rappresentato da una matrice di interi di dimensioni 20x20. La posizione iniziale del punto sia { 0, 0 } e la descrizione dei salti sia nel formato deducibile dal seguente esempio:
x +3; y +15; x +8; y -5; x -3; y +7; x -2;
y -12; x +9;
Una riga del file può contenere uno o più salti, il primo termine identifica la coordinata e il secondo la lunghezza e la direzione del salto. Per esempio, se la posizione corrente del punto è { 10, 10 } il salto y +5; porta il punto nella posizione { 10, 15 }, e il successivo salto x -2; porta il punto nella posizione { 8, 15 }.
Si scriva un programma che riceva sulla linea di comando il nome di un file di salti nel formato di cui sopra, tracci nella matrice i salti in esso descritti e disegni sul video il percorso effettuato dal punto. In ogni posizione della matrice in cui il punto approda va scritto il numero progressivo del salto (attribuendo 1 alla posizione di partenza). Qualora il punto passi più volte nella stessa posizione, la cella dovrà riportare solo il numero dell’ultimo salto.
Nel caso dell’esempio sopra riportato, il programma deve stampare il disegno qui di fianco (gli assi x e y di riferimento sono quelli delle normali coordinate cartesiane).
Esercizio 2 (15 punti)
Un file di testo contiene le date di nascita e il soprannome di un numero imprecisato di persone. Ogni riga contiene i dati di una persona, nel formato che può essere dedotto dall’esempio a lato. Si osservi che i nomi dei mesi sono sempre indicati dalle prime tre lettere minuscole del nome in italiano e che i soprannomi sono sempre composti da una sola parola.
Si assuma già disponible la funzione int confronta_date (struct data d1, struct data d2); che, ricevendo le due date nella consueta struttura struct data composta da tre campi interi, restituisce 0 se le due date sono uguali, un valore minore di zero se la data d1 è precedente a d2 e un valore maggiore di zero altrimenti.
Si scriva una funzione in linguaggio C che riceva come argomenti il puntatore a un file di testo nel formato sopra descritto (il file è quindi già stato aperto dalla funzione chiamante) e che restituisca, in un’apposita struttura, soprannome e data di nascita della persona più giovane presente nel file. Per semplicità si può assumere che il file contenga sempre almeno una riga di dati. Nel caso in cui siano più persone di età minima nate esattamente lo stesso giorno dovrà essere restituita la prima di esse presente nel file.
3-feb-1970: DarthVader 23-ago-1968: Spider 18-set-2000: Quercia
1-nov-1998: ColpoDellaStrega . . . . . . . . . . . 8 . 7 . . . . . . . . . . . 3 . . . 4 . . . . . . . . . . . . . . . . . . . . . . . 6 . . 5 . . . . . . . . . . . . . . . . . . . . . . . 9 . . . . 10 . . . . . . . . . . . . . . . . . . . . 1 . . 2 . . . .