vuoi
o PayPal
tutte le volte che vuoi
Corso di Laurea in Ingegneria Gestionale
Prof. Florian Daniel
Prof. Alessandro Margara
Prof. Gerardo Pelosio
Informatica A – a.a. 2016/2017 – 2 Appello – 30/06/2017
Cognome ____________________________ Matricola o Cod. Persona _______________
Nome _______________________________ Firma ________________________
Istruzioni
- Non separate questi fogli. Scrivete la soluzione solo sui fogli distribuiti, utilizzando il retro delle pagine in caso di necessità. Cancellate le parti di brutta (o ripudiate) con un tratto di penna.
- Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.
- È possibile scrivere a matita e non occorre ricalcare al momento della consegna.
- È vietato utilizzare calcolatrici e qualunque dispositivo elettronico. Chi tenti di farlo vedrà annullata la sua prova.
- È ammessa la consultazione di libri e appunti, purché con pacata discrezione e senza disturbare.
Qualsiasi tentativo di comunicare con altri studenti comporta l'espulsione dall'aula.
- Non è possibile lasciare l'aula conservando il tema della prova in corso.
- È possibile ritirarsi senza penalità.
- Tempo a disposizione: 2h 30m
Valore indicativo degli esercizi, voti parziali e voto finale:
Esercizio 1 (3 punti) ____________
Esercizio 2 (6 punti) ____________
Esercizio 3 (16 punti) ____________
Esercizio 4 (8 punti) ____________
Totale (33 punti) ____________
Voto finale __________
Esercizio 1 - Algebra di Boole e Codifica delle Informazioni (3 punti)
Si costruisca la tabella di verità della seguente espressione booleana (1 punto)
(a) not (A and B) or C and (C or not(B and A))
(A · B) + C · (C + (B · A))
con altra notazione
Soluzione not ( A and B) or C and ( C or not ( B and A ))
1 0 0 0 1 0 0 0 1 1 0 0 0
1 0 0 0 1 1 1 1 1 1 0 0 0
1 0 0 1 1 0 0 0 1 1 1 0 0
1 0 0 1 1 1 1 1 1 1 1 0 0
1 1 0 0 1 0 0 0 1 1 0 0 1
1 1 0 0 1 1 1 1 1 1 0 0 1
è lo stesso e il risultato è corretto. A-B (2) 0010100 c2 Si genera riporto oltre la posizione del bit più significativo. Non si verifica overflow: il segno degli addendi è lo stesso e il risultato è corretto.è discorde.= =A+B 55 + (-37) 18 che è compreso nell’intervallo I .dec dec dec n=A 20 = 0110111hex c2= =-B not(1011011 )+1 0100101c2 c2=A+(-B) 1011100 c2Non si genera riporto oltre la posizione del bit più significativo.Si verifica overflow: addendi positivi con risultato negativo; il risultato eccede il potere dirappresentazione di 7 bit.= =A-B 55 - (-37) 92dec dec dec Se si continua sul retro di qualche foglio, indicare qualeInformatica A – a.a. 2016/2017 – 2o Appello – 30/06/2017 Esercizio n. 1 -- foglio 2 di 9Esercizio 2 – Analisi del codice (6 punti)#include <stdio.h> int main() {#include <stdlib.h>#include <string.h> char word[] = "MinMax";int len = strlen(word);int go (char *a, char *b) {char *temp = b; char *res = (char*) malloc (if (*a < 'a') { sizeof(char)*len + 1);*b++ = *a;*a = '_'; for (int i=0; i<len; i++)} *(res + i) = '\0';a++; int n = go (word, res);if (*a
== '\0')return 0; printf("%s %s %d\n", word, res, n);return count(b,temp) + go(a,b);} return 0;}int count (char *a, char *b) {return a-b;}(a) Si disegnino lo stack dei "record di attivazione" e la memoria allocata dal programma nello heapnell'istante precedente al momento in cui la funzione esegue l'istruzione indicata dallareturn 0g()freccia. Si rappresentino tutte le variabili adottando le solite convenzioni (vettori: blocchi contigui;puntatori: frecce; valori indefiniti: punti interrogativi). Si ricorda che nella codifica ASCII dei caratteri icatteri maiuscoli corrispondono ai numeri decimali 65-90 e quelli minuscoli ai numeri decimali 97-122.Soluzione a b tempgo(...) a b tempgo(...) a b tempgo(...) a b tempgo(...) a b tempgo(...) a b tempgo(...) word _ i n _ a x \0res M M \0 \0 \0 \0 \0main() x 0 Se si continua sul retro di qualche foglio, indicare qualeInformatica A – a.a. 2016/2017 – 2o Appello – 30/06/2017 Esercizio n.
2 -- foglio 3 di 9(b) Si mostri la linea stampata a video dal programma.
Soluzione
Il programma stampa a video due stringhe e un valore intero:
_in_ax MM 2
Il primo valore di tipo stringa è quello della variabile automatica ] dichiarata e inizializzata nel word[cui le lettere maiuscole sono state sostituite con il carattere main()in '_'; resil secondo valore di tipo stringa è quello della variabile dinamica indirizzata dalla variabile puntatore ed è uguale alla sequenza di lettere maiuscole estratte ordinatamente da sinistra a destra dalla variabile word[]; il valore di tipo intero è uguale al numero di lettere maiuscole trovate.
Se si continua sul retro di qualche foglio, indicare quale
Informatica A – a.a. 2016/2017 – 2o Appello – 30/06/2017 Esercizio n. 2 -- foglio 4 di 9
Esercizio 3 – Sintesi del codice (16 punti)
Si consideri un programma per la gestione delle aule in un'università.
L'occupazione delle aule
<html>
<head>
<title>Esercizio Aule Libere</title>
</head>
<body>
<h1>Esercizio Aule Libere</h1>
<p>
La disponibilità delle aule è modellizzata come il numero di persone presenti nella stanza a una certa ora.
Si suppone che ci siano in tutto 20 aule (numerate da 0 a 19) e che ciascuna di esse sia disponibile a tutte le
ore del giorno (anch'esse numerate da 0 a 23).
</p>
<p>
(a) Date le seguenti macro e la definizione di tipo NUM_AULE, NUM_ORE, occupazione_aule:
</p>
<pre>
<code>
#define NUM_AULE 20
#define NUM_ORE 24
typedef unsigned int occupazione_aule[NUM_AULE][NUM_ORE];
</code>
</pre>
<p>
scrivere in C la funzione aule_libere(occupazione_aule occ, unsigned int ora) che calcola il numero di aule libere
(cioè quelle con occupazione pari a zero) a una determinata ora a partire dalla matrice di occupazione delle aule,
occ, e dall'ora, ora, passati come parametri.
</p>
<p>
N.B.: dalla definizione del "tipo di dato" sopra riportata, si evince che nel referenziare le celle della matrice il
numero di riga identificherà un'aula, mentre il numero di colonna identificherà un'ora del giorno.
</p>
</body>
</html>
punti)Soluzione:int aule_libere(occupazione_aule occ, int ora) {int i, libere = 0;for (i = 0; i < NUM_AULE; i++) {if (occ[i][ora] == 0) {libere++;}}return libere;}
Se si continua sul retro di qualche foglio, indicare qualeInformatica A – a.a. 2016/2017 – 2o Appello – 30/06/2017 Esercizio n. 3 -- foglio 5 di 9
(b) Scrivere in C la funzioneunsigned int aula_piu_affollata(occupazione_aule occ);che calcola l’aula più affollata, cioé l’aula con il più alto numero medio di persone per ora. (4 punti)
Soluzione:unsigned int aula_piu_affollata(occupazione_aule occ) {int i, j, somma, risultato = 0;float numeroMedioPersonePerOra, maxMedia = 0.0;for (i = 0; i < NUM_AULE; i++) {somma = 0;for (j = 0; j < NUM_ORE; j++) {somma += occ[i][j]; // calcolo num. totale di persone nell’aula i}numeroMedioPersonePerOra = ((float) somma) / NUM_ORE;if (numeroMedioPersonePerOra > maxMedia) {maxMedia = numeroMedioPersonePerOra;risultato =
i;}}return risultato;} Se si continua sul retro di qualche foglio, indicare quale Informatica A – a.a. 2016/2017 – 2o Appello – 30/06/2017 Esercizio n. 3 -- foglio 6 di 9