| Nome |
Cognome |
Matricola |
| Soluzione esame gg/mm/aaaa | ||
|---|---|---|
| Domanda | Risposta | |
| 1 |
Disegnare la memoria vista come ripiani numerati dopo aver eseguito queste istruzioni, sapendo che viene stampato 2 4 5.
int a;
int *b;
b = &a;
print("%d %d %d\n", a, &a, &b);
(linguaggi di programmazione) |
Il valore di a è il primo numero stampato, quindi 2. Il suo indirizzo è il secondo, quindi 4. Quindi la locazione di memoria 4 contiene il numero 2. L'indirizzo di b è il terzo numero, quindi 5. Il suo valore è l'indirizzo di a, che è il secondo numero stampato 4. Quindi la locazione di memoria 5 contiene il numero 4.
|
| 2 |
Convertire i numeri 10, 3 e 9 in binario; sommare il primo con il secondo, al risultato sottrarre il terzo. Queste operazioni vanno effettuate in binario. (rappresentazioni numeriche o logica applicata) |
10 / 2 = 5 resto 0 5 / 2 = 2 resto 1 2 / 2 = 1 resto 0 1 / 2 = 0 resto 1 10 = 1010b 3 / 2 = 1 resto 1 1 / 2 = 0 resto 1 3 = 11b 9 / 2 = 4 resto 1 4 / 2 = 2 resto 0 2 / 2 = 1 resto 0 1 / 2 = 0 resto 1 9 = 1001b
1010 +
11 =
-------
0 + 1 ⇒ 1
1 + 1 ⇒ 1, riporto 1
0 + 1(riporto) ⇒ 1
1111
1010 + 11 = 1111
1111 -
1001 =
--------
1 - 1 = 0
1 - 0 = 1
1 - 0 = 1
1 - 1 = 0
--------
0110
1111 - 1001 = 0110 |
| 3 |
Scrivere un programma Python che verifica se un grafo ha una clique di grandezza n. Non è necessario il codice della classe Grafo. (grafi) |
# verifica se l'insieme di nodi e' una clique del grafo
def clique(grafo, nodi):
for n in nodi:
if grafo.successori(n) - {n} < nodi - {n}:
return False;
return True;
# presenza di una clique grande n
def cliquen(grafo, n):
print(' ', n)
for c in itertools.combinations(grafo.nodi(), n):
print(' ', c)
if clique(grafo, set(c)):
return True;
return False;
|
| 4 |
Scrivere l'espressione regolare che collima con le stringhe di lettere minuscole che contengono almeno una a e almeno una b. (linguaggi formali) |
L'espressione regolare deve contenere almeno una a e almeno una b, per cui potrebbe avere la forma …a…b…. Le altre lettere devono essere in [a-z], per cui si ottiene [a-z]*a[a-z]*b[a-z]*. Questa espressione regolare collima con le stringhe che contengono almeno una a e almeno una b tranne quelle in cui tutte le b precedono tutte le a. Il problema si risolve aggiungendo in alternativa l'espressione regolare simile [a-z]*b[a-z]*a[a-z]* in cui le b possono precedere la a. [a-z]*a[a-z]*b[a-z]*|[a-z]*b[a-z]*a[a-z]* |
| 5 |
Fornire un esempio di problema nella classe di complessità P, uno nella classe NP e uno NP-hard. (calcolabilità e complessità) |
Un problema in P è quello di stabilire se un sottoinsieme dato di nodi di un grafo è una clique del grafo. Uno che è sia in NP che NP-hard è quello di trovare un sottoinsieme con somma dispari di un insieme di interi. |
NOTA: risposte prive di esauriente motivazione (es. i passaggi delle operazioni numeriche) verranno considerate nulle.