Prova scritta del 1 luglio 2019 di Fondamenti di Programmazione e Strutture Dati e Algoritmi Per studenti di Ing. Elettronica e Ing. Gestionale immatricolati a partire dall’anno 2017-18 DURATA DELLA PROVA: 3 ORE
A pena di annullamento immediato della prova:
1) non è possibile consultare libri o appunti (in qualunque forma) né utilizzare calcolatrici, telefoni cellulari, ecc.;
2) non è consentito comunicare (con qualunque mezzo);
3) non è consentito uscire dall’aula.
Lo studente è tenuto a scrivere, correggere, compilare ed eseguire su computer (a casa o in laboratorio) gli esercizi di programmazione prima della prova orale. Alla prova orale lo studente deve portare una memory pen USB contenente i sorgenti dei programmi corretti e le stampe dei relativi file.
Esercizio 1 (17 punti)
Un file contiene i tragitti e gli orari dei treni che partono da una certa località (Valpisello di sotto, nell’esempio). Il formato del file prevede una riga per ogni stazione in cui il treno si ferma e può essere dedotto dal seguente esempio:
Treno FX27728, 4 fermate:
Valpisello di sotto, 8:10 Valpisello di sopra, 8:27 Arancini sottocolle, 9:45 Rangone, 10:27
Treno LZ12, 2 fermate:
Valpisello di sotto, 15:33 Arancini sottocolle, 16:40
Si scriva un programma che riceva sulla riga di comando il nome di un file siffatto e una destinazione e stampi i codici di tutti i treni che raggiungono tale destinazione in ordine di tempo di percorrenza (stampato anch’esso, in minuti).
Nell’esempio, il programma dovrà stampare:
LZ12 67 minuti FX27728 95 minuti
Se la destinazione cercata non fosse presente nel file il programma deve segnalare un errore
Esercizio 2 (5 punti)
Si consideri la libreria in linguaggio C per manipolare file bitmap vista a lezione, così definita:
typedef unsigned char byte;
typedef unsigned short int word;
typedef unsigned long int dword;
#define BMPFILETYPE 0x4D42 typedef struct tagCOLORTRIPLE {
byte blue;
byte green;
byte red;
} COLORTRIPLE;
typedef struct tagFILEHEADER {
word ImageFileType;
dword FileSize;
word Reserved1;
word Reserved2;
dword ImageDataOffset;
} FILEHEADER;
typedef struct tagBMPHEADER {
dword HeaderSize;
dword ImageWidth;
dword ImageHeight;
word NumberOfImagePlanes;
word BitsPerPixel;
dword CompressionMethod;
dword SizeOfBitmap;
dword HorizonalResolution;
dword VerticalResolution;
dword NumberOfColorsUsed;
dword
NumberOfSignificantColors;
} BMPHEADER;
typedef struct tagBITMAP {
dword width;
dword height;
COLORTRIPLE *pixel;
FILEHEADER fileheader;
BMPHEADER bmpheader;
} BITMAP;
#define PIXEL(image, row, column) \ image.pixel [(row( * image.width +
(column)]
BITMAP ReadBitmap (FILE *fp);
void WriteBitmap (BITMAP bitmap, FILE *fp);
BITMAP CreateEmptyBitmap
(dword height, dword width);
void ReleaseBitmapData (BITMAP *bitmap);