Prova scritta del 25 giugno 2018 di Fondamenti di Programmazione / Fondamenti di Informatica I Per studenti di Ing. Elettronica e Ing. Gestionale immatricolati negli anni accademici 2016-17 e precedenti DURATA DELLA PROVA: 2 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 (16 punti)
Un’immagine in bianco e nero (letteralmente, senza livelli di grigio) può essere rappresentata da righe di valori binari dove 1 rappresenta un punto nero e zero un punto bianco. Per visualizzarla sul terminale si può utilizzare un asterisco per i punti neri e uno spazio per i punti bianchi.
Ai fini del presente esercizio si consideri un’immagine codificata mediante righe di numeri interi decimali, compresi tra 0 e 255, i cui valori letti in binario rappresentano, un byte alla volta, i punti bianchi e neri. I numeri sono separati da punto e virgola e ogni riga è terminata da un punto. Si consideri per esempio il file seguente:
file immagine.dat:
255; 255; 255; 255.
170; 0; 170; 1.
255; 0; 255; 0.
valori binari rappresentati:
11111111111111111111111111111111 10101010000000000101010100000001 11111111000000001111111100000000
immagine rappresentata:
********************************
* * * * * * * * *
******** ********
Non è nota la lunghezza delle righe, ma hanno tutte la stessa lunghezza e sono sempre terminate dal punto.
Si scriva un programma in linguaggio C che riceva sulla riga di comando un file nel formato sopra riportato e stampi sul monitor l’immagine rappresentata da tale file. Si veda anche l’esempio a lato.
Suggerimento: può essere utile convertire il numero decimale in una stringa che rappresenti i valori binari del byte corrispondente, in modo da semplificare il successivo processo di visualizzazione del disegno. Per effettuare questa conversione si può utilizzare il seguente algoritmo:
Converti da numero (un byte) a stringa i = 7;
while (i >= 0) {
stringa[i] = codice ASCII del resto della divisione intera del numero per due;
numero = numero diviso 2 (divisione con troncamento);
decrementa i;
}
Questo algoritmo riempie completamente la stringa, anche con gli eventuali zeri iniziali.
NOTA: non dimenticarsi di terminare la stringa con '\0'.
Esercizio 2 (14 punti)
L’orario delle lezioni di un corso universitario è rappresentato in un file il cui formato può essere dedotto dall’esempio a lato, dove:
• i nomi dei corsi sono privi di spazi;
• il numero che segue il nome del corso rappresenta il numero di lezioni elencate nel seguito della riga;
• ogni lezione è rappresentata dall’abbreviazione del giorno e dall’intervallo orario, senza spazi (le ore sono sempre numeri interi).
Il numero massimo di corsi è 20, le lezioni si svolgono dal lunedì al venerdì, in orario compreso tra le ore 8 e le 18.
Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome di un file siffatto e stampi le eventuali sovrapposizioni di lezioni.
Relativamente all’esempio sopra riportato il programma dovrà stampare:
sovrapposizione di Fisica con Fondamenti_di_programmazione (LU ore 10) sovrapposizione di Analisi_matematica con Fisica (GI ore 15)
sovrapposizione di Analisi_matematica con Fisica (GI ore 16)
Suggerimento: si rappresentino i corsi in un vettore di stringhe e l’orario settimanale mediante una matrice di interi, uno per ogni ora di ogni giorno, che corrispondono all’indice del nome del corso che viene erogato in tale ora.
file cosa_apparira.dat:
6; 3; 0.
9; 4; 128.
6; 3; 0.
0; 32; 0.
0; 32; 0.
16; 0; 64.
6; 3; 0.
0; 248.
# decodifica cosa_apparira.dat ** **
* * * * ** **
* *
* * ** **
*****
Fondamenti_di_programmazione 3 LU 8-11 ME 10-12 VE 8-12 Fisica 2 LU 10-12 GI 15-18
Analisi_matematica 2 GI 14-17 VE 13-15