Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 19 settembre 2016
Esercizio 1 (15 punti)
Due file ASCII rappresentano, rispettivamente, l’immagine campione di un soggetto e un’immagine, più grande, contenente nessuna, una o più copie di tale soggetto. Il primo file (soggetto.dat, nell’esempio a destra) contiene una matrice di 8 x 8 caratteri (nell’esempio i soli caratteri utilizzati sono la lettera ‘P’ e lo spazio, ma potrebbero anche essere molti di più). Il secondo file, (immagine.dat, nell’esempio) contiene una matrice di 20 x 20 caratteri.
Nell’immagine il soggetto:
- mantiene sempre la dimensione originale di 8 x 8 caratteri - è sempre orientato come nel file originale
- può non comparire da solo (come nell’esempio, in cui è presente anche un altro soggetto)
- non si sovrappone mai ad un’altra copia del soggetto stesso né ad altri soggetti, neanche nei caratteri contenenti spazi (in pratica, ogni replica del soggetto occupa da sola l’intera porzione dell’immagine di 8 x 8 caratteri).
Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome di due file come quelli sopra descritti e stampi il numero delle repliche del soggetto presenti nell’immagine (3, nell’esempio sopra riportato).
Esercizio 2 (15 punti)
Si dispone di un file contenente i dati storici di titoli di borsa, con nome (senza spazi) e codice, nel formato che si evince dall’esempio a fianco. La lunghezza del file è ignota, ma il massimo numero di titoli differenti che vi possono comparire è pari a 100.
Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome di un file contenente una serie storica come sopra descritta e stampi, per ogni titolo, il valore massimo raggiunto e la data in cui è stato raggiunto, nel seguente formato (relativamente all’esempio):
ITAETH (EUROTECH) 1 gennaio 2009: 3.6400 ITAPLT (PARMALAT) 1 gennaio 2009: 1.6720 ITASTM (STMICROELECTR) 3 aprile 2009: 7.80 ITAOL (TELECOM_ITALIA) 2 febbraio 2009: 1.1020 ITADMH (DUCATI_MOTOR_H) 3 maggio 2009 1.960
Si osservi che se un titolo nella serie compare più volte con lo stesso valore massimo va stampata solo la prima data con cui compare.
Suggerimenti:
Si definisca un vettore i cui elementi siano costituiti da un’opportuna struttura dati struct titoli adatta a rappresentare un titolo di borsa.
Per popolare correttamente tale vettore si scriva ed utilizzi la funzione
indice_del_titolo (struct titoli anagrafe_titoli[], int n_titoli, char codice_titolo[])
che restituisce l’indice del titolo cercato codice_titolo, se già presente nel vettore, e -1 altrimenti.
PPPPP PP PP PPPPP PP PP PP PP PP PP PP PP PPPPP PP PP PP PPPPP PP PP PP PP PP PPPPP PP PP PPPPP PP PP PP PP PP PP PP PP PPPPP PP PP PP PP PPPPP PP PP PP PP PP PP PP
immagine.dat
PPPPP PP PP PP PP PP PP PPPPP PP PP PP
soggetto.dat
EUROTECH ITAETH 01/01/2009 3.6400 PARMALAT ITAPLT 01/01/2009 1.6720 STMICROELECTR ITASTM 01/01/2009 7.6050 EUROTECH ITAETH 02/01/2009 3.500 STMICROELECTR ITASTM 02/02/2009 7.6050 TELECOM_ITALIA ITAOL 02/02/2009 1.1020 EUROTECH ITAETH 03/04/2009 3.5500 PARMALAT ITAPLT 03/04/2009 0.980 STMICROELECTR ITASTM 03/04/2009 7.80 DUCATI_MOTOR_H ITADMH 01/05/2009 1.6750 DUCATI_MOTOR_H ITADMH 03/05/2009 1.960 PARMALAT ITAPLT 02/06/2009 1.150 DUCATI_MOTOR_H ITADMH 02/06/2009 1.880